test_warnings_views.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. from django.contrib.auth import get_user_model
  2. from django.core.urlresolvers import reverse
  3. from misago.acl.testutils import override_acl
  4. from misago.admin.testutils import AdminTestCase
  5. from misago.core import threadstore
  6. from misago.core.cache import cache
  7. from misago.users.warnings import warn_user
  8. from misago.users.models import WarningLevel
  9. class WarningTestCase(AdminTestCase):
  10. def setUp(self):
  11. super(WarningTestCase, self).setUp()
  12. self.test_user = get_user_model().objects.create_user(
  13. "Bob", "bob@bob.com", "Pass.123")
  14. self.link_kwargs = {'user_slug': 'bob', 'user_id': self.test_user.pk}
  15. self.warning_levels = (
  16. WarningLevel.objects.create(name='Lvl 1'),
  17. WarningLevel.objects.create(name='Lvl 2'),
  18. WarningLevel.objects.create(name='Lvl 3'),
  19. WarningLevel.objects.create(name='Lvl 4'),
  20. )
  21. cache.clear()
  22. threadstore.clear()
  23. def warn_user(self, reason):
  24. override_acl(self.test_admin, {'can_warn_users': 1})
  25. response = self.client.post(
  26. reverse('misago:warn_user', kwargs=self.link_kwargs),
  27. data={'reason': reason})
  28. class WarnUserTests(WarningTestCase):
  29. def test_no_permission(self):
  30. """fail to warn due to permissions"""
  31. override_acl(self.test_admin, {
  32. 'can_warn_users': 0,
  33. })
  34. override_acl(self.test_user, {
  35. 'can_be_warned': 1,
  36. })
  37. response = self.client.get(reverse('misago:warn_user',
  38. kwargs=self.link_kwargs))
  39. self.assertEqual(response.status_code, 403)
  40. def test_protected_user(self):
  41. """fail to warn due to user's can_be_warned"""
  42. override_acl(self.test_admin, {
  43. 'can_warn_users': 1,
  44. })
  45. override_acl(self.test_user, {
  46. 'can_be_warned': 0,
  47. })
  48. response = self.client.get(reverse('misago:warn_user',
  49. kwargs=self.link_kwargs))
  50. self.assertEqual(response.status_code, 403)
  51. def test_warn_user(self):
  52. """can warn user to the roof"""
  53. override_acl(self.test_admin, {
  54. 'can_warn_users': 1,
  55. })
  56. override_acl(self.test_user, {
  57. 'can_be_warned': 1,
  58. })
  59. for level in self.warning_levels:
  60. response = self.client.get(reverse('misago:warn_user',
  61. kwargs=self.link_kwargs))
  62. self.assertEqual(response.status_code, 200)
  63. response = self.client.post(
  64. reverse('misago:warn_user', kwargs=self.link_kwargs),
  65. data={'reason': 'Warning %s' % level.name})
  66. self.assertEqual(response.status_code, 302)
  67. self.assertEqual(self.test_user.warnings.count(), 4)
  68. class UserWarningsListTests(WarningTestCase):
  69. def allow_warning(self):
  70. override_acl(self.test_admin, {
  71. 'can_warn_users': 1,
  72. 'can_see_other_users_warnings': 1,
  73. })
  74. override_acl(self.test_user, {
  75. 'can_be_warned': 1,
  76. })
  77. def test_no_permission(self):
  78. """can't see other user warnings"""
  79. self.warn_user('Test Warning!')
  80. override_acl(self.test_admin, {
  81. 'can_see_other_users_warnings': 0,
  82. })
  83. response = self.client.get(reverse('misago:user_warnings',
  84. kwargs=self.link_kwargs))
  85. self.assertEqual(response.status_code, 404)
  86. def test_see_user_warnings(self):
  87. """can see user warnings"""
  88. self.allow_warning()
  89. response = self.client.get(reverse('misago:user_warnings',
  90. kwargs=self.link_kwargs))
  91. self.assertEqual(response.status_code, 200)
  92. self.assertIn('Bob has no warnings', response.content)
  93. self.warn_user('Test Warning!')
  94. self.allow_warning()
  95. response = self.client.get(reverse('misago:user_warnings',
  96. kwargs=self.link_kwargs))
  97. self.assertEqual(response.status_code, 200)
  98. self.assertIn('Test Warning!', response.content)
  99. class CancelWarningTests(WarningTestCase):
  100. def allow_cancel_owned_warning(self):
  101. override_acl(self.test_admin, {
  102. 'can_warn_users': 1,
  103. 'can_see_other_users_warnings': 1,
  104. 'can_cancel_warnings': 1,
  105. })
  106. def allow_cancel_all_warnings(self):
  107. override_acl(self.test_admin, {
  108. 'can_warn_users': 1,
  109. 'can_see_other_users_warnings': 1,
  110. 'can_cancel_warnings': 2,
  111. })
  112. def test_no_permission(self):
  113. """can't cancel warnings"""
  114. override_acl(self.test_admin, {
  115. 'can_warn_users': 1,
  116. 'can_see_other_users_warnings': 1,
  117. 'can_cancel_warnings': 0,
  118. })
  119. warning = warn_user(self.test_admin, self.test_user)
  120. response = self.client.post(
  121. reverse('misago:cancel_warning', kwargs={
  122. 'user_slug': 'bob',
  123. 'user_id': self.test_user.pk,
  124. 'warning_id': warning.pk
  125. }))
  126. self.assertEqual(response.status_code, 403)
  127. self.assertFalse(self.test_user.warnings.get(id=warning.pk).is_canceled)
  128. def test_no_permission_other(self):
  129. """can't cancel other mod warnings"""
  130. warning = warn_user(self.test_user, self.test_user)
  131. self.allow_cancel_owned_warning()
  132. response = self.client.post(
  133. reverse('misago:cancel_warning', kwargs={
  134. 'user_slug': 'bob',
  135. 'user_id': self.test_user.pk,
  136. 'warning_id': warning.pk
  137. }))
  138. self.assertEqual(response.status_code, 403)
  139. self.assertFalse(self.test_user.warnings.get(id=warning.pk).is_canceled)
  140. warning = warn_user(self.test_admin, self.test_user)
  141. self.allow_cancel_owned_warning()
  142. response = self.client.post(
  143. reverse('misago:cancel_warning', kwargs={
  144. 'user_slug': 'bob',
  145. 'user_id': self.test_user.pk,
  146. 'warning_id': warning.pk
  147. }))
  148. self.assertEqual(response.status_code, 302)
  149. warning = self.test_user.warnings.get(id=warning.pk)
  150. self.assertTrue(self.test_user.warnings.get(id=warning.pk).is_canceled)
  151. def test_cancel_other_and_owned_warnings(self):
  152. """cancel everyone's warnings"""
  153. warning = warn_user(self.test_user, self.test_user)
  154. self.allow_cancel_all_warnings()
  155. response = self.client.post(
  156. reverse('misago:cancel_warning', kwargs={
  157. 'user_slug': 'bob',
  158. 'user_id': self.test_user.pk,
  159. 'warning_id': warning.pk
  160. }))
  161. self.assertEqual(response.status_code, 302)
  162. self.assertTrue(self.test_user.warnings.get(id=warning.pk).is_canceled)
  163. warning = warn_user(self.test_admin, self.test_user)
  164. self.allow_cancel_all_warnings()
  165. response = self.client.post(
  166. reverse('misago:cancel_warning', kwargs={
  167. 'user_slug': 'bob',
  168. 'user_id': self.test_user.pk,
  169. 'warning_id': warning.pk
  170. }))
  171. self.assertEqual(response.status_code, 302)
  172. self.assertTrue(self.test_user.warnings.get(id=warning.pk).is_canceled)
  173. class DeleteWarningTests(WarningTestCase):
  174. def allow_delete_owned_warning(self):
  175. override_acl(self.test_admin, {
  176. 'can_warn_users': 1,
  177. 'can_see_other_users_warnings': 1,
  178. 'can_delete_warnings': 1,
  179. })
  180. def allow_delete_all_warnings(self):
  181. override_acl(self.test_admin, {
  182. 'can_warn_users': 1,
  183. 'can_see_other_users_warnings': 1,
  184. 'can_delete_warnings': 2,
  185. })
  186. def test_no_permission(self):
  187. """can't delete warnings"""
  188. override_acl(self.test_admin, {
  189. 'can_warn_users': 1,
  190. 'can_see_other_users_warnings': 1,
  191. 'can_delete_warnings': 0,
  192. })
  193. warning = warn_user(self.test_admin, self.test_user)
  194. response = self.client.post(
  195. reverse('misago:delete_warning', kwargs={
  196. 'user_slug': 'bob',
  197. 'user_id': self.test_user.pk,
  198. 'warning_id': warning.pk
  199. }))
  200. self.assertEqual(response.status_code, 403)
  201. self.assertEqual(self.test_user.warnings.count(), 1)
  202. def test_no_permission_other(self):
  203. """can't delete other mod warnings"""
  204. warning = warn_user(self.test_user, self.test_user)
  205. self.allow_delete_owned_warning()
  206. response = self.client.post(
  207. reverse('misago:delete_warning', kwargs={
  208. 'user_slug': 'bob',
  209. 'user_id': self.test_user.pk,
  210. 'warning_id': warning.pk
  211. }))
  212. self.assertEqual(response.status_code, 403)
  213. self.assertEqual(self.test_user.warnings.count(), 1)
  214. warning = warn_user(self.test_admin, self.test_user)
  215. self.allow_delete_owned_warning()
  216. response = self.client.post(
  217. reverse('misago:delete_warning', kwargs={
  218. 'user_slug': 'bob',
  219. 'user_id': self.test_user.pk,
  220. 'warning_id': warning.pk
  221. }))
  222. self.assertEqual(response.status_code, 302)
  223. self.assertEqual(self.test_user.warnings.count(), 1)
  224. def test_delete_other_and_owned_warnings(self):
  225. """delete everyone's warnings"""
  226. warning = warn_user(self.test_user, self.test_user)
  227. self.allow_delete_all_warnings()
  228. response = self.client.post(
  229. reverse('misago:delete_warning', kwargs={
  230. 'user_slug': 'bob',
  231. 'user_id': self.test_user.pk,
  232. 'warning_id': warning.pk
  233. }))
  234. self.assertEqual(response.status_code, 302)
  235. self.assertEqual(self.test_user.warnings.count(), 0)
  236. warning = warn_user(self.test_admin, self.test_user)
  237. self.allow_delete_all_warnings()
  238. response = self.client.post(
  239. reverse('misago:delete_warning', kwargs={
  240. 'user_slug': 'bob',
  241. 'user_id': self.test_user.pk,
  242. 'warning_id': warning.pk
  243. }))
  244. self.assertEqual(response.status_code, 302)
  245. self.assertEqual(self.test_user.warnings.count(), 0)