test_blank_avatar_validation.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. from io import BytesIO
  2. import pytest
  3. from PIL import Image
  4. from django.core.files.uploadedfile import SimpleUploadedFile
  5. from django.urls import reverse
  6. from ... import settings
  7. from ...models import Setting
  8. admin_link = reverse("misago:admin:settings:users:index")
  9. def create_image(width, height):
  10. image = Image.new("RGBA", (width, height))
  11. stream = BytesIO()
  12. image.save(stream, "PNG")
  13. stream.seek(0)
  14. return SimpleUploadedFile("image.png", stream.read(), "image/jpeg")
  15. def submit_image(admin_client, image=""):
  16. data = {
  17. "account_activation": "user",
  18. "username_length_min": 10,
  19. "username_length_max": 10,
  20. "anonymous_username": "Deleted",
  21. "avatar_upload_limit": 2000,
  22. "default_avatar": "gravatar",
  23. "default_gravatar_fallback": "dynamic",
  24. "signature_length_max": 100,
  25. "blank_avatar": image,
  26. "subscribe_start": "no",
  27. "subscribe_reply": "no",
  28. "users_per_page": 12,
  29. "users_per_page_orphans": 4,
  30. "top_posters_ranking_length": 10,
  31. "top_posters_ranking_size": 10,
  32. "allow_data_downloads": "no",
  33. "data_downloads_expiration": 48,
  34. "allow_delete_own_account": "no",
  35. "new_inactive_accounts_delete": 0,
  36. "ip_storage_time": 0,
  37. }
  38. return admin_client.post(admin_link, data)
  39. @pytest.fixture
  40. def setting(db):
  41. return Setting.objects.get(setting="blank_avatar")
  42. @pytest.fixture
  43. def setting_with_value(admin_client, setting):
  44. min_size = max(settings.MISAGO_AVATARS_SIZES)
  45. image_file = create_image(min_size, min_size)
  46. submit_image(admin_client, image_file)
  47. setting.refresh_from_db()
  48. return setting
  49. def test_uploaded_image_is_rejected_if_its_not_square(admin_client, setting):
  50. image_file = create_image(100, 200)
  51. submit_image(admin_client, image_file)
  52. setting.refresh_from_db()
  53. assert not setting.value
  54. def test_uploaded_image_is_rejected_if_its_smaller_than_max_avatar_size(
  55. admin_client, setting
  56. ):
  57. min_size = max(settings.MISAGO_AVATARS_SIZES)
  58. image_file = create_image(min_size - 1, min_size - 1)
  59. submit_image(admin_client, image_file)
  60. setting.refresh_from_db()
  61. assert not setting.value
  62. def test_valid_blank_avatar_can_be_uploaded(admin_client, setting):
  63. min_size = max(settings.MISAGO_AVATARS_SIZES)
  64. image_file = create_image(min_size, min_size)
  65. submit_image(admin_client, image_file)
  66. setting.refresh_from_db()
  67. assert setting.value
  68. def test_submitting_form_without_new_image_doesnt_unset_existing_image(
  69. admin_client, setting_with_value
  70. ):
  71. submit_image(admin_client)
  72. setting_with_value.refresh_from_db()
  73. assert setting_with_value.value