Fixed test and celery
ci/woodpecker/push/build Pipeline was successful Szczegóły
ci/woodpecker/pr/build Pipeline was successful Szczegóły

feature/thumbnails
mtyton 2023-09-16 13:27:05 +02:00
rodzic 7c6bfbb863
commit e8e8997528
12 zmienionych plików z 68 dodań i 84 usunięć

Wyświetl plik

@ -0,0 +1,12 @@
from artel.settings.base import *
# SECURITY WARNING: define the correct hosts in production!
ALLOWED_HOSTS = ["*"]
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = "smtp-server"
EMAIL_HOST_USER = None
EMAIL_HOST_PASSWORD = None
EMAIL_PORT = 1025
EMAIL_USE_TLS = False
DEFAULT_FROM_EMAIL = os.environ.get('DEFAULT_FROM_EMAIL', 'mtyton@tepewu.pl')

Wyświetl plik

@ -3,6 +3,8 @@ from .base import *
# SECURITY WARNING: define the correct hosts in production!
ALLOWED_HOSTS = ["*"]
SECRET_KEY = "test"
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = "smtp-server"
EMAIL_HOST_USER = None

Wyświetl plik

@ -1,12 +1,13 @@
from celery import shared_task
from easy_thumbnails.files import generate_all_aliases
import celery
import logging
from easy_thumbnails.files import generate_all_aliases
logger = logging.getLogger(__name__)
@shared_task(serializer="pickle")
@celery.shared_task(name="generate_thumbnails")
def generate_thumbnails(model, pk, field):
try:
instance = model._default_manager.get(pk=pk)

Wyświetl plik

@ -8,6 +8,14 @@ services:
- POSTGRES_USER=comfy
- POSTGRES_PASSWORD=password
- POSTGRES_DB=comfy_shop
test_rabbit:
hostname: rabbit
image: rabbitmq:3.6.0
environment:
- RABBITMQ_DEFAULT_USER=rabbitmq
- RABBITMQ_DEFAULT_PASS=rabbitmq
test_comfy:
depends_on:
- test_db
@ -19,5 +27,34 @@ services:
- SECRET_KEY=RandomKey
- DATABASE_URL=postgres://comfy:password@test_db/comfy_shop
- DJANGO_SETTINGS_MODULE=artel.settings.tests
- RABBITMQ_DEFAULT_USER=rabbitmq
- RABBITMQ_DEFAULT_PASS=rabbitmq
command:
python manage.py test --noinput
test_beat:
build:
context: .
dockerfile: Dockerfile
command: celery -A artel beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
environment:
- SECRET_KEY=RandomKey
- DATABASE_URL=postgres://comfy:password@test_db/comfy_shop
- DJANGO_SETTINGS_MODULE=artel.settings.tests
depends_on:
- test_comfy
- test_rabbit
test_worker:
build:
context: .
dockerfile: Dockerfile
command: celery -A artel worker -l info
environment:
- SECRET_KEY=RandomKey
- DATABASE_URL=postgres://comfy:password@test_db/comfy_shop
- DJANGO_SETTINGS_MODULE=artel.settings.tests
depends_on:
- test_comfy
- test_rabbit
- test_beat

Wyświetl plik

@ -75,7 +75,7 @@ services:
command: celery -A artel worker -l info
volumes:
- ./:/app
- media:/app/media
- ./media:/app/media
env_file:
- .env
environment:

Wyświetl plik

@ -4,4 +4,3 @@ from django.apps import AppConfig
class StoreConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'store'

Wyświetl plik

@ -21,4 +21,3 @@ class Migration(migrations.Migration):
field=easy_thumbnails.fields.ThumbnailerImageField(upload_to=""),
)
]

Wyświetl plik

