test: Product and ProductType icon resizing

This commit is contained in:
thomas girod 2024-09-15 14:58:37 +02:00
parent 79ef151ad3
commit e8b496cfdc
5 changed files with 46 additions and 1 deletions

View File

@ -43,6 +43,18 @@ class CurrencyField(models.DecimalField):
return None return None
if settings.TESTING:
from model_bakery import baker
baker.generators.add(
CurrencyField,
lambda: baker.random_gen.gen_decimal(max_digits=8, decimal_places=2),
)
else: # pragma: no cover
# baker is only used in tests, so we don't need coverage for this part
pass
# Accounting classes # Accounting classes

View File

@ -46,7 +46,7 @@ class ResizedImageFieldFile(ImageFieldFile):
extension = formats[new_format] extension = formats[new_format]
else: else:
raise ValueError(f"Unknown format {new_format}") raise ValueError(f"Unknown format {new_format}")
return str(Path(self.file.name).with_suffix(f".{extension}")) return str(Path(self.file.name).with_suffix(extension))
def save(self, name, content, save=True): # noqa FBT002 def save(self, name, content, save=True): # noqa FBT002
content.file.seek(0) content.file.seek(0)

View File

View File

@ -0,0 +1,33 @@
from io import BytesIO
from uuid import uuid4
import pytest
from django.core.files.uploadedfile import SimpleUploadedFile
from model_bakery import baker
from PIL import Image
from counter.models import Product, ProductType
@pytest.mark.django_db
@pytest.mark.parametrize("model", [Product, ProductType])
def test_resize_product_icon(model):
"""Test that the product icon is resized when saved."""
# Product and ProductType icons have a height of 70px
# so this image should be resized to 50x70
img = Image.new("RGB", (100, 140))
content = BytesIO()
img.save(content, format="JPEG")
name = str(uuid4())
product = baker.make(
model,
icon=SimpleUploadedFile(
f"{name}.jpg", content.getvalue(), content_type="image/jpeg"
),
)
assert product.icon.width == 50
assert product.icon.height == 70
assert product.icon.name == f"products/{name}.webp"
assert Image.open(product.icon).format == "WEBP"