test_admin_views.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  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. test_agreement = Agreement.objects.get(type=Agreement.TYPE_TOS)
  59. self.assertIsNone(test_agreement.last_modified_on)
  60. self.assertIsNone(test_agreement.last_modified_by)
  61. self.assertIsNone(test_agreement.last_modified_by_name)
  62. def test_new_view_change_active(self):
  63. """new agreement view creates new active agreement"""
  64. response = self.client.get(reverse('misago:admin:users:agreements:new'))
  65. self.assertEqual(response.status_code, 200)
  66. response = self.client.post(
  67. reverse('misago:admin:users:agreements:new'),
  68. data={
  69. 'type': Agreement.TYPE_TOS,
  70. 'title': 'Old Active',
  71. 'text': 'Lorem ipsum dolor met sit amet elit',
  72. 'link': 'https://example.com/rules/',
  73. 'is_active': True,
  74. },
  75. )
  76. self.assertEqual(response.status_code, 302)
  77. response = self.client.post(
  78. reverse('misago:admin:users:agreements:new'),
  79. data={
  80. 'type': Agreement.TYPE_TOS,
  81. 'title': 'New Active',
  82. 'text': 'Lorem ipsum dolor met sit amet elit',
  83. 'link': 'https://example.com/rules/',
  84. 'is_active': True,
  85. },
  86. )
  87. self.assertEqual(response.status_code, 302)
  88. test_agreement = Agreement.objects.get(is_active=True)
  89. self.assertEqual(test_agreement.title, 'New Active')
  90. def test_edit_view(self):
  91. """edit agreement view has no showstoppers"""
  92. self.client.post(
  93. reverse('misago:admin:users:agreements:new'),
  94. data={
  95. 'type': Agreement.TYPE_TOS,
  96. 'title': 'Test Rules',
  97. 'text': 'Lorem ipsum dolor met sit amet elit',
  98. 'link': 'https://example.com/rules/',
  99. },
  100. )
  101. test_agreement = Agreement.objects.get(type=Agreement.TYPE_TOS)
  102. form_link = reverse(
  103. 'misago:admin:users:agreements:edit',
  104. kwargs={
  105. 'pk': test_agreement.pk,
  106. },
  107. )
  108. response = self.client.post(
  109. form_link,
  110. data={
  111. 'type': Agreement.TYPE_PRIVACY,
  112. 'title': 'Test Privacy',
  113. 'text': 'Lorem ipsum dolor met sit amet elit',
  114. 'link': 'https://example.com/rules/',
  115. },
  116. )
  117. self.assertEqual(response.status_code, 302)
  118. response = self.client.get(reverse('misago:admin:users:agreements:index'))
  119. response = self.client.get(response['location'])
  120. self.assertEqual(response.status_code, 200)
  121. self.assertContains(response, 'Test Privacy')
  122. updated_agreement = Agreement.objects.get(type=Agreement.TYPE_PRIVACY)
  123. self.assertTrue(updated_agreement.last_modified_on)
  124. self.assertEqual(updated_agreement.last_modified_by, self.user)
  125. self.assertEqual(updated_agreement.last_modified_by_name, self.user.username)
  126. def test_edit_view_change_active(self):
  127. """edit agreement view sets new active"""
  128. self.client.post(
  129. reverse('misago:admin:users:agreements:new'),
  130. data={
  131. 'type': Agreement.TYPE_TOS,
  132. 'title': 'Old Active',
  133. 'text': 'Lorem ipsum dolor met sit amet elit',
  134. 'link': 'https://example.com/rules/',
  135. 'is_active': True
  136. },
  137. )
  138. self.client.post(
  139. reverse('misago:admin:users:agreements:new'),
  140. data={
  141. 'type': Agreement.TYPE_TOS,
  142. 'title': 'New Active',
  143. 'text': 'Lorem ipsum dolor met sit amet elit',
  144. 'link': 'https://example.com/rules/',
  145. },
  146. )
  147. test_agreement = Agreement.objects.get(title='New Active')
  148. form_link = reverse(
  149. 'misago:admin:users:agreements:edit',
  150. kwargs={
  151. 'pk': test_agreement.pk,
  152. },
  153. )
  154. response = self.client.post(
  155. form_link,
  156. data={
  157. 'type': Agreement.TYPE_TOS,
  158. 'title': 'Updated Active',
  159. 'text': 'Lorem ipsum dolor met sit amet elit',
  160. 'link': 'https://example.com/rules/',
  161. 'is_active': True
  162. },
  163. )
  164. self.assertEqual(response.status_code, 302)
  165. updated_agreement = Agreement.objects.get(is_active=True)
  166. self.assertEqual(updated_agreement.title, 'Updated Active')
  167. def test_delete_view(self):
  168. """delete agreement view has no showstoppers"""
  169. self.client.post(
  170. reverse('misago:admin:users:agreements:new'),
  171. data={
  172. 'type': Agreement.TYPE_TOS,
  173. 'title': 'Test Rules',
  174. 'text': 'Lorem ipsum dolor met sit amet elit',
  175. 'link': 'https://example.com/rules/',
  176. },
  177. )
  178. test_agreement = Agreement.objects.get(type=Agreement.TYPE_TOS)
  179. response = self.client.post(
  180. reverse(
  181. 'misago:admin:users:agreements:delete',
  182. kwargs={
  183. 'pk': test_agreement.pk,
  184. },
  185. )
  186. )
  187. self.assertEqual(response.status_code, 302)
  188. response = self.client.get(reverse('misago:admin:users:agreements:index'))
  189. self.client.get(response['location'])
  190. response = self.client.get(response['location'])
  191. self.assertEqual(response.status_code, 200)
  192. self.assertNotContains(response, test_agreement.title)
  193. def test_set_as_active_view(self):
  194. """set agreement as active view has no showstoppers"""
  195. self.client.post(
  196. reverse('misago:admin:users:agreements:new'),
  197. data={
  198. 'type': Agreement.TYPE_TOS,
  199. 'title': 'Test Rules',
  200. 'text': 'Lorem ipsum dolor met sit amet elit',
  201. 'link': 'https://example.com/rules/',
  202. },
  203. )
  204. test_agreement = Agreement.objects.get(type=Agreement.TYPE_TOS)
  205. response = self.client.post(
  206. reverse(
  207. 'misago:admin:users:agreements:set-as-active',
  208. kwargs={
  209. 'pk': test_agreement.pk,
  210. },
  211. )
  212. )
  213. self.assertEqual(response.status_code, 302)
  214. updated_agreement = Agreement.objects.get(is_active=True)
  215. self.assertEqual(updated_agreement, test_agreement)
  216. def test_set_as_active_view_change_active(self):
  217. """set agreement as active view changes current active"""
  218. self.client.post(
  219. reverse('misago:admin:users:agreements:new'),
  220. data={
  221. 'type': Agreement.TYPE_TOS,
  222. 'title': 'Old Active',
  223. 'text': 'Lorem ipsum dolor met sit amet elit',
  224. 'link': 'https://example.com/rules/',
  225. 'is_active': True,
  226. },
  227. )
  228. self.client.post(
  229. reverse('misago:admin:users:agreements:new'),
  230. data={
  231. 'type': Agreement.TYPE_TOS,
  232. 'title': 'New Active',
  233. 'text': 'Lorem ipsum dolor met sit amet elit',
  234. 'link': 'https://example.com/rules/',
  235. },
  236. )
  237. test_agreement = Agreement.objects.get(title='New Active')
  238. response = self.client.post(
  239. reverse(
  240. 'misago:admin:users:agreements:set-as-active',
  241. kwargs={
  242. 'pk': test_agreement.pk,
  243. },
  244. )
  245. )
  246. self.assertEqual(response.status_code, 302)
  247. updated_agreement = Agreement.objects.get(is_active=True)
  248. self.assertEqual(updated_agreement, test_agreement)
  249. def test_is_active_type_separation(self):
  250. """is_active flag is per type"""
  251. self.client.post(
  252. reverse('misago:admin:users:agreements:new'),
  253. data={
  254. 'type': Agreement.TYPE_TOS,
  255. 'text': 'Lorem ipsum dolor met sit amet elit',
  256. 'is_active': True,
  257. },
  258. )
  259. self.client.post(
  260. reverse('misago:admin:users:agreements:new'),
  261. data={
  262. 'type': Agreement.TYPE_PRIVACY,
  263. 'text': 'Lorem ipsum dolor met sit amet elit',
  264. 'is_active': True,
  265. },
  266. )
  267. active_count = Agreement.objects.filter(is_active=True).count()
  268. self.assertEqual(active_count, 2)