test_admin_views.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. from django.urls import reverse
  2. from ...admin.test import AdminTestCase
  3. from ..models import Agreement
  4. class AgreementAdminViewsTests(AdminTestCase):
  5. def test_link_registered(self):
  6. """admin nav contains agreements link"""
  7. response = self.client.get(reverse("misago:admin:users:accounts:index"))
  8. response = self.client.get(response["location"])
  9. self.assertContains(response, reverse("misago:admin:users:agreements:index"))
  10. def test_list_view(self):
  11. """agreements list view returns 200"""
  12. response = self.client.get(reverse("misago:admin:users:agreements:index"))
  13. self.assertEqual(response.status_code, 302)
  14. response = self.client.get(response["location"])
  15. self.assertEqual(response.status_code, 200)
  16. def test_mass_delete(self):
  17. """adminview deletes multiple agreements"""
  18. for _ in range(10):
  19. response = self.client.post(
  20. reverse("misago:admin:users:agreements:new"),
  21. data={"type": Agreement.TYPE_TOS, "text": "test agreement!"},
  22. )
  23. self.assertEqual(response.status_code, 302)
  24. self.assertEqual(Agreement.objects.count(), 10)
  25. agreements_pks = []
  26. for agreement in Agreement.objects.iterator():
  27. agreements_pks.append(agreement.pk)
  28. response = self.client.post(
  29. reverse("misago:admin:users:agreements:index"),
  30. data={"action": "delete", "selected_items": agreements_pks},
  31. )
  32. self.assertEqual(response.status_code, 302)
  33. self.assertEqual(Agreement.objects.count(), 0)
  34. def test_new_view(self):
  35. """new agreement view has no showstoppers"""
  36. response = self.client.get(reverse("misago:admin:users:agreements:new"))
  37. self.assertEqual(response.status_code, 200)
  38. response = self.client.post(
  39. reverse("misago:admin:users:agreements:new"),
  40. data={
  41. "type": Agreement.TYPE_TOS,
  42. "title": "Test Rules",
  43. "text": "Lorem ipsum dolor met sit amet elit",
  44. "link": "https://example.com/rules/",
  45. },
  46. )
  47. self.assertEqual(response.status_code, 302)
  48. response = self.client.get(reverse("misago:admin:users:agreements:index"))
  49. response = self.client.get(response["location"])
  50. self.assertEqual(response.status_code, 200)
  51. self.assertContains(response, "Test Rules")
  52. test_agreement = Agreement.objects.get(type=Agreement.TYPE_TOS)
  53. self.assertIsNone(test_agreement.last_modified_on)
  54. self.assertIsNone(test_agreement.last_modified_by)
  55. self.assertIsNone(test_agreement.last_modified_by_name)
  56. def test_new_view_change_active(self):
  57. """new agreement view creates new active agreement"""
  58. response = self.client.get(reverse("misago:admin:users:agreements:new"))
  59. self.assertEqual(response.status_code, 200)
  60. response = self.client.post(
  61. reverse("misago:admin:users:agreements:new"),
  62. data={
  63. "type": Agreement.TYPE_TOS,
  64. "title": "Old Active",
  65. "text": "Lorem ipsum dolor met sit amet elit",
  66. "link": "https://example.com/rules/",
  67. "is_active": True,
  68. },
  69. )
  70. self.assertEqual(response.status_code, 302)
  71. response = self.client.post(
  72. reverse("misago:admin:users:agreements:new"),
  73. data={
  74. "type": Agreement.TYPE_TOS,
  75. "title": "New Active",
  76. "text": "Lorem ipsum dolor met sit amet elit",
  77. "link": "https://example.com/rules/",
  78. "is_active": True,
  79. },
  80. )
  81. self.assertEqual(response.status_code, 302)
  82. test_agreement = Agreement.objects.get(is_active=True)
  83. self.assertEqual(test_agreement.title, "New Active")
  84. def test_edit_view(self):
  85. """edit agreement view has no showstoppers"""
  86. self.client.post(
  87. reverse("misago:admin:users:agreements:new"),
  88. data={
  89. "type": Agreement.TYPE_TOS,
  90. "title": "Test Rules",
  91. "text": "Lorem ipsum dolor met sit amet elit",
  92. "link": "https://example.com/rules/",
  93. },
  94. )
  95. test_agreement = Agreement.objects.get(type=Agreement.TYPE_TOS)
  96. form_link = reverse(
  97. "misago:admin:users:agreements:edit", kwargs={"pk": test_agreement.pk}
  98. )
  99. response = self.client.post(
  100. form_link,
  101. data={
  102. "type": Agreement.TYPE_PRIVACY,
  103. "title": "Test Privacy",
  104. "text": "Lorem ipsum dolor met sit amet elit",
  105. "link": "https://example.com/rules/",
  106. },
  107. )
  108. self.assertEqual(response.status_code, 302)
  109. response = self.client.get(reverse("misago:admin:users:agreements:index"))
  110. response = self.client.get(response["location"])
  111. self.assertEqual(response.status_code, 200)
  112. self.assertContains(response, "Test Privacy")
  113. updated_agreement = Agreement.objects.get(type=Agreement.TYPE_PRIVACY)
  114. self.assertTrue(updated_agreement.last_modified_on)
  115. self.assertEqual(updated_agreement.last_modified_by, self.user)
  116. self.assertEqual(updated_agreement.last_modified_by_name, self.user.username)
  117. def test_edit_view_change_active(self):
  118. """edit agreement view sets new active"""
  119. self.client.post(
  120. reverse("misago:admin:users:agreements:new"),
  121. data={
  122. "type": Agreement.TYPE_TOS,
  123. "title": "Old Active",
  124. "text": "Lorem ipsum dolor met sit amet elit",
  125. "link": "https://example.com/rules/",
  126. "is_active": True,
  127. },
  128. )
  129. self.client.post(
  130. reverse("misago:admin:users:agreements:new"),
  131. data={
  132. "type": Agreement.TYPE_TOS,
  133. "title": "New Active",
  134. "text": "Lorem ipsum dolor met sit amet elit",
  135. "link": "https://example.com/rules/",
  136. },
  137. )
  138. test_agreement = Agreement.objects.get(title="New Active")
  139. form_link = reverse(
  140. "misago:admin:users:agreements:edit", kwargs={"pk": test_agreement.pk}
  141. )
  142. response = self.client.post(
  143. form_link,
  144. data={
  145. "type": Agreement.TYPE_TOS,
  146. "title": "Updated Active",
  147. "text": "Lorem ipsum dolor met sit amet elit",
  148. "link": "https://example.com/rules/",
  149. "is_active": True,
  150. },
  151. )
  152. self.assertEqual(response.status_code, 302)
  153. updated_agreement = Agreement.objects.get(is_active=True)
  154. self.assertEqual(updated_agreement.title, "Updated Active")
  155. def test_delete_view(self):
  156. """delete agreement view has no showstoppers"""
  157. self.client.post(
  158. reverse("misago:admin:users:agreements:new"),
  159. data={
  160. "type": Agreement.TYPE_TOS,
  161. "title": "Test Rules",
  162. "text": "Lorem ipsum dolor met sit amet elit",
  163. "link": "https://example.com/rules/",
  164. },
  165. )
  166. test_agreement = Agreement.objects.get(type=Agreement.TYPE_TOS)
  167. response = self.client.post(
  168. reverse(
  169. "misago:admin:users:agreements:delete", kwargs={"pk": test_agreement.pk}
  170. )
  171. )
  172. self.assertEqual(response.status_code, 302)
  173. response = self.client.get(reverse("misago:admin:users:agreements:index"))
  174. self.client.get(response["location"])
  175. response = self.client.get(response["location"])
  176. self.assertEqual(response.status_code, 200)
  177. self.assertNotContains(response, test_agreement.title)
  178. def test_set_as_active_view(self):
  179. """set agreement as active view has no showstoppers"""
  180. self.client.post(
  181. reverse("misago:admin:users:agreements:new"),
  182. data={
  183. "type": Agreement.TYPE_TOS,
  184. "title": "Test Rules",
  185. "text": "Lorem ipsum dolor met sit amet elit",
  186. "link": "https://example.com/rules/",
  187. },
  188. )
  189. test_agreement = Agreement.objects.get(type=Agreement.TYPE_TOS)
  190. response = self.client.post(
  191. reverse(
  192. "misago:admin:users:agreements:set-as-active",
  193. kwargs={"pk": test_agreement.pk},
  194. )
  195. )
  196. self.assertEqual(response.status_code, 302)
  197. updated_agreement = Agreement.objects.get(is_active=True)
  198. self.assertEqual(updated_agreement, test_agreement)
  199. def test_set_as_active_view_change_active(self):
  200. """set agreement as active view changes current active"""
  201. self.client.post(
  202. reverse("misago:admin:users:agreements:new"),
  203. data={
  204. "type": Agreement.TYPE_TOS,
  205. "title": "Old Active",
  206. "text": "Lorem ipsum dolor met sit amet elit",
  207. "link": "https://example.com/rules/",
  208. "is_active": True,
  209. },
  210. )
  211. self.client.post(
  212. reverse("misago:admin:users:agreements:new"),
  213. data={
  214. "type": Agreement.TYPE_TOS,
  215. "title": "New Active",
  216. "text": "Lorem ipsum dolor met sit amet elit",
  217. "link": "https://example.com/rules/",
  218. },
  219. )
  220. test_agreement = Agreement.objects.get(title="New Active")
  221. response = self.client.post(
  222. reverse(
  223. "misago:admin:users:agreements:set-as-active",
  224. kwargs={"pk": test_agreement.pk},
  225. )
  226. )
  227. self.assertEqual(response.status_code, 302)
  228. updated_agreement = Agreement.objects.get(is_active=True)
  229. self.assertEqual(updated_agreement, test_agreement)
  230. def test_is_active_type_separation(self):
  231. """is_active flag is per type"""
  232. self.client.post(
  233. reverse("misago:admin:users:agreements:new"),
  234. data={
  235. "type": Agreement.TYPE_TOS,
  236. "text": "Lorem ipsum dolor met sit amet elit",
  237. "is_active": True,
  238. },
  239. )
  240. self.client.post(
  241. reverse("misago:admin:users:agreements:new"),
  242. data={
  243. "type": Agreement.TYPE_PRIVACY,
  244. "text": "Lorem ipsum dolor met sit amet elit",
  245. "is_active": True,
  246. },
  247. )
  248. active_count = Agreement.objects.filter(is_active=True).count()
  249. self.assertEqual(active_count, 2)