test_favicon.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import os
  2. import pytest
  3. from django.core.files.uploadedfile import SimpleUploadedFile
  4. from ...models import Icon
  5. @pytest.fixture
  6. def favicon(db, image_alt):
  7. return Icon.objects.create(
  8. type=Icon.TYPE_FAVICON,
  9. image=SimpleUploadedFile("favicon.png", image_alt, "image/png"),
  10. )
  11. @pytest.fixture
  12. def favicon_32(db, image_alt):
  13. return Icon.objects.create(
  14. type=Icon.TYPE_FAVICON_32,
  15. image=SimpleUploadedFile("favicon-32.png", image_alt, "image/png"),
  16. )
  17. @pytest.fixture
  18. def favicon_16(db, image_alt):
  19. return Icon.objects.create(
  20. type=Icon.TYPE_FAVICON_16,
  21. image=SimpleUploadedFile("favicon-16.png", image_alt, "image/png"),
  22. )
  23. def test_uploading_favicon_sets_favicon_images(admin_client, admin_link, image):
  24. admin_client.post(
  25. admin_link, {"favicon": SimpleUploadedFile("image.png", image, "image/png")}
  26. )
  27. Icon.objects.get(type=Icon.TYPE_FAVICON)
  28. Icon.objects.get(type=Icon.TYPE_FAVICON_32)
  29. Icon.objects.get(type=Icon.TYPE_FAVICON_16)
  30. def test_uploading_favicon_removes_existing_favicon_images(
  31. admin_client, admin_link, image, favicon, favicon_32, favicon_16
  32. ):
  33. admin_client.post(
  34. admin_link, {"favicon": SimpleUploadedFile("image.png", image, "image/png")}
  35. )
  36. with pytest.raises(Icon.DoesNotExist):
  37. favicon.refresh_from_db()
  38. with pytest.raises(Icon.DoesNotExist):
  39. favicon_32.refresh_from_db()
  40. with pytest.raises(Icon.DoesNotExist):
  41. favicon_16.refresh_from_db()
  42. def test_uploading_new_favicon_removes_old_one_image_file(
  43. admin_client, admin_link, image, favicon, favicon_32, favicon_16
  44. ):
  45. admin_client.post(
  46. admin_link, {"favicon": SimpleUploadedFile("image.png", image, "image/png")}
  47. )
  48. assert not os.path.exists(favicon.image.path)
  49. assert not os.path.exists(favicon_32.image.path)
  50. assert not os.path.exists(favicon_16.image.path)
  51. def test_submitting_form_without_new_icon_does_not_delete_old_favicon_images(
  52. admin_client, admin_link, favicon, favicon_32, favicon_16
  53. ):
  54. admin_client.post(admin_link, {})
  55. favicon.refresh_from_db()
  56. favicon_32.refresh_from_db()
  57. favicon_16.refresh_from_db()
  58. def test_favicon_can_be_deleted_without_setting_new_one(
  59. admin_client, admin_link, favicon, favicon_32, favicon_16
  60. ):
  61. admin_client.post(admin_link, {"favicon_delete": "1"})
  62. with pytest.raises(Icon.DoesNotExist):
  63. favicon.refresh_from_db()
  64. with pytest.raises(Icon.DoesNotExist):
  65. favicon_32.refresh_from_db()
  66. with pytest.raises(Icon.DoesNotExist):
  67. favicon_16.refresh_from_db()
  68. def test_deleting_icon_also_deletes_its_image_files(
  69. admin_client, admin_link, favicon, favicon_32, favicon_16
  70. ):
  71. admin_client.post(admin_link, {"favicon_delete": "1"})
  72. assert not os.path.exists(favicon.image.path)
  73. assert not os.path.exists(favicon_32.image.path)
  74. assert not os.path.exists(favicon_16.image.path)
  75. def test_uploading_invalid_icon_does_not_remove_current_icon(
  76. admin_client, admin_link, favicon, favicon_32, favicon_16, image_small
  77. ):
  78. admin_client.post(
  79. admin_link,
  80. {"favicon": SimpleUploadedFile("image.png", image_small, "image/png")},
  81. )
  82. favicon.refresh_from_db()
  83. favicon_32.refresh_from_db()
  84. favicon_16.refresh_from_db()
  85. def test_icon_is_not_set_because_it_was_not_square(
  86. admin_client, admin_link, image_non_square
  87. ):
  88. admin_client.post(
  89. admin_link,
  90. {"favicon": SimpleUploadedFile("image.png", image_non_square, "image/png")},
  91. )
  92. assert not Icon.objects.exists()
  93. def test_icon_is_not_set_because_it_was_too_small(
  94. admin_client, admin_link, image_small
  95. ):
  96. admin_client.post(
  97. admin_link,
  98. {"favicon": SimpleUploadedFile("image.png", image_small, "image/png")},
  99. )
  100. assert not Icon.objects.exists()