test_usercp_views.py 6.4 KB

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