test_usercp_views.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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 ChangeAvatarTests(AdminTestCase):
  30. def setUp(self):
  31. super(ChangeAvatarTests, self).setUp()
  32. self.view_link = reverse('misago:usercp_change_avatar')
  33. def test_avatar_get(self):
  34. """GET to change avatar returns 200"""
  35. response = self.client.get(self.view_link)
  36. self.assertEqual(response.status_code, 200)
  37. self.test_admin.is_avatar_banned = True
  38. self.test_admin.avatar_ban_user_message = 'Your avatar is banned.'
  39. self.test_admin.save()
  40. response = self.client.get(self.view_link)
  41. self.assertEqual(response.status_code, 200)
  42. self.assertIn('Your avatar is banned', response.content)
  43. def test_set_gravatar(self):
  44. """view sets user gravatar"""
  45. self.test_admin.set_email('kontakt@rpiton.com')
  46. self.test_admin.save()
  47. response = self.client.post(self.view_link, data={'dl-gravatar': '1'})
  48. self.assertEqual(response.status_code, 302)
  49. response = self.client.get(self.view_link)
  50. self.assertEqual(response.status_code, 200)
  51. self.assertIn('Gravatar was downloaded', response.content)
  52. self.test_admin.set_email('test@test.com')
  53. self.test_admin.save()
  54. self.client.post(self.view_link, data={'dl-gravatar': '1'})
  55. response = self.client.get(self.view_link)
  56. self.assertEqual(response.status_code, 200)
  57. self.assertIn('No Gravatar is associated', response.content)
  58. def test_set_dynamic(self):
  59. """view sets user dynamic avatar"""
  60. response = self.client.post(self.view_link, data={'set-dynamic': '1'})
  61. self.assertEqual(response.status_code, 302)
  62. response = self.client.get(self.view_link)
  63. self.assertEqual(response.status_code, 200)
  64. self.assertIn('New avatar based', response.content)
  65. class EditSignatureTests(AdminTestCase):
  66. def setUp(self):
  67. super(EditSignatureTests, self).setUp()
  68. self.view_link = reverse('misago:usercp_edit_signature')
  69. def test_signature_no_permission(self):
  70. """edit signature view with no ACL returns 404"""
  71. response = self.client.get(self.view_link)
  72. self.assertEqual(response.status_code, 404)
  73. def test_signature_banned(self):
  74. """GET to usercp change options view returns 200"""
  75. role = self.test_admin.roles.all()[0]
  76. permissions = role.permissions
  77. account_permissions = permissions['misago.users.permissions.account']
  78. account_permissions['can_have_signature'] = 1
  79. role.permissions = permissions
  80. self.test_admin.is_signature_banned = True
  81. self.test_admin.signature_ban_user_message = 'Your siggy is banned.'
  82. self.test_admin.save()
  83. response = self.client.get(self.view_link)
  84. self.assertEqual(response.status_code, 200)
  85. self.assertIn('Your siggy is banned', response.content)
  86. def test_signature_change(self):
  87. """GET to usercp change options view returns 200"""
  88. role = self.test_admin.roles.all()[0]
  89. permissions = role.permissions
  90. account_permissions = permissions['misago.users.permissions.account']
  91. account_permissions['can_have_signature'] = 1
  92. role.permissions = permissions
  93. self.test_admin.is_signature_banned = False
  94. self.test_admin.save()
  95. response = self.client.post(self.view_link,
  96. data={'signature': 'Hello siggy!'})
  97. self.assertEqual(response.status_code, 302)
  98. response = self.client.get(self.view_link)
  99. self.assertIn('<p>Hello siggy!</p>', response.content)
  100. class ChangeUsernameTests(AdminTestCase):
  101. def setUp(self):
  102. super(ChangeUsernameTests, self).setUp()
  103. self.view_link = reverse('misago:usercp_change_username')
  104. def test_change_username_get(self):
  105. """GET to usercp change username view returns 200"""
  106. response = self.client.get(self.view_link)
  107. self.assertEqual(response.status_code, 200)
  108. self.assertIn('Change username', response.content)
  109. def test_change_username_post(self):
  110. """POST to usercp change username view returns 302"""
  111. response = self.client.post(self.view_link,
  112. data={'new_username': 'Boberson'})
  113. self.assertEqual(response.status_code, 302)
  114. test_user = get_user_model().objects.get(pk=self.test_admin.pk)
  115. self.assertEqual(test_user.username, 'Boberson')
  116. response = self.client.get(self.view_link)
  117. self.assertEqual(response.status_code, 200)
  118. self.assertIn(test_user.username, response.content)
  119. class ChangeEmailPasswordTests(AdminTestCase):
  120. def setUp(self):
  121. super(ChangeEmailPasswordTests, self).setUp()
  122. self.view_link = reverse('misago:usercp_change_email_password')
  123. threadstore.clear()
  124. def _link_from_mail(self, mail_body):
  125. for line in mail.outbox[0].body.splitlines():
  126. if line.strip().startswith('http://testserver/'):
  127. return line.strip()[len('http://testserver'):]
  128. raise ValueError("mail body didn't contain link with token")
  129. def test_change_email_password_get(self):
  130. """GET to usercp change email/pass view returns 200"""
  131. response = self.client.get(self.view_link)
  132. self.assertEqual(response.status_code, 200)
  133. self.assertIn('Change email or password', response.content)
  134. def test_change_email(self):
  135. """POST to usercp change email view returns 302"""
  136. response = self.client.post(self.view_link,
  137. data={'new_email': 'newmail@test.com',
  138. 'current_password': 'Pass.123'})
  139. self.assertEqual(response.status_code, 302)
  140. self.assertIn('Confirm changes to', mail.outbox[0].subject)
  141. confirmation_link = self._link_from_mail(mail.outbox[0].body)
  142. response = self.client.get(confirmation_link)
  143. self.assertEqual(response.status_code, 302)
  144. User = get_user_model()
  145. test_user = User.objects.get(email='newmail@test.com')
  146. def test_change_password(self):
  147. """POST to usercp change password view returns 302"""
  148. response = self.client.post(self.view_link,
  149. data={'new_password': 'newpass123',
  150. 'current_password': 'Pass.123'})
  151. self.assertEqual(response.status_code, 302)
  152. self.assertIn('Confirm changes to', mail.outbox[0].subject)
  153. confirmation_link = self._link_from_mail(mail.outbox[0].body)
  154. response = self.client.get(confirmation_link)
  155. self.assertEqual(response.status_code, 302)
  156. User = get_user_model()
  157. test_user = User.objects.get(pk=self.test_admin.pk)
  158. self.assertFalse(test_user.check_password('Pass.123'))
  159. self.assertTrue(test_user.check_password('newpass123'))