test_admin_views.py 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  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:settings: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:settings: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:settings: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:settings: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:settings: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(
  91. "misago.legal.admin.forms.set_agreement_as_active"
  92. )
  93. response = admin_client.post(
  94. reverse("misago:admin:settings:agreements:new"),
  95. {
  96. "type": Agreement.TYPE_TOS,
  97. "is_active": "1",
  98. "title": "Test TOS",
  99. "text": "Lorem ipsum dolor met sit amet elit",
  100. "link": "https://example.com/rules/",
  101. },
  102. )
  103. agreement = Agreement.objects.get()
  104. assert agreement.is_active
  105. set_agreement_as_active.assert_called_once_with(agreement)
  106. def test_newly_created_active_agreement_replaces_current_one(
  107. admin_client, active_agreement
  108. ):
  109. response = admin_client.post(
  110. reverse("misago:admin:settings:agreements:new"),
  111. {
  112. "type": Agreement.TYPE_TOS,
  113. "is_active": "1",
  114. "title": "Test TOS",
  115. "text": "Lorem ipsum dolor met sit amet elit",
  116. "link": "https://example.com/rules/",
  117. },
  118. )
  119. agreement = Agreement.objects.exclude(pk=active_agreement.pk).get()
  120. assert agreement.is_active
  121. active_agreement.refresh_from_db()
  122. assert not active_agreement.is_active
  123. def test_edit_form_renders(admin_client, agreement):
  124. response = admin_client.get(
  125. reverse("misago:admin:settings:agreements:edit", kwargs={"pk": agreement.pk})
  126. )
  127. assert_contains(response, agreement.title)
  128. def test_edit_form_updates_agreement(admin_client, agreement):
  129. response = admin_client.post(
  130. reverse("misago:admin:settings:agreements:edit", kwargs={"pk": agreement.pk}),
  131. data={
  132. "type": Agreement.TYPE_TOS,
  133. "title": "Test Edited",
  134. "text": "Sit amet elit",
  135. "link": "https://example.com/terms/",
  136. },
  137. )
  138. assert response.status_code == 302
  139. agreement.refresh_from_db()
  140. assert agreement.type == Agreement.TYPE_TOS
  141. assert agreement.title == "Test Edited"
  142. assert agreement.text == "Sit amet elit"
  143. assert agreement.link == "https://example.com/terms/"
  144. def test_edit_form_updates_agreement_modified_entry(admin_client, agreement, superuser):
  145. response = admin_client.post(
  146. reverse("misago:admin:settings:agreements:edit", kwargs={"pk": agreement.pk}),
  147. data={
  148. "type": Agreement.TYPE_TOS,
  149. "title": "Test Edited",
  150. "text": "Sit amet elit",
  151. "link": "https://example.com/terms/",
  152. },
  153. )
  154. assert response.status_code == 302
  155. agreement.refresh_from_db()
  156. assert agreement.last_modified_on
  157. assert agreement.last_modified_by == superuser
  158. assert agreement.last_modified_by_name == superuser.username
  159. def test_edit_form_changes_active_agreement(
  160. admin_client, active_agreement, other_agreement
  161. ):
  162. response = admin_client.post(
  163. reverse(
  164. "misago:admin:settings:agreements:edit", kwargs={"pk": other_agreement.pk}
  165. ),
  166. data={
  167. "type": Agreement.TYPE_TOS,
  168. "is_active": "1",
  169. "title": "Test Edited",
  170. "text": "Sit amet elit",
  171. "link": "https://example.com/terms/",
  172. },
  173. )
  174. assert response.status_code == 302
  175. active_agreement.refresh_from_db()
  176. assert not active_agreement.is_active
  177. other_agreement.refresh_from_db()
  178. assert other_agreement.is_active
  179. def test_edit_form_disables_active_agreement(admin_client, active_agreement):
  180. response = admin_client.post(
  181. reverse(
  182. "misago:admin:settings:agreements:edit", kwargs={"pk": active_agreement.pk}
  183. ),
  184. data={
  185. "type": Agreement.TYPE_TOS,
  186. "is_active": "0",
  187. "title": "Test Edited",
  188. "text": "Sit amet elit",
  189. "link": "https://example.com/terms/",
  190. },
  191. )
  192. assert response.status_code == 302
  193. active_agreement.refresh_from_db()
  194. assert not active_agreement.is_active
  195. def test_agreement_can_be_deleted(admin_client, agreement):
  196. response = admin_client.post(
  197. reverse("misago:admin:settings:agreements:delete", kwargs={"pk": agreement.pk})
  198. )
  199. assert response.status_code == 302
  200. with pytest.raises(Agreement.DoesNotExist):
  201. agreement.refresh_from_db()
  202. def test_active_agreement_can_be_deleted(admin_client, active_agreement):
  203. response = admin_client.post(
  204. reverse(
  205. "misago:admin:settings:agreements:delete",
  206. kwargs={"pk": active_agreement.pk},
  207. )
  208. )
  209. assert response.status_code == 302
  210. with pytest.raises(Agreement.DoesNotExist):
  211. active_agreement.refresh_from_db()
  212. def test_agreement_can_be_set_as_active(admin_client, agreement):
  213. response = admin_client.post(
  214. reverse(
  215. "misago:admin:settings:agreements:set-as-active",
  216. kwargs={"pk": agreement.pk},
  217. )
  218. )
  219. assert response.status_code == 302
  220. agreement.refresh_from_db()
  221. assert agreement.is_active
  222. def test_active_agreement_can_be_changed(
  223. admin_client, active_agreement, other_agreement
  224. ):
  225. response = admin_client.post(
  226. reverse(
  227. "misago:admin:settings:agreements:set-as-active",
  228. kwargs={"pk": other_agreement.pk},
  229. )
  230. )
  231. assert response.status_code == 302
  232. active_agreement.refresh_from_db()
  233. assert not active_agreement.is_active
  234. other_agreement.refresh_from_db()
  235. assert other_agreement.is_active
  236. def test_active_agreement_can_be_disabled(admin_client, active_agreement):
  237. response = admin_client.post(
  238. reverse(
  239. "misago:admin:settings:agreements:disable",
  240. kwargs={"pk": active_agreement.pk},
  241. )
  242. )
  243. assert response.status_code == 302
  244. active_agreement.refresh_from_db()
  245. assert not active_agreement.is_active