test_useradmin_views.py 23 KB

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