test_bans.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. from datetime import timedelta
  2. import pytest
  3. from django.urls import reverse
  4. from django.utils import timezone
  5. from ....admin.test import AdminTestCase
  6. from ....cache.test import assert_invalidates_cache
  7. from ....test import assert_contains
  8. from ... import BANS_CACHE
  9. from ...models import Ban
  10. @pytest.fixture
  11. def admin_link(admin_client):
  12. response = admin_client.get(reverse("misago:admin:users:bans:index"))
  13. return response["location"]
  14. @pytest.fixture
  15. def ban(db):
  16. return Ban.objects.create(banned_value="banned_username")
  17. def test_link_is_registered_in_admin_nav(admin_client):
  18. response = admin_client.get(reverse("misago:admin:users:index"))
  19. response = admin_client.get(response["location"])
  20. assert_contains(response, reverse("misago:admin:users:bans:index"))
  21. def test_list_renders_empty(admin_client, admin_link):
  22. response = admin_client.get(admin_link)
  23. assert response.status_code == 200
  24. def test_list_renders_with_item(admin_client, admin_link, ban):
  25. response = admin_client.get(admin_link)
  26. assert_contains(response, ban.banned_value)
  27. def test_bans_can_be_mass_deleted(admin_client, admin_link):
  28. bans_ids = [Ban.objects.create(banned_value="ban_%s" % i).id for i in range(10)]
  29. admin_client.post(admin_link, data={"action": "delete", "selected_items": bans_ids})
  30. assert Ban.objects.count() == 0
  31. def test_mass_deleting_bans_invalidates_bans_cache(admin_client, admin_link, ban):
  32. with assert_invalidates_cache(BANS_CACHE):
  33. admin_client.post(
  34. admin_link, data={"action": "delete", "selected_items": [ban.id]}
  35. )
  36. def test_ban_can_be_deleted(admin_client, ban):
  37. admin_client.post(reverse("misago:admin:users:bans:delete", kwargs={"pk": ban.pk}))
  38. with pytest.raises(Ban.DoesNotExist):
  39. ban.refresh_from_db()
  40. def test_deleting_ban_invalidates_bans_cache(admin_client, ban):
  41. with assert_invalidates_cache(BANS_CACHE):
  42. admin_client.post(
  43. reverse("misago:admin:users:bans:delete", kwargs={"pk": ban.pk})
  44. )
  45. def test_new_ban_form_renders(admin_client):
  46. response = admin_client.get(reverse("misago:admin:users:bans:new"))
  47. assert response.status_code == 200
  48. def test_new_ban_can_be_created(admin_client):
  49. test_date = timezone.now() + timedelta(days=180)
  50. response = admin_client.post(
  51. reverse("misago:admin:users:bans:new"),
  52. data={
  53. "check_type": Ban.EMAIL,
  54. "banned_value": "test@test.com",
  55. "user_message": "Lorem ipsum dolor met",
  56. "staff_message": "Sit amet elit",
  57. "expires_on": test_date.isoformat(),
  58. },
  59. )
  60. ban = Ban.objects.get()
  61. assert ban.check_type == Ban.EMAIL
  62. assert ban.banned_value == "test@test.com"
  63. assert ban.user_message == "Lorem ipsum dolor met"
  64. assert ban.staff_message == "Sit amet elit"
  65. assert ban.expires_on.isoformat() == test_date.isoformat()
  66. def test_new_ban_creation_invalidates_bans_cache(admin_client):
  67. with assert_invalidates_cache(BANS_CACHE):
  68. admin_client.post(
  69. reverse("misago:admin:users:bans:new"),
  70. data={"check_type": Ban.EMAIL, "banned_value": "test@test.com"},
  71. )
  72. def test_edit_ban_form_renders(admin_client, ban):
  73. response = admin_client.get(
  74. reverse("misago:admin:users:bans:edit", kwargs={"pk": ban.pk})
  75. )
  76. assert response.status_code == 200
  77. def test_ban_can_be_edited(admin_client, ban):
  78. test_date = timezone.now() + timedelta(days=180)
  79. response = admin_client.post(
  80. reverse("misago:admin:users:bans:edit", kwargs={"pk": ban.pk}),
  81. data={
  82. "check_type": Ban.EMAIL,
  83. "banned_value": "test@test.com",
  84. "user_message": "Lorem ipsum dolor met",
  85. "staff_message": "Sit amet elit",
  86. "expires_on": test_date.isoformat(),
  87. },
  88. )
  89. ban.refresh_from_db()
  90. assert ban.check_type == Ban.EMAIL
  91. assert ban.banned_value == "test@test.com"
  92. assert ban.user_message == "Lorem ipsum dolor met"
  93. assert ban.staff_message == "Sit amet elit"
  94. assert ban.expires_on.isoformat() == test_date.isoformat()
  95. def test_ban_edition_invalidates_bans_cache(admin_client, ban):
  96. with assert_invalidates_cache(BANS_CACHE):
  97. admin_client.post(
  98. reverse("misago:admin:users:bans:edit", kwargs={"pk": ban.pk}),
  99. data={"check_type": Ban.EMAIL, "banned_value": "test@test.com"},
  100. )