test_useradmin_views.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. import json
  2. from django.contrib.auth import get_user_model
  3. from django.core import mail
  4. from django.core.urlresolvers import reverse
  5. from misago.acl.models import Role
  6. from misago.admin.testutils import AdminTestCase
  7. from misago.forums.models import Forum
  8. from misago.threads.testutils import post_thread, reply_thread
  9. from misago.users.models import Ban, Rank
  10. class UserAdminViewsTests(AdminTestCase):
  11. def test_link_registered(self):
  12. """admin index view contains users link"""
  13. response = self.client.get(reverse('misago:admin:index'))
  14. self.assertIn(reverse('misago:admin:users:accounts:index'),
  15. response.content)
  16. def test_list_view(self):
  17. """users list view returns 200"""
  18. response = self.client.get(
  19. reverse('misago:admin:users:accounts:index'))
  20. self.assertEqual(response.status_code, 302)
  21. response = self.client.get(response['location'])
  22. self.assertEqual(response.status_code, 200)
  23. self.assertIn(self.user.username, response.content)
  24. def test_list_search(self):
  25. """users list is searchable"""
  26. response = self.client.get(
  27. reverse('misago:admin:users:accounts:index'))
  28. self.assertEqual(response.status_code, 302)
  29. link_base = response['location']
  30. response = self.client.get(link_base)
  31. self.assertEqual(response.status_code, 200)
  32. User = get_user_model()
  33. user_a = User.objects.create_user('Tyrael', 't123@test.com', 'pass123')
  34. user_b = User.objects.create_user('Tyrion', 't321@test.com', 'pass123')
  35. # Search both
  36. response = self.client.get(link_base + '&username=tyr')
  37. self.assertEqual(response.status_code, 200)
  38. self.assertIn(user_a.username, response.content)
  39. self.assertIn(user_b.username, response.content)
  40. # Search tyrion
  41. response = self.client.get(link_base + '&username=tyrion')
  42. self.assertEqual(response.status_code, 200)
  43. self.assertFalse(user_a.username in response.content)
  44. self.assertIn(user_b.username, response.content)
  45. # Search tyrael
  46. response = self.client.get(link_base + '&email=t123@test.com')
  47. self.assertEqual(response.status_code, 200)
  48. self.assertIn(user_a.username, response.content)
  49. self.assertFalse(user_b.username in response.content)
  50. def test_mass_activation(self):
  51. """users list activates multiple users"""
  52. User = get_user_model()
  53. user_pks = []
  54. for i in xrange(10):
  55. test_user = User.objects.create_user('Bob%s' % i,
  56. 'bob%s@test.com' % i,
  57. 'pass123',
  58. requires_activation=1)
  59. user_pks.append(test_user.pk)
  60. response = self.client.post(
  61. reverse('misago:admin:users:accounts:index'),
  62. data={'action': 'activate', 'selected_items': user_pks})
  63. self.assertEqual(response.status_code, 302)
  64. inactive_qs = User.objects.filter(id__in=user_pks,
  65. requires_activation=1)
  66. self.assertEqual(inactive_qs.count(), 0)
  67. self.assertIn("has been activated", mail.outbox[0].subject)
  68. def test_mass_ban(self):
  69. """users list bans multiple users"""
  70. User = get_user_model()
  71. user_pks = []
  72. for i in xrange(10):
  73. test_user = User.objects.create_user('Bob%s' % i,
  74. 'bob%s@test.com' % i,
  75. 'pass123',
  76. requires_activation=1)
  77. user_pks.append(test_user.pk)
  78. response = self.client.post(
  79. reverse('misago:admin:users:accounts:index'),
  80. data={'action': 'ban', 'selected_items': user_pks})
  81. self.assertEqual(response.status_code, 200)
  82. response = self.client.post(
  83. reverse('misago:admin:users:accounts:index'),
  84. data={
  85. 'action': 'ban',
  86. 'selected_items': user_pks,
  87. 'ban_type': [
  88. 'usernames', 'emails', 'domains',
  89. 'ip', 'ip_first', 'ip_two'
  90. ],
  91. 'finalize': ''
  92. })
  93. self.assertEqual(response.status_code, 302)
  94. self.assertEqual(Ban.objects.count(), 24)
  95. def test_mass_delete_accounts(self):
  96. """users list deletes users"""
  97. User = get_user_model()
  98. user_pks = []
  99. for i in xrange(10):
  100. test_user = User.objects.create_user('Bob%s' % i,
  101. 'bob%s@test.com' % i,
  102. 'pass123',
  103. requires_activation=1)
  104. user_pks.append(test_user.pk)
  105. response = self.client.post(
  106. reverse('misago:admin:users:accounts:index'),
  107. data={'action': 'delete_accounts', 'selected_items': user_pks})
  108. self.assertEqual(response.status_code, 302)
  109. self.assertEqual(User.objects.count(), 1)
  110. def test_mass_delete_all(self):
  111. """users list deletes users and their content"""
  112. User = get_user_model()
  113. user_pks = []
  114. for i in xrange(10):
  115. test_user = User.objects.create_user('Bob%s' % i,
  116. 'bob%s@test.com' % i,
  117. 'pass123',
  118. requires_activation=1)
  119. user_pks.append(test_user.pk)
  120. response = self.client.post(
  121. reverse('misago:admin:users:accounts:index'),
  122. data={'action': 'delete_accounts', 'selected_items': user_pks})
  123. self.assertEqual(response.status_code, 302)
  124. self.assertEqual(User.objects.count(), 1)
  125. def test_new_view(self):
  126. """new user view creates account"""
  127. response = self.client.get(
  128. reverse('misago:admin:users:accounts:new'))
  129. self.assertEqual(response.status_code, 200)
  130. default_rank = Rank.objects.get_default()
  131. authenticated_role = Role.objects.get(special_role='authenticated')
  132. response = self.client.post(reverse('misago:admin:users:accounts:new'),
  133. data={
  134. 'username': 'Bawww',
  135. 'rank': unicode(default_rank.pk),
  136. 'roles': unicode(authenticated_role.pk),
  137. 'email': 'reg@stered.com',
  138. 'new_password': 'pass123',
  139. 'staff_level': '0'
  140. })
  141. self.assertEqual(response.status_code, 302)
  142. User = get_user_model()
  143. User.objects.get_by_username('Bawww')
  144. def test_edit_view(self):
  145. """edit user view changes account"""
  146. User = get_user_model()
  147. test_user = User.objects.create_user('Bob', 'bob@test.com', 'pass123')
  148. test_link = reverse('misago:admin:users:accounts:edit',
  149. kwargs={'user_id': test_user.pk})
  150. response = self.client.get(test_link)
  151. self.assertEqual(response.status_code, 200)
  152. response = self.client.post(test_link,
  153. data={
  154. 'username': 'Bawww',
  155. 'rank': unicode(test_user.rank_id),
  156. 'roles': unicode(test_user.roles.all()[0].pk),
  157. 'email': 'reg@stered.com',
  158. 'new_password': 'pass123',
  159. 'staff_level': '0',
  160. 'signature': 'Hello world!',
  161. 'is_signature_locked': '1',
  162. 'timezone': 'utc',
  163. 'is_hiding_presence': '0',
  164. 'limits_private_thread_invites_to': '0',
  165. 'signature_lock_staff_message': 'Staff message',
  166. 'signature_lock_user_message': 'User message',
  167. 'subscribe_to_started_threads': '2',
  168. 'subscribe_to_replied_threads': '2',
  169. })
  170. self.assertEqual(response.status_code, 302)
  171. User.objects.get_by_username('Bawww')
  172. User.objects.get_by_email('reg@stered.com')
  173. ajax_header = {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'}
  174. def test_delete_threads_view(self):
  175. """delete user threads view deletes threads"""
  176. User = get_user_model()
  177. test_user = User.objects.create_user('Bob', 'bob@test.com', 'pass123')
  178. test_link = reverse('misago:admin:users:accounts:delete_threads',
  179. kwargs={'user_id': test_user.pk})
  180. forum = Forum.objects.all_forums().filter(role="forum")[:1][0]
  181. [post_thread(forum, poster=test_user) for i in xrange(10)]
  182. response = self.client.post(test_link, **self.ajax_header)
  183. self.assertEqual(response.status_code, 200)
  184. response_dict = json.loads(response.content)
  185. self.assertEqual(response_dict['deleted_count'], 10)
  186. self.assertFalse(response_dict['is_completed'])
  187. response = self.client.post(test_link, **self.ajax_header)
  188. self.assertEqual(response.status_code, 200)
  189. response_dict = json.loads(response.content)
  190. self.assertEqual(response_dict['deleted_count'], 0)
  191. self.assertTrue(response_dict['is_completed'])
  192. def test_delete_posts_view(self):
  193. """delete user posts view deletes posts"""
  194. User = get_user_model()
  195. test_user = User.objects.create_user('Bob', 'bob@test.com', 'pass123')
  196. test_link = reverse('misago:admin:users:accounts:delete_posts',
  197. kwargs={'user_id': test_user.pk})
  198. forum = Forum.objects.all_forums().filter(role="forum")[:1][0]
  199. thread = post_thread(forum)
  200. [reply_thread(thread, poster=test_user) for i in xrange(10)]
  201. response = self.client.post(test_link, **self.ajax_header)
  202. self.assertEqual(response.status_code, 200)
  203. response_dict = json.loads(response.content)
  204. self.assertEqual(response_dict['deleted_count'], 10)
  205. self.assertFalse(response_dict['is_completed'])
  206. response = self.client.post(test_link, **self.ajax_header)
  207. self.assertEqual(response.status_code, 200)
  208. response_dict = json.loads(response.content)
  209. self.assertEqual(response_dict['deleted_count'], 0)
  210. self.assertTrue(response_dict['is_completed'])
  211. def test_delete_account_view(self):
  212. """delete user account view deletes user account"""
  213. User = get_user_model()
  214. test_user = User.objects.create_user('Bob', 'bob@test.com', 'pass123')
  215. test_link = reverse('misago:admin:users:accounts:delete_account',
  216. kwargs={'user_id': test_user.pk})
  217. response = self.client.post(test_link, **self.ajax_header)
  218. self.assertEqual(response.status_code, 200)
  219. response_dict = json.loads(response.content)
  220. self.assertTrue(response_dict['is_completed'])