@ -23,6 +23,7 @@ from django.template import (
from django.core.exceptions import ValidationError
from django.db.models.signals import m2m_changed
from django.forms import CheckboxSelectMultiple
from django.dispatch import receiver
from modelcluster.models import ClusterableModel
from modelcluster.fields import ParentalKey
@ -35,17 +36,14 @@ from wagtail import fields as wagtail_fields
from taggit.managers import TaggableManager
from phonenumber_field.modelfields import PhoneNumberField
from num2words import num2words
from easy_thumbnails.fields import ThumbnailerImageField
from easy_thumbnails.signals import saved_file
from mailings.models import (
OutgoingEmail,
Attachment
)
from easy_thumbnails.fields import ThumbnailerImageField
from django.dispatch import receiver
from easy_thumbnails.signals import saved_file
from artel import tasks
from artel.tasks import generate_thumbnails
logger = logging.getLogger(__name__)
@ -542,6 +540,7 @@ class OrderDocument(models.Model):
@receiver(saved_file)
def generate_thumbnails_async(sender, fieldfile, **kwargs):
tasks.generate_thumbnails.delay(
generate_thumbnails.delay(
model=sender, pk=fieldfile.instance.pk,
field=fieldfile.field.name)
field=fieldfile.field.name
)

Wyświetl plik

@ -1,5 +1,7 @@
import logging
import celery
from django.conf import settings
from easy_thumbnails.files import generate_all_aliases
from mailings.models import OutgoingEmail
from store.models import Product
@ -8,8 +10,8 @@ from store.admin import ProductAdmin
logger = logging.getLogger(__name__)
# TODO - those should be modified to be celery tasks
@celery.shared_task(name="send_produt_request_email")
def send_produt_request_email(variant_pk: int):
try:
variant = Product.objects.get(pk=variant_pk)

Wyświetl plik

@ -1,34 +0,0 @@
from django.test import TestCase
from store.tests.factories import ProductTemplateFactory
from store.models import ProductTemplateImage
from django.core.files.uploadedfile import SimpleUploadedFile
from artel.tasks import generate_thumbnails
from abc import ABC
class AbstractThumbnailGenerationTest(TestCase, ABC):
model_factory = None
def test_generate_thumbnails(self):
model_instance = self.model_factory()
image_path = "media/dow.jpg"
image_file = SimpleUploadedFile("test_image.jpg",
open(image_path, "rb").read(),
content_type="image/jpeg")
instance_mock = self.model_class(
template=model_instance,
image=image_file,
is_main=True
)
instance_mock.save()
instance_pk = instance_mock.pk
result = generate_thumbnails(model=instance_mock.__class__,
pk=instance_pk,
field="image")
self.assertTrue(result["status"])
class ProductTemplateImageThumbnailTest(AbstractThumbnailGenerationTest):
model_factory = ProductTemplateFactory
model_class = ProductTemplateImage

Wyświetl plik

@ -1,33 +0,0 @@
from django.test import TestCase
from django.core.files.uploadedfile import SimpleUploadedFile
from unittest.mock import patch
from store.tests.factories import ProductTemplateFactory
from store.models import ProductTemplateImage
from abc import ABC
class AbstractSignalTest(TestCase, ABC):
def setUp(self):
self.template_instance = ProductTemplateFactory()
def create_instance_mock(self):
raise NotImplementedError("Subclasses must implement this method")
@patch("artel.tasks.generate_thumbnails.delay")
def test_generate_thumbnails_async_signal(self, mock_generate_thumbnails):
self.instance_mock = self.create_instance_mock()
mock_generate_thumbnails.assert_called_once_with(
model=self.instance_mock.__class__,
pk=self.instance_mock.pk,
field="image",
)
class ProductTemplateImageSignalTest(AbstractSignalTest):
def create_instance_mock(self):
return ProductTemplateImage.objects.create(
template=self.template_instance,
image=SimpleUploadedFile("test_image.jpg", b"fake_content"),
is_main=True
)

Wyświetl plik

@ -53,7 +53,7 @@ class CartView(TemplateView):
class CartActionView(ViewSet):
# TODO - test this, currently not in use
# NOTE - currently not in use
@action(detail=False, methods=["get"], url_path="list-products")
def list_products(self, request):
# get cart items
@ -144,7 +144,7 @@ class ConfigureProductSummaryView(View):
def post(self, request, variant_pk: int, *args, **kwargs):
# Here just send the email with product request
variant = Product.objects.get(pk=variant_pk)
send_produt_request_email(variant.pk)
send_produt_request_email.apply_async(args=[variant.pk])
messages.success(request, "Zapytanie o produkt zostało wysłane")
context = self.get_context_data(variant_pk)
return HttpResponseRedirect(context["store_url"])