test_admin_views.py 10 KB

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