test_usercp_views.py 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 ChangeUsernameTests(AuthenticatedUserTestCase):
  11. def setUp(self):
  12. super(ChangeUsernameTests, self).setUp()
  13. self.view_link = reverse('misago:usercp_change_username')
  14. def test_change_username_get(self):
  15. """GET to usercp change username view returns 200"""
  16. response = self.client.get(self.view_link)
  17. self.assertEqual(response.status_code, 200)
  18. self.assertIn('Change username', response.content)
  19. def test_change_username_post(self):
  20. """POST to usercp change username view returns 302"""
  21. response = self.client.post(self.view_link,
  22. data={'new_username': 'Boberson'})
  23. self.assertEqual(response.status_code, 302)
  24. test_user = get_user_model().objects.get(pk=self.user.pk)
  25. self.assertEqual(test_user.username, 'Boberson')
  26. response = self.client.get(self.view_link)
  27. self.assertEqual(response.status_code, 200)
  28. self.assertIn(test_user.username, response.content)
  29. class ChangeEmailPasswordTests(AuthenticatedUserTestCase):
  30. def setUp(self):
  31. super(ChangeEmailPasswordTests, self).setUp()
  32. self.view_link = reverse('misago:usercp_change_email_password')
  33. threadstore.clear()
  34. def _link_from_mail(self, mail_body):
  35. for line in mail.outbox[0].body.splitlines():
  36. if line.strip().startswith('http://testserver/'):
  37. return line.strip()[len('http://testserver'):]
  38. raise ValueError("mail body didn't contain link with token")
  39. def test_change_email_password_get(self):
  40. """GET to usercp change email/pass view returns 200"""
  41. response = self.client.get(self.view_link)
  42. self.assertEqual(response.status_code, 200)
  43. self.assertIn('Change email or password', response.content)
  44. def test_change_email(self):
  45. """POST to usercp change email view returns 302"""
  46. response = self.client.post(self.view_link,
  47. data={'new_email': 'newmail@test.com',
  48. 'current_password': 'Pass.123'})
  49. self.assertEqual(response.status_code, 302)
  50. self.assertIn('Confirm changes to', mail.outbox[0].subject)
  51. confirmation_link = self._link_from_mail(mail.outbox[0].body)
  52. response = self.client.get(confirmation_link)
  53. self.assertEqual(response.status_code, 302)
  54. User = get_user_model()
  55. User.objects.get(email='newmail@test.com')
  56. def test_change_password(self):
  57. """POST to usercp change password view returns 302"""
  58. response = self.client.post(self.view_link,
  59. data={'new_password': 'newpass123',
  60. 'current_password': 'Pass.123'})
  61. self.assertEqual(response.status_code, 302)
  62. self.assertIn('Confirm changes to', mail.outbox[0].subject)
  63. confirmation_link = self._link_from_mail(mail.outbox[0].body)
  64. response = self.client.get(confirmation_link)
  65. self.assertEqual(response.status_code, 302)
  66. User = get_user_model()
  67. test_user = User.objects.get(pk=self.user.pk)
  68. self.assertFalse(test_user.check_password('Pass.123'))
  69. self.assertTrue(test_user.check_password('newpass123'))