test_useradmin_views.py 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727
  1. from django.contrib.auth import get_user_model
  2. from django.core import mail
  3. from django.urls import reverse
  4. from django.utils import six
  5. from misago.acl.models import Role
  6. from misago.admin.testutils import AdminTestCase
  7. from misago.categories.models import Category
  8. from misago.threads.testutils import post_thread, reply_thread
  9. from misago.users.models import Ban, Rank
  10. UserModel = get_user_model()
  11. class UserAdminViewsTests(AdminTestCase):
  12. AJAX_HEADER = {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'}
  13. def test_link_registered(self):
  14. """admin index view contains users link"""
  15. response = self.client.get(reverse('misago:admin:index'))
  16. self.assertContains(response, reverse('misago:admin:users:accounts:index'))
  17. def test_list_view(self):
  18. """users list view returns 200"""
  19. response = self.client.get(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.assertContains(response, self.user.username)
  24. def test_list_search(self):
  25. """users list is searchable"""
  26. response = self.client.get(reverse('misago:admin:users:accounts:index'))
  27. self.assertEqual(response.status_code, 302)
  28. link_base = response['location']
  29. response = self.client.get(link_base)
  30. self.assertEqual(response.status_code, 200)
  31. user_a = UserModel.objects.create_user('Tyrael', 't123@test.com', 'pass123')
  32. user_b = UserModel.objects.create_user('Tyrion', 't321@test.com', 'pass123')
  33. user_c = UserModel.objects.create_user('Karen', 't432@test.com', 'pass123')
  34. # Search both
  35. response = self.client.get('%s&username=tyr' % link_base)
  36. self.assertEqual(response.status_code, 200)
  37. self.assertContains(response, user_a.username)
  38. self.assertContains(response, user_b.username)
  39. # Search tyrion
  40. response = self.client.get('%s&username=tyrion' % link_base)
  41. self.assertEqual(response.status_code, 200)
  42. self.assertNotContains(response, user_a.username)
  43. self.assertContains(response, user_b.username)
  44. # Search tyrael
  45. response = self.client.get('%s&email=t123@test.com' % link_base)
  46. self.assertEqual(response.status_code, 200)
  47. self.assertContains(response, user_a.username)
  48. self.assertNotContains(response, user_b.username)
  49. # Search disabled
  50. user_c.is_active = False
  51. user_c.save()
  52. response = self.client.get('%s&disabled=1' % link_base)
  53. self.assertEqual(response.status_code, 200)
  54. self.assertNotContains(response, user_a.username)
  55. self.assertNotContains(response, user_b.username)
  56. self.assertContains(response, '<del>%s</del>' % user_c.username)
  57. def test_mass_activation(self):
  58. """users list activates multiple users"""
  59. user_pks = []
  60. for i in range(10):
  61. test_user = UserModel.objects.create_user(
  62. 'Bob%s' % i,
  63. 'bob%s@test.com' % i,
  64. 'pass123',
  65. requires_activation=1,
  66. )
  67. user_pks.append(test_user.pk)
  68. response = self.client.post(
  69. reverse('misago:admin:users:accounts:index'),
  70. data={
  71. 'action': 'activate',
  72. 'selected_items': user_pks,
  73. }
  74. )
  75. self.assertEqual(response.status_code, 302)
  76. inactive_qs = UserModel.objects.filter(
  77. id__in=user_pks,
  78. requires_activation=1,
  79. )
  80. self.assertEqual(inactive_qs.count(), 0)
  81. self.assertIn("has been activated", mail.outbox[0].subject)
  82. def test_mass_ban(self):
  83. """users list bans multiple users"""
  84. user_pks = []
  85. for i in range(10):
  86. test_user = UserModel.objects.create_user(
  87. 'Bob%s' % i,
  88. 'bob%s@test.com' % i,
  89. 'pass123',
  90. requires_activation=1,
  91. )
  92. user_pks.append(test_user.pk)
  93. response = self.client.post(
  94. reverse('misago:admin:users:accounts:index'),
  95. data={
  96. 'action': 'ban',
  97. 'selected_items': user_pks,
  98. }
  99. )
  100. self.assertEqual(response.status_code, 200)
  101. response = self.client.post(
  102. reverse('misago:admin:users:accounts:index'),
  103. data={
  104. 'action': 'ban',
  105. 'selected_items': user_pks,
  106. 'ban_type': ['usernames', 'emails', 'domains', 'ip', 'ip_first', 'ip_two'],
  107. 'finalize': '',
  108. },
  109. )
  110. self.assertEqual(response.status_code, 302)
  111. self.assertEqual(Ban.objects.count(), 24)
  112. def test_mass_delete_accounts(self):
  113. """users list deletes users"""
  114. user_pks = []
  115. for i in range(10):
  116. test_user = UserModel.objects.create_user(
  117. 'Bob%s' % i,
  118. 'bob%s@test.com' % i,
  119. 'pass123',
  120. requires_activation=1,
  121. )
  122. user_pks.append(test_user.pk)
  123. response = self.client.post(
  124. reverse('misago:admin:users:accounts:index'),
  125. data={
  126. 'action': 'delete_accounts',
  127. 'selected_items': user_pks,
  128. }
  129. )
  130. self.assertEqual(response.status_code, 302)
  131. self.assertEqual(UserModel.objects.count(), 1)
  132. def test_mass_delete_all(self):
  133. """users list deletes users and their content"""
  134. user_pks = []
  135. for i in range(10):
  136. test_user = UserModel.objects.create_user(
  137. 'Bob%s' % i,
  138. 'bob%s@test.com' % i,
  139. 'pass123',
  140. requires_activation=1,
  141. )
  142. user_pks.append(test_user.pk)
  143. response = self.client.post(
  144. reverse('misago:admin:users:accounts:index'),
  145. data={
  146. 'action': 'delete_accounts',
  147. 'selected_items': user_pks,
  148. }
  149. )
  150. self.assertEqual(response.status_code, 302)
  151. self.assertEqual(UserModel.objects.count(), 1)
  152. def test_new_view(self):
  153. """new user view creates account"""
  154. response = self.client.get(reverse('misago:admin:users:accounts:new'))
  155. self.assertEqual(response.status_code, 200)
  156. default_rank = Rank.objects.get_default()
  157. authenticated_role = Role.objects.get(special_role='authenticated')
  158. response = self.client.post(
  159. reverse('misago:admin:users:accounts:new'),
  160. data={
  161. 'username': 'Bawww',
  162. 'rank': six.text_type(default_rank.pk),
  163. 'roles': six.text_type(authenticated_role.pk),
  164. 'email': 'reg@stered.com',
  165. 'new_password': 'pass123',
  166. 'staff_level': '0',
  167. }
  168. )
  169. self.assertEqual(response.status_code, 302)
  170. UserModel.objects.get_by_username('Bawww')
  171. test_user = UserModel.objects.get_by_email('reg@stered.com')
  172. self.assertTrue(test_user.check_password('pass123'))
  173. def test_new_view_password_with_whitespaces(self):
  174. """new user view creates account with whitespaces password"""
  175. response = self.client.get(reverse('misago:admin:users:accounts:new'))
  176. self.assertEqual(response.status_code, 200)
  177. default_rank = Rank.objects.get_default()
  178. authenticated_role = Role.objects.get(special_role='authenticated')
  179. response = self.client.post(
  180. reverse('misago:admin:users:accounts:new'),
  181. data={
  182. 'username': 'Bawww',
  183. 'rank': six.text_type(default_rank.pk),
  184. 'roles': six.text_type(authenticated_role.pk),
  185. 'email': 'reg@stered.com',
  186. 'new_password': ' pass123 ',
  187. 'staff_level': '0',
  188. }
  189. )
  190. self.assertEqual(response.status_code, 302)
  191. UserModel.objects.get_by_username('Bawww')
  192. test_user = UserModel.objects.get_by_email('reg@stered.com')
  193. self.assertTrue(test_user.check_password(' pass123 '))
  194. def test_edit_view(self):
  195. """edit user view changes account"""
  196. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  197. test_link = reverse(
  198. 'misago:admin:users:accounts:edit', kwargs={
  199. 'pk': test_user.pk,
  200. }
  201. )
  202. response = self.client.get(test_link)
  203. self.assertEqual(response.status_code, 200)
  204. response = self.client.post(
  205. test_link,
  206. data={
  207. 'username': 'Bawww',
  208. 'rank': six.text_type(test_user.rank_id),
  209. 'roles': six.text_type(test_user.roles.all()[0].pk),
  210. 'email': 'reg@stered.com',
  211. 'new_password': 'newpass123',
  212. 'staff_level': '0',
  213. 'signature': 'Hello world!',
  214. 'is_signature_locked': '1',
  215. 'is_hiding_presence': '0',
  216. 'limits_private_thread_invites_to': '0',
  217. 'signature_lock_staff_message': 'Staff message',
  218. 'signature_lock_user_message': 'User message',
  219. 'subscribe_to_started_threads': '2',
  220. 'subscribe_to_replied_threads': '2',
  221. }
  222. )
  223. self.assertEqual(response.status_code, 302)
  224. updated_user = UserModel.objects.get(pk=test_user.pk)
  225. self.assertTrue(updated_user.check_password('newpass123'))
  226. self.assertEqual(updated_user.username, 'Bawww')
  227. self.assertEqual(updated_user.slug, 'bawww')
  228. UserModel.objects.get_by_username('Bawww')
  229. UserModel.objects.get_by_email('reg@stered.com')
  230. def test_edit_dont_change_username(self):
  231. """
  232. If username wasn't changed, don't touch user's username, slug or history
  233. This is regression test for issue #640
  234. """
  235. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  236. test_link = reverse(
  237. 'misago:admin:users:accounts:edit', kwargs={
  238. 'pk': test_user.pk,
  239. }
  240. )
  241. response = self.client.get(test_link)
  242. self.assertEqual(response.status_code, 200)
  243. response = self.client.post(
  244. test_link,
  245. data={
  246. 'username': 'Bob',
  247. 'rank': six.text_type(test_user.rank_id),
  248. 'roles': six.text_type(test_user.roles.all()[0].pk),
  249. 'email': 'reg@stered.com',
  250. 'new_password': 'pass123',
  251. 'signature': 'Hello world!',
  252. 'is_signature_locked': '1',
  253. 'is_hiding_presence': '0',
  254. 'limits_private_thread_invites_to': '0',
  255. 'signature_lock_staff_message': 'Staff message',
  256. 'signature_lock_user_message': 'User message',
  257. 'subscribe_to_started_threads': '2',
  258. 'subscribe_to_replied_threads': '2',
  259. }
  260. )
  261. self.assertEqual(response.status_code, 302)
  262. updated_user = UserModel.objects.get(pk=test_user.pk)
  263. self.assertEqual(updated_user.username, 'Bob')
  264. self.assertEqual(updated_user.slug, 'bob')
  265. self.assertEqual(updated_user.namechanges.count(), 0)
  266. def test_edit_change_password_whitespaces(self):
  267. """edit user view changes account password to include whitespaces"""
  268. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  269. test_link = reverse(
  270. 'misago:admin:users:accounts:edit', kwargs={
  271. 'pk': test_user.pk,
  272. }
  273. )
  274. response = self.client.get(test_link)
  275. self.assertEqual(response.status_code, 200)
  276. response = self.client.post(
  277. test_link,
  278. data={
  279. 'username': 'Bawww',
  280. 'rank': six.text_type(test_user.rank_id),
  281. 'roles': six.text_type(test_user.roles.all()[0].pk),
  282. 'email': 'reg@stered.com',
  283. 'new_password': ' newpass123 ',
  284. 'staff_level': '0',
  285. 'signature': 'Hello world!',
  286. 'is_signature_locked': '1',
  287. 'is_hiding_presence': '0',
  288. 'limits_private_thread_invites_to': '0',
  289. 'signature_lock_staff_message': 'Staff message',
  290. 'signature_lock_user_message': 'User message',
  291. 'subscribe_to_started_threads': '2',
  292. 'subscribe_to_replied_threads': '2',
  293. }
  294. )
  295. self.assertEqual(response.status_code, 302)
  296. updated_user = UserModel.objects.get(pk=test_user.pk)
  297. self.assertTrue(updated_user.check_password(' newpass123 '))
  298. self.assertEqual(updated_user.username, 'Bawww')
  299. self.assertEqual(updated_user.slug, 'bawww')
  300. UserModel.objects.get_by_username('Bawww')
  301. UserModel.objects.get_by_email('reg@stered.com')
  302. def test_edit_make_admin(self):
  303. """edit user view allows super admin to make other user admin"""
  304. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  305. test_link = reverse(
  306. 'misago:admin:users:accounts:edit', kwargs={
  307. 'pk': test_user.pk,
  308. }
  309. )
  310. response = self.client.get(test_link)
  311. self.assertContains(response, 'id="id_is_staff_1"')
  312. self.assertContains(response, 'id="id_is_superuser_1"')
  313. response = self.client.post(
  314. test_link,
  315. data={
  316. 'username': 'Bawww',
  317. 'rank': six.text_type(test_user.rank_id),
  318. 'roles': six.text_type(test_user.roles.all()[0].pk),
  319. 'email': 'reg@stered.com',
  320. 'new_password': 'pass123',
  321. 'is_staff': '1',
  322. 'is_superuser': '0',
  323. 'signature': 'Hello world!',
  324. 'is_signature_locked': '1',
  325. 'is_hiding_presence': '0',
  326. 'limits_private_thread_invites_to': '0',
  327. 'signature_lock_staff_message': 'Staff message',
  328. 'signature_lock_user_message': 'User message',
  329. 'subscribe_to_started_threads': '2',
  330. 'subscribe_to_replied_threads': '2',
  331. }
  332. )
  333. self.assertEqual(response.status_code, 302)
  334. updated_user = UserModel.objects.get(pk=test_user.pk)
  335. self.assertTrue(updated_user.is_staff)
  336. self.assertFalse(updated_user.is_superuser)
  337. def test_edit_make_superadmin_admin(self):
  338. """edit user view allows super admin to make other user super admin"""
  339. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  340. test_link = reverse(
  341. 'misago:admin:users:accounts:edit', kwargs={
  342. 'pk': test_user.pk,
  343. }
  344. )
  345. response = self.client.get(test_link)
  346. self.assertContains(response, 'id="id_is_staff_1"')
  347. self.assertContains(response, 'id="id_is_superuser_1"')
  348. response = self.client.post(
  349. test_link,
  350. data={
  351. 'username': 'Bawww',
  352. 'rank': six.text_type(test_user.rank_id),
  353. 'roles': six.text_type(test_user.roles.all()[0].pk),
  354. 'email': 'reg@stered.com',
  355. 'new_password': 'pass123',
  356. 'is_staff': '0',
  357. 'is_superuser': '1',
  358. 'signature': 'Hello world!',
  359. 'is_signature_locked': '1',
  360. 'is_hiding_presence': '0',
  361. 'limits_private_thread_invites_to': '0',
  362. 'signature_lock_staff_message': 'Staff message',
  363. 'signature_lock_user_message': 'User message',
  364. 'subscribe_to_started_threads': '2',
  365. 'subscribe_to_replied_threads': '2',
  366. }
  367. )
  368. self.assertEqual(response.status_code, 302)
  369. updated_user = UserModel.objects.get(pk=test_user.pk)
  370. self.assertFalse(updated_user.is_staff)
  371. self.assertTrue(updated_user.is_superuser)
  372. def test_edit_denote_superadmin(self):
  373. """edit user view allows super admin to denote other super admin"""
  374. test_user = UserModel.objects.create_user(
  375. 'Bob',
  376. 'bob@test.com',
  377. 'pass123',
  378. is_staff=True,
  379. is_superuser=True,
  380. )
  381. test_link = reverse(
  382. 'misago:admin:users:accounts:edit', kwargs={
  383. 'pk': test_user.pk,
  384. }
  385. )
  386. response = self.client.get(test_link)
  387. self.assertContains(response, 'id="id_is_staff_1"')
  388. self.assertContains(response, 'id="id_is_superuser_1"')
  389. response = self.client.post(
  390. test_link,
  391. data={
  392. 'username': 'Bawww',
  393. 'rank': six.text_type(test_user.rank_id),
  394. 'roles': six.text_type(test_user.roles.all()[0].pk),
  395. 'email': 'reg@stered.com',
  396. 'new_password': 'pass123',
  397. 'is_staff': '0',
  398. 'is_superuser': '0',
  399. 'signature': 'Hello world!',
  400. 'is_signature_locked': '1',
  401. 'is_hiding_presence': '0',
  402. 'limits_private_thread_invites_to': '0',
  403. 'signature_lock_staff_message': 'Staff message',
  404. 'signature_lock_user_message': 'User message',
  405. 'subscribe_to_started_threads': '2',
  406. 'subscribe_to_replied_threads': '2',
  407. }
  408. )
  409. self.assertEqual(response.status_code, 302)
  410. updated_user = UserModel.objects.get(pk=test_user.pk)
  411. self.assertFalse(updated_user.is_staff)
  412. self.assertFalse(updated_user.is_superuser)
  413. def test_edit_cant_make_admin(self):
  414. """edit user view forbids admins from making other admins"""
  415. self.user.is_superuser = False
  416. self.user.save()
  417. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  418. test_link = reverse(
  419. 'misago:admin:users:accounts:edit', kwargs={
  420. 'pk': test_user.pk,
  421. }
  422. )
  423. response = self.client.get(test_link)
  424. self.assertNotContains(response, 'id="id_is_staff_1"')
  425. self.assertNotContains(response, 'id="id_is_superuser_1"')
  426. response = self.client.post(
  427. test_link,
  428. data={
  429. 'username': 'Bawww',
  430. 'rank': six.text_type(test_user.rank_id),
  431. 'roles': six.text_type(test_user.roles.all()[0].pk),
  432. 'email': 'reg@stered.com',
  433. 'new_password': 'pass123',
  434. 'is_staff': '1',
  435. 'is_superuser': '1',
  436. 'signature': 'Hello world!',
  437. 'is_signature_locked': '1',
  438. 'is_hiding_presence': '0',
  439. 'limits_private_thread_invites_to': '0',
  440. 'signature_lock_staff_message': 'Staff message',
  441. 'signature_lock_user_message': 'User message',
  442. 'subscribe_to_started_threads': '2',
  443. 'subscribe_to_replied_threads': '2',
  444. }
  445. )
  446. self.assertEqual(response.status_code, 302)
  447. updated_user = UserModel.objects.get(pk=test_user.pk)
  448. self.assertFalse(updated_user.is_staff)
  449. self.assertFalse(updated_user.is_superuser)
  450. def test_edit_disable_user(self):
  451. """edit user view allows admin to disable non admin"""
  452. self.user.is_superuser = False
  453. self.user.save()
  454. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  455. test_link = reverse(
  456. 'misago:admin:users:accounts:edit', kwargs={
  457. 'pk': test_user.pk,
  458. }
  459. )
  460. response = self.client.get(test_link)
  461. self.assertContains(response, 'id="id_is_active_1"')
  462. self.assertContains(response, 'id="id_is_active_staff_message"')
  463. response = self.client.post(
  464. test_link,
  465. data={
  466. 'username': 'Bawww',
  467. 'rank': six.text_type(test_user.rank_id),
  468. 'roles': six.text_type(test_user.roles.all()[0].pk),
  469. 'email': 'reg@stered.com',
  470. 'new_password': 'pass123',
  471. 'is_staff': '0',
  472. 'is_superuser': '0',
  473. 'signature': 'Hello world!',
  474. 'is_signature_locked': '1',
  475. 'is_hiding_presence': '0',
  476. 'limits_private_thread_invites_to': '0',
  477. 'signature_lock_staff_message': 'Staff message',
  478. 'signature_lock_user_message': 'User message',
  479. 'subscribe_to_started_threads': '2',
  480. 'subscribe_to_replied_threads': '2',
  481. 'is_active': '0',
  482. 'is_active_staff_message': "Disabled in test!"
  483. }
  484. )
  485. self.assertEqual(response.status_code, 302)
  486. updated_user = UserModel.objects.get(pk=test_user.pk)
  487. self.assertFalse(updated_user.is_active)
  488. self.assertEqual(updated_user.is_active_staff_message, "Disabled in test!")
  489. def test_edit_superuser_disable_admin(self):
  490. """edit user view allows admin to disable non admin"""
  491. self.user.is_superuser = True
  492. self.user.save()
  493. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  494. test_user.is_staff = True
  495. test_user.save()
  496. test_link = reverse(
  497. 'misago:admin:users:accounts:edit', kwargs={
  498. 'pk': test_user.pk,
  499. }
  500. )
  501. response = self.client.get(test_link)
  502. self.assertContains(response, 'id="id_is_active_1"')
  503. self.assertContains(response, 'id="id_is_active_staff_message"')
  504. response = self.client.post(
  505. test_link,
  506. data={
  507. 'username': 'Bawww',
  508. 'rank': six.text_type(test_user.rank_id),
  509. 'roles': six.text_type(test_user.roles.all()[0].pk),
  510. 'email': 'reg@stered.com',
  511. 'new_password': 'pass123',
  512. 'is_staff': '1',
  513. 'is_superuser': '0',
  514. 'signature': 'Hello world!',
  515. 'is_signature_locked': '1',
  516. 'is_hiding_presence': '0',
  517. 'limits_private_thread_invites_to': '0',
  518. 'signature_lock_staff_message': 'Staff message',
  519. 'signature_lock_user_message': 'User message',
  520. 'subscribe_to_started_threads': '2',
  521. 'subscribe_to_replied_threads': '2',
  522. 'is_active': '0',
  523. 'is_active_staff_message': "Disabled in test!"
  524. }
  525. )
  526. self.assertEqual(response.status_code, 302)
  527. updated_user = UserModel.objects.get(pk=test_user.pk)
  528. self.assertFalse(updated_user.is_active)
  529. self.assertEqual(updated_user.is_active_staff_message, "Disabled in test!")
  530. def test_edit_admin_cant_disable_admin(self):
  531. """edit user view disallows admin to disable admin"""
  532. self.user.is_superuser = False
  533. self.user.save()
  534. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  535. test_user.is_staff = True
  536. test_user.save()
  537. test_link = reverse(
  538. 'misago:admin:users:accounts:edit', kwargs={
  539. 'pk': test_user.pk,
  540. }
  541. )
  542. response = self.client.get(test_link)
  543. self.assertNotContains(response, 'id="id_is_active_1"')
  544. self.assertNotContains(response, 'id="id_is_active_staff_message"')
  545. response = self.client.post(
  546. test_link,
  547. data={
  548. 'username': 'Bawww',
  549. 'rank': six.text_type(test_user.rank_id),
  550. 'roles': six.text_type(test_user.roles.all()[0].pk),
  551. 'email': 'reg@stered.com',
  552. 'new_password': 'pass123',
  553. 'is_staff': '1',
  554. 'is_superuser': '0',
  555. 'signature': 'Hello world!',
  556. 'is_signature_locked': '1',
  557. 'is_hiding_presence': '0',
  558. 'limits_private_thread_invites_to': '0',
  559. 'signature_lock_staff_message': 'Staff message',
  560. 'signature_lock_user_message': 'User message',
  561. 'subscribe_to_started_threads': '2',
  562. 'subscribe_to_replied_threads': '2',
  563. 'is_active': '0',
  564. 'is_active_staff_message': "Disabled in test!"
  565. }
  566. )
  567. self.assertEqual(response.status_code, 302)
  568. updated_user = UserModel.objects.get(pk=test_user.pk)
  569. self.assertTrue(updated_user.is_active)
  570. self.assertFalse(updated_user.is_active_staff_message)
  571. def test_delete_threads_view(self):
  572. """delete user threads view deletes threads"""
  573. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  574. test_link = reverse(
  575. 'misago:admin:users:accounts:delete-threads', kwargs={
  576. 'pk': test_user.pk,
  577. }
  578. )
  579. category = Category.objects.all_categories()[:1][0]
  580. [post_thread(category, poster=test_user) for _ in range(10)]
  581. response = self.client.post(test_link, **self.AJAX_HEADER)
  582. self.assertEqual(response.status_code, 200)
  583. response_dict = response.json()
  584. self.assertEqual(response_dict['deleted_count'], 10)
  585. self.assertFalse(response_dict['is_completed'])
  586. response = self.client.post(test_link, **self.AJAX_HEADER)
  587. self.assertEqual(response.status_code, 200)
  588. response_dict = response.json()
  589. self.assertEqual(response_dict['deleted_count'], 0)
  590. self.assertTrue(response_dict['is_completed'])
  591. def test_delete_posts_view(self):
  592. """delete user posts view deletes posts"""
  593. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  594. test_link = reverse(
  595. 'misago:admin:users:accounts:delete-posts', kwargs={
  596. 'pk': test_user.pk,
  597. }
  598. )
  599. category = Category.objects.all_categories()[:1][0]
  600. thread = post_thread(category)
  601. [reply_thread(thread, poster=test_user) for _ in range(10)]
  602. response = self.client.post(test_link, **self.AJAX_HEADER)
  603. self.assertEqual(response.status_code, 200)
  604. response_dict = response.json()
  605. self.assertEqual(response_dict['deleted_count'], 10)
  606. self.assertFalse(response_dict['is_completed'])
  607. response = self.client.post(test_link, **self.AJAX_HEADER)
  608. self.assertEqual(response.status_code, 200)
  609. response_dict = response.json()
  610. self.assertEqual(response_dict['deleted_count'], 0)
  611. self.assertTrue(response_dict['is_completed'])
  612. def test_delete_account_view(self):
  613. """delete user account view deletes user account"""
  614. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
  615. test_link = reverse(
  616. 'misago:admin:users:accounts:delete-account', kwargs={
  617. 'pk': test_user.pk,
  618. }
  619. )
  620. response = self.client.post(test_link, **self.AJAX_HEADER)
  621. self.assertEqual(response.status_code, 200)
  622. response_dict = response.json()
  623. self.assertTrue(response_dict['is_completed'])