test_useradmin_views.py 24 KB

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