test_agreements_admin.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. import pytest
  2. from django.urls import reverse
  3. from ...admin.test import AdminTestCase
  4. from ...test import assert_contains
  5. from ..models import Agreement
  6. @pytest.fixture
  7. def list_url(admin_client):
  8. response = admin_client.get(reverse("misago:admin:users:agreements:index"))
  9. return response["location"]
  10. @pytest.fixture
  11. def agreement(superuser):
  12. return Agreement.objects.create(
  13. type=Agreement.TYPE_TOS,
  14. title="Test TOS",
  15. link="https://rules.com",
  16. created_by=superuser,
  17. created_by_name=superuser.username,
  18. )
  19. @pytest.fixture
  20. def active_agreement(agreement):
  21. agreement.is_active = True
  22. agreement.save()
  23. return agreement
  24. @pytest.fixture
  25. def other_agreement(superuser):
  26. return Agreement.objects.create(
  27. type=Agreement.TYPE_TOS,
  28. title="Test TOS",
  29. link="https://rules.com",
  30. created_by=superuser,
  31. created_by_name=superuser.username,
  32. )
  33. def test_nav_contains_agreements_link(admin_client, list_url):
  34. response = admin_client.get(list_url)
  35. assert_contains(response, reverse("misago:admin:users:agreements:index"))
  36. def test_empty_list_renders(admin_client, list_url):
  37. response = admin_client.get(list_url)
  38. assert response.status_code == 200
  39. def test_list_renders_agreement(admin_client, list_url, agreement):
  40. response = admin_client.get(list_url)
  41. assert_contains(response, agreement.title)
  42. def test_agreements_can_be_mass_deleted(admin_client, list_url, superuser):
  43. agreements = []
  44. for _ in range(10):
  45. agreement = Agreement.objects.create(
  46. type=Agreement.TYPE_TOS,
  47. title="Test TOS",
  48. link="https://rules.com",
  49. created_by=superuser,
  50. created_by_name=superuser.username,
  51. )
  52. agreements.append(agreement.pk)
  53. response = admin_client.post(
  54. list_url, data={"action": "delete", "selected_items": agreements}
  55. )
  56. assert response.status_code == 302
  57. assert Agreement.objects.count() == 0
  58. def test_creation_form_renders(admin_client):
  59. response = admin_client.get(reverse("misago:admin:users:agreements:new"))
  60. assert response.status_code == 200
  61. def test_form_creates_new_agreement(admin_client):
  62. response = admin_client.post(
  63. reverse("misago:admin:users:agreements:new"),
  64. {
  65. "type": Agreement.TYPE_TOS,
  66. "title": "Test TOS",
  67. "text": "Lorem ipsum dolor met sit amet elit",
  68. "link": "https://example.com/rules/",
  69. },
  70. )
  71. agreement = Agreement.objects.get()
  72. assert agreement.type == Agreement.TYPE_TOS
  73. assert agreement.title == "Test TOS"
  74. assert agreement.text == "Lorem ipsum dolor met sit amet elit"
  75. assert agreement.link == "https://example.com/rules/"
  76. def test_form_sets_new_agreement_creator(admin_client, superuser):
  77. response = admin_client.post(
  78. reverse("misago:admin:users:agreements:new"),
  79. {
  80. "type": Agreement.TYPE_TOS,
  81. "title": "Test TOS",
  82. "text": "Lorem ipsum dolor met sit amet elit",
  83. "link": "https://example.com/rules/",
  84. },
  85. )
  86. agreement = Agreement.objects.get()
  87. assert agreement.created_by == superuser
  88. assert agreement.created_by_name == superuser.username
  89. def test_form_creates_active_agreement(mocker, admin_client):
  90. set_agreement_as_active = mocker.patch("misago.legal.forms.set_agreement_as_active")
  91. response = admin_client.post(
  92. reverse("misago:admin:users:agreements:new"),
  93. {
  94. "type": Agreement.TYPE_TOS,
  95. "is_active": "1",
  96. "title": "Test TOS",
  97. "text": "Lorem ipsum dolor met sit amet elit",
  98. "link": "https://example.com/rules/",
  99. },
  100. )
  101. agreement = Agreement.objects.get()
  102. assert agreement.is_active
  103. set_agreement_as_active.assert_called_once_with(agreement)
  104. def test_newly_created_active_agreement_replaces_current_one(
  105. admin_client, active_agreement
  106. ):
  107. response = admin_client.post(
  108. reverse("misago:admin:users:agreements:new"),
  109. {
  110. "type": Agreement.TYPE_TOS,
  111. "is_active": "1",
  112. "title": "Test TOS",
  113. "text": "Lorem ipsum dolor met sit amet elit",
  114. "link": "https://example.com/rules/",
  115. },
  116. )
  117. agreement = Agreement.objects.exclude(pk=active_agreement.pk).get()
  118. assert agreement.is_active
  119. active_agreement.refresh_from_db()
  120. assert not active_agreement.is_active
  121. def test_edit_form_renders(admin_client, agreement):
  122. response = admin_client.get(
  123. reverse("misago:admin:users:agreements:edit", kwargs={"pk": agreement.pk})
  124. )
  125. assert_contains(response, agreement.title)
  126. def test_edit_form_updates_agreement(admin_client, agreement):
  127. response = admin_client.post(
  128. reverse("misago:admin:users:agreements:edit", kwargs={"pk": agreement.pk}),
  129. data={
  130. "type": Agreement.TYPE_TOS,
  131. "title": "Test Edited",
  132. "text": "Sit amet elit",
  133. "link": "https://example.com/terms/",
  134. },
  135. )
  136. assert response.status_code == 302
  137. agreement.refresh_from_db()
  138. assert agreement.type == Agreement.TYPE_TOS
  139. assert agreement.title == "Test Edited"
  140. assert agreement.text == "Sit amet elit"
  141. assert agreement.link == "https://example.com/terms/"
  142. def test_edit_form_updates_agreement_modified_entry(admin_client, agreement, superuser):
  143. response = admin_client.post(
  144. reverse("misago:admin:users:agreements:edit", kwargs={"pk": agreement.pk}),
  145. data={
  146. "type": Agreement.TYPE_TOS,
  147. "title": "Test Edited",
  148. "text": "Sit amet elit",
  149. "link": "https://example.com/terms/",
  150. },
  151. )
  152. assert response.status_code == 302
  153. agreement.refresh_from_db()
  154. assert agreement.last_modified_on
  155. assert agreement.last_modified_by == superuser
  156. assert agreement.last_modified_by_name == superuser.username
  157. def test_edit_form_changes_active_agreement(
  158. admin_client, active_agreement, other_agreement
  159. ):
  160. response = admin_client.post(
  161. reverse(
  162. "misago:admin:users:agreements:edit", kwargs={"pk": other_agreement.pk}
  163. ),
  164. data={
  165. "type": Agreement.TYPE_TOS,
  166. "is_active": "1",
  167. "title": "Test Edited",
  168. "text": "Sit amet elit",
  169. "link": "https://example.com/terms/",
  170. },
  171. )
  172. assert response.status_code == 302
  173. active_agreement.refresh_from_db()
  174. assert not active_agreement.is_active
  175. other_agreement.refresh_from_db()
  176. assert other_agreement.is_active
  177. def test_edit_form_disables_active_agreement(admin_client, active_agreement):
  178. response = admin_client.post(
  179. reverse(
  180. "misago:admin:users:agreements:edit", kwargs={"pk": active_agreement.pk}
  181. ),
  182. data={
  183. "type": Agreement.TYPE_TOS,
  184. "is_active": "0",
  185. "title": "Test Edited",
  186. "text": "Sit amet elit",
  187. "link": "https://example.com/terms/",
  188. },
  189. )
  190. assert response.status_code == 302
  191. active_agreement.refresh_from_db()
  192. assert not active_agreement.is_active
  193. def test_agreement_can_be_deleted(admin_client, agreement):
  194. response = admin_client.post(
  195. reverse("misago:admin:users:agreements:delete", kwargs={"pk": agreement.pk})
  196. )
  197. assert response.status_code == 302
  198. with pytest.raises(Agreement.DoesNotExist):
  199. agreement.refresh_from_db()
  200. def test_active_agreement_can_be_deleted(admin_client, active_agreement):
  201. response = admin_client.post(
  202. reverse(
  203. "misago:admin:users:agreements:delete", kwargs={"pk": active_agreement.pk}
  204. )
  205. )
  206. assert response.status_code == 302
  207. with pytest.raises(Agreement.DoesNotExist):
  208. active_agreement.refresh_from_db()
  209. def test_agreement_can_be_set_as_active(admin_client, agreement):
  210. response = admin_client.post(
  211. reverse(
  212. "misago:admin:users:agreements:set-as-active", kwargs={"pk": agreement.pk}
  213. )
  214. )
  215. assert response.status_code == 302
  216. agreement.refresh_from_db()
  217. assert agreement.is_active
  218. def test_active_agreement_can_be_changed(
  219. admin_client, active_agreement, other_agreement
  220. ):
  221. response = admin_client.post(
  222. reverse(
  223. "misago:admin:users:agreements:set-as-active",
  224. kwargs={"pk": other_agreement.pk},
  225. )
  226. )
  227. assert response.status_code == 302
  228. active_agreement.refresh_from_db()
  229. assert not active_agreement.is_active
  230. other_agreement.refresh_from_db()
  231. assert other_agreement.is_active
  232. def test_active_agreement_can_be_disabled(admin_client, active_agreement):
  233. response = admin_client.post(
  234. reverse(
  235. "misago:admin:users:agreements:disable", kwargs={"pk": active_agreement.pk}
  236. )
  237. )
  238. assert response.status_code == 302
  239. active_agreement.refresh_from_db()
  240. assert not active_agreement.is_active