|
@@ -0,0 +1,136 @@
|
|
|
+import os
|
|
|
+
|
|
|
+import pytest
|
|
|
+from django.core.files.uploadedfile import SimpleUploadedFile
|
|
|
+
|
|
|
+from ...models import Icon
|
|
|
+
|
|
|
+
|
|
|
+@pytest.fixture
|
|
|
+def favicon(db, image_alt):
|
|
|
+ return Icon.objects.create(
|
|
|
+ type=Icon.TYPE_FAVICON,
|
|
|
+ image=SimpleUploadedFile("favicon.png", image_alt, "image/png"),
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+@pytest.fixture
|
|
|
+def favicon_32(db, image_alt):
|
|
|
+ return Icon.objects.create(
|
|
|
+ type=Icon.TYPE_FAVICON_32,
|
|
|
+ image=SimpleUploadedFile("favicon-32.png", image_alt, "image/png"),
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+@pytest.fixture
|
|
|
+def favicon_16(db, image_alt):
|
|
|
+ return Icon.objects.create(
|
|
|
+ type=Icon.TYPE_FAVICON_16,
|
|
|
+ image=SimpleUploadedFile("favicon-16.png", image_alt, "image/png"),
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test_uploading_favicon_sets_favicon_images(admin_client, admin_link, image):
|
|
|
+ admin_client.post(
|
|
|
+ admin_link, {"favicon": SimpleUploadedFile("image.png", image, "image/png")}
|
|
|
+ )
|
|
|
+ Icon.objects.get(type=Icon.TYPE_FAVICON)
|
|
|
+ Icon.objects.get(type=Icon.TYPE_FAVICON_32)
|
|
|
+ Icon.objects.get(type=Icon.TYPE_FAVICON_16)
|
|
|
+
|
|
|
+
|
|
|
+def test_uploading_favicon_removes_existing_favicon_images(
|
|
|
+ admin_client, admin_link, image, favicon, favicon_32, favicon_16
|
|
|
+):
|
|
|
+ admin_client.post(
|
|
|
+ admin_link, {"favicon": SimpleUploadedFile("image.png", image, "image/png")}
|
|
|
+ )
|
|
|
+
|
|
|
+ with pytest.raises(Icon.DoesNotExist):
|
|
|
+ favicon.refresh_from_db()
|
|
|
+
|
|
|
+ with pytest.raises(Icon.DoesNotExist):
|
|
|
+ favicon_32.refresh_from_db()
|
|
|
+
|
|
|
+ with pytest.raises(Icon.DoesNotExist):
|
|
|
+ favicon_16.refresh_from_db()
|
|
|
+
|
|
|
+
|
|
|
+def test_uploading_new_favicon_removes_old_one_image_file(
|
|
|
+ admin_client, admin_link, image, favicon, favicon_32, favicon_16
|
|
|
+):
|
|
|
+ admin_client.post(
|
|
|
+ admin_link, {"favicon": SimpleUploadedFile("image.png", image, "image/png")}
|
|
|
+ )
|
|
|
+
|
|
|
+ assert not os.path.exists(favicon.image.path)
|
|
|
+ assert not os.path.exists(favicon_32.image.path)
|
|
|
+ assert not os.path.exists(favicon_16.image.path)
|
|
|
+
|
|
|
+
|
|
|
+def test_submitting_form_without_new_icon_does_not_delete_old_favicon_images(
|
|
|
+ admin_client, admin_link, favicon, favicon_32, favicon_16
|
|
|
+):
|
|
|
+ admin_client.post(admin_link, {})
|
|
|
+ favicon.refresh_from_db()
|
|
|
+ favicon_32.refresh_from_db()
|
|
|
+ favicon_16.refresh_from_db()
|
|
|
+
|
|
|
+
|
|
|
+def test_favicon_can_be_deleted_without_setting_new_one(
|
|
|
+ admin_client, admin_link, favicon, favicon_32, favicon_16
|
|
|
+):
|
|
|
+ admin_client.post(admin_link, {"favicon_delete": "1"})
|
|
|
+
|
|
|
+ with pytest.raises(Icon.DoesNotExist):
|
|
|
+ favicon.refresh_from_db()
|
|
|
+
|
|
|
+ with pytest.raises(Icon.DoesNotExist):
|
|
|
+ favicon_32.refresh_from_db()
|
|
|
+
|
|
|
+ with pytest.raises(Icon.DoesNotExist):
|
|
|
+ favicon_16.refresh_from_db()
|
|
|
+
|
|
|
+
|
|
|
+def test_deleting_icon_also_deletes_its_image_files(
|
|
|
+ admin_client, admin_link, favicon, favicon_32, favicon_16
|
|
|
+):
|
|
|
+ admin_client.post(admin_link, {"favicon_delete": "1"})
|
|
|
+ assert not os.path.exists(favicon.image.path)
|
|
|
+ assert not os.path.exists(favicon_32.image.path)
|
|
|
+ assert not os.path.exists(favicon_16.image.path)
|
|
|
+
|
|
|
+
|
|
|
+def test_uploading_invalid_icon_does_not_remove_current_icon(
|
|
|
+ admin_client, admin_link, favicon, favicon_32, favicon_16, image_small
|
|
|
+):
|
|
|
+ admin_client.post(
|
|
|
+ admin_link,
|
|
|
+ {"favicon": SimpleUploadedFile("image.png", image_small, "image/png")},
|
|
|
+ )
|
|
|
+
|
|
|
+ favicon.refresh_from_db()
|
|
|
+ favicon_32.refresh_from_db()
|
|
|
+ favicon_16.refresh_from_db()
|
|
|
+
|
|
|
+
|
|
|
+def test_icon_is_not_set_because_it_was_not_square(
|
|
|
+ admin_client, admin_link, image_non_square
|
|
|
+):
|
|
|
+ admin_client.post(
|
|
|
+ admin_link,
|
|
|
+ {"favicon": SimpleUploadedFile("image.png", image_non_square, "image/png")},
|
|
|
+ )
|
|
|
+
|
|
|
+ assert not Icon.objects.exists()
|
|
|
+
|
|
|
+
|
|
|
+def test_icon_is_not_set_because_it_was_too_small(
|
|
|
+ admin_client, admin_link, image_small
|
|
|
+):
|
|
|
+ admin_client.post(
|
|
|
+ admin_link,
|
|
|
+ {"favicon": SimpleUploadedFile("image.png", image_small, "image/png")},
|
|
|
+ )
|
|
|
+
|
|
|
+ assert not Icon.objects.exists()
|