test_usercp_views.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. from django.contrib.auth import get_user_model
  2. from django.core import mail
  3. from django.core.urlresolvers import reverse
  4. from misago.admin.testutils import AdminTestCase
  5. from misago.core import threadstore
  6. class ChangeForumOptionsTests(AdminTestCase):
  7. def setUp(self):
  8. super(ChangeForumOptionsTests, self).setUp()
  9. self.view_link = reverse('misago:usercp_change_forum_options')
  10. def test_change_forum_options_get(self):
  11. """GET to usercp change options view returns 200"""
  12. response = self.client.get(self.view_link)
  13. self.assertEqual(response.status_code, 200)
  14. self.assertIn('Change forum options', response.content)
  15. def test_change_forum_options_post(self):
  16. """POST to usercp change options view returns 302"""
  17. response = self.client.post(self.view_link, data={
  18. 'timezone': 'Asia/Qatar',
  19. 'is_hiding_presence': '1',
  20. 'subscribe_to_started_threads': '0',
  21. 'subscribe_to_replied_threads': '1',
  22. })
  23. self.assertEqual(response.status_code, 302)
  24. test_user = get_user_model().objects.get(pk=self.test_admin.pk)
  25. self.assertEqual(test_user.timezone, 'Asia/Qatar')
  26. self.assertEqual(test_user.is_hiding_presence, 1)
  27. self.assertEqual(test_user.subscribe_to_started_threads, 0)
  28. self.assertEqual(test_user.subscribe_to_replied_threads, 1)
  29. class EditSignatureTests(AdminTestCase):
  30. def setUp(self):
  31. super(EditSignatureTests, self).setUp()
  32. self.view_link = reverse('misago:usercp_edit_signature')
  33. def test_signature_no_permission(self):
  34. """edit signature view with no ACL returns 404"""
  35. response = self.client.get(self.view_link)
  36. self.assertEqual(response.status_code, 404)
  37. def test_signature_banned(self):
  38. """GET to usercp change options view returns 200"""
  39. role = self.test_admin.roles.all()[0]
  40. permissions = role.permissions
  41. account_permissions = permissions['misago.users.permissions.account']
  42. account_permissions['can_have_signature'] = 1
  43. role.permissions = permissions
  44. self.test_admin.is_signature_banned = True
  45. self.test_admin.signature_ban_user_message = 'Your siggy is banned.'
  46. self.test_admin.save()
  47. response = self.client.get(self.view_link)
  48. self.assertEqual(response.status_code, 200)
  49. self.assertIn('Your siggy is banned', response.content)
  50. def test_signature_banned(self):
  51. """GET to usercp change options view returns 200"""
  52. role = self.test_admin.roles.all()[0]
  53. permissions = role.permissions
  54. account_permissions = permissions['misago.users.permissions.account']
  55. account_permissions['can_have_signature'] = 1
  56. role.permissions = permissions
  57. self.test_admin.is_signature_banned = False
  58. self.test_admin.save()
  59. response = self.client.post(self.view_link,
  60. data={'signature': 'Hello siggy!'})
  61. self.assertEqual(response.status_code, 302)
  62. response = self.client.get(self.view_link)
  63. self.assertIn('<p>Hello siggy!</p>', response.content)
  64. class ChangeUsernameTests(AdminTestCase):
  65. def setUp(self):
  66. super(ChangeUsernameTests, self).setUp()
  67. self.view_link = reverse('misago:usercp_change_username')
  68. def test_change_username_get(self):
  69. """GET to usercp change username view returns 200"""
  70. response = self.client.get(self.view_link)
  71. self.assertEqual(response.status_code, 200)
  72. self.assertIn('Change username', response.content)
  73. def test_change_username_post(self):
  74. """POST to usercp change username view returns 302"""
  75. response = self.client.post(self.view_link,
  76. data={'new_username': 'Boberson'})
  77. self.assertEqual(response.status_code, 302)
  78. test_user = get_user_model().objects.get(pk=self.test_admin.pk)
  79. self.assertEqual(test_user.username, 'Boberson')
  80. response = self.client.get(self.view_link)
  81. self.assertEqual(response.status_code, 200)
  82. self.assertIn(test_user.username, response.content)
  83. class ChangeEmailPasswordTests(AdminTestCase):
  84. def setUp(self):
  85. super(ChangeEmailPasswordTests, self).setUp()
  86. self.view_link = reverse('misago:usercp_change_email_password')
  87. threadstore.clear()
  88. def _link_from_mail(self, mail_body):
  89. for line in mail.outbox[0].body.splitlines():
  90. if line.strip().startswith('http://testserver/'):
  91. return line.strip()[len('http://testserver'):]
  92. return ''
  93. def test_change_email_password_get(self):
  94. """GET to usercp change email/pass view returns 200"""
  95. response = self.client.get(self.view_link)
  96. self.assertEqual(response.status_code, 200)
  97. self.assertIn('Change email or password', response.content)
  98. def test_change_email(self):
  99. """POST to usercp change email view returns 302"""
  100. response = self.client.post(self.view_link,
  101. data={'new_email': 'newmail@test.com',
  102. 'current_password': 'Pass.123'})
  103. self.assertEqual(response.status_code, 302)
  104. self.assertIn('Confirm changes to', mail.outbox[0].subject)
  105. confirmation_link = self._link_from_mail(mail.outbox[0].body)
  106. response = self.client.get(confirmation_link)
  107. self.assertEqual(response.status_code, 302)
  108. User = get_user_model()
  109. test_user = User.objects.get(email='newmail@test.com')
  110. def test_change_password(self):
  111. """POST to usercp change password view returns 302"""
  112. response = self.client.post(self.view_link,
  113. data={'new_password': 'newpass123',
  114. 'current_password': 'Pass.123'})
  115. self.assertEqual(response.status_code, 302)
  116. self.assertIn('Confirm changes to', mail.outbox[0].subject)
  117. confirmation_link = self._link_from_mail(mail.outbox[0].body)
  118. response = self.client.get(confirmation_link)
  119. self.assertEqual(response.status_code, 302)
  120. User = get_user_model()
  121. test_user = User.objects.get(pk=self.test_admin.pk)
  122. self.assertFalse(test_user.check_password('Pass.123'))
  123. self.assertTrue(test_user.check_password('newpass123'))