#51 feat: add editable store logo to StoreSettings
This commit is contained in:
@@ -1,4 +1,8 @@
|
||||
import base64
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.test import override_settings
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APIClient, APITestCase
|
||||
from rest_framework_simplejwt.tokens import RefreshToken
|
||||
@@ -8,6 +12,11 @@ from .Mixins import LoginMixin
|
||||
|
||||
URL = "/don_confiao/api/store_settings"
|
||||
|
||||
PNG_1X1 = base64.b64decode(
|
||||
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk"
|
||||
"+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
|
||||
)
|
||||
|
||||
|
||||
class TestStoreSettingsModel(APITestCase, LoginMixin):
|
||||
def test_singleton_returns_single_instance(self):
|
||||
@@ -97,6 +106,7 @@ class TestStoreSettingsAPI(APITestCase, LoginMixin):
|
||||
self.assertIn("address", data)
|
||||
self.assertIn("latitude", data)
|
||||
self.assertIn("longitude", data)
|
||||
self.assertIn("logo", data)
|
||||
self.assertIn("updated_at", data)
|
||||
|
||||
def test_patch_updates_settings(self):
|
||||
@@ -155,3 +165,82 @@ class TestStoreSettingsAPI(APITestCase, LoginMixin):
|
||||
format="json",
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def test_patch_upload_logo(self):
|
||||
self.client.get(self.url)
|
||||
logo = SimpleUploadedFile("logo.png", PNG_1X1, content_type="image/png")
|
||||
response = self.client.patch(
|
||||
self.url,
|
||||
{"logo": logo},
|
||||
format="multipart",
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
data = response.json()
|
||||
self.assertIn("/media/logos/", data["logo"])
|
||||
self.assertTrue(data["logo"].startswith("http"))
|
||||
|
||||
settings = StoreSettings.objects.get(pk=1)
|
||||
self.assertIsNotNone(settings.logo)
|
||||
self.assertTrue(settings.logo.name.startswith("logos/logo"))
|
||||
|
||||
def test_get_returns_absolute_logo_url(self):
|
||||
self.client.get(self.url)
|
||||
logo = SimpleUploadedFile("logo.png", PNG_1X1, content_type="image/png")
|
||||
self.client.patch(self.url, {"logo": logo}, format="multipart")
|
||||
response = self.client.get(self.url)
|
||||
data = response.json()
|
||||
self.assertTrue(data["logo"].startswith("http"))
|
||||
|
||||
def test_patch_logo_non_image(self):
|
||||
self.client.get(self.url)
|
||||
fake = SimpleUploadedFile("logo.txt", b"not an image", content_type="text/plain")
|
||||
response = self.client.patch(
|
||||
self.url,
|
||||
{"logo": fake},
|
||||
format="multipart",
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
@override_settings(LOGO_MAX_UPLOAD_SIZE=10)
|
||||
def test_patch_logo_too_large(self):
|
||||
self.client.get(self.url)
|
||||
logo = SimpleUploadedFile("logo.png", PNG_1X1, content_type="image/png")
|
||||
response = self.client.patch(
|
||||
self.url,
|
||||
{"logo": logo},
|
||||
format="multipart",
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
settings = StoreSettings.objects.get(pk=1)
|
||||
self.assertFalse(settings.logo)
|
||||
|
||||
def test_patch_clear_logo(self):
|
||||
self.client.get(self.url)
|
||||
logo = SimpleUploadedFile("logo.png", PNG_1X1, content_type="image/png")
|
||||
self.client.patch(self.url, {"logo": logo}, format="multipart")
|
||||
response = self.client.patch(
|
||||
self.url,
|
||||
{"logo": None},
|
||||
format="json",
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
data = response.json()
|
||||
self.assertIsNone(data["logo"])
|
||||
settings = StoreSettings.objects.get(pk=1)
|
||||
self.assertFalse(settings.logo)
|
||||
|
||||
def test_patch_upload_logo_keeps_other_fields(self):
|
||||
self.client.get(self.url)
|
||||
logo = SimpleUploadedFile("logo.png", PNG_1X1, content_type="image/png")
|
||||
response = self.client.patch(
|
||||
self.url,
|
||||
{
|
||||
"address": "Avenida Siempre Viva 742",
|
||||
"logo": logo,
|
||||
},
|
||||
format="multipart",
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
settings = StoreSettings.objects.get(pk=1)
|
||||
self.assertEqual(settings.address, "Avenida Siempre Viva 742")
|
||||
self.assertIsNotNone(settings.logo)
|
||||
|
||||
Reference in New Issue
Block a user