test_options_views.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from django.core import mail
  2. from django.urls import reverse
  3. from ..testutils import AuthenticatedUserTestCase
  4. class OptionsViewsTests(AuthenticatedUserTestCase):
  5. def test_lander_view_returns_200(self):
  6. """/options has no show stoppers"""
  7. response = self.client.get(reverse('misago:options'))
  8. self.assertEqual(response.status_code, 200)
  9. def test_form_view_returns_200(self):
  10. """/options/some-form has no show stoppers"""
  11. response = self.client.get(reverse('misago:options-form', kwargs={
  12. 'form_name': 'some-fake-form'
  13. }))
  14. self.assertEqual(response.status_code, 200)
  15. class ConfirmChangeEmailTests(AuthenticatedUserTestCase):
  16. def setUp(self):
  17. super(ConfirmChangeEmailTests, self).setUp()
  18. link = '/api/users/%s/change-email/' % self.user.pk
  19. response = self.client.post(link, data={
  20. 'new_email': 'n3w@email.com',
  21. 'password': self.USER_PASSWORD
  22. })
  23. self.assertEqual(response.status_code, 200)
  24. for line in [l.strip() for l in mail.outbox[0].body.splitlines()]:
  25. if line.startswith('http://'):
  26. self.link = line.strip()
  27. break
  28. def test_invalid_token(self):
  29. """invalid token is rejected"""
  30. response = self.client.get(
  31. reverse('misago:options-confirm-email-change', kwargs={
  32. 'token': 'invalid'
  33. }))
  34. self.assertContains(response, "Change confirmation link is invalid.", status_code=400)
  35. def test_change_email(self):
  36. """valid token changes email"""
  37. response = self.client.get(self.link)
  38. self.assertContains(response, "your e-mail has been changed")
  39. self.reload_user()
  40. self.assertEqual(self.user.email, 'n3w@email.com')
  41. class ConfirmChangePasswordTests(AuthenticatedUserTestCase):
  42. def setUp(self):
  43. super(ConfirmChangePasswordTests, self).setUp()
  44. link = '/api/users/%s/change-password/' % self.user.pk
  45. response = self.client.post(link, data={
  46. 'new_password': 'n3wp4ssword',
  47. 'password': self.USER_PASSWORD
  48. })
  49. self.assertEqual(response.status_code, 200)
  50. for line in [l.strip() for l in mail.outbox[0].body.splitlines()]:
  51. if line.startswith('http://'):
  52. self.link = line.strip()
  53. break
  54. def test_invalid_token(self):
  55. """invalid token is rejected"""
  56. response = self.client.get(
  57. reverse('misago:options-confirm-password-change', kwargs={
  58. 'token': 'invalid'
  59. }))
  60. self.assertContains(response, "Change confirmation link is invalid.", status_code=400)
  61. def test_change_password(self):
  62. """valid token changes password"""
  63. response = self.client.get(self.link)
  64. self.assertContains(response, "your password has been changed")
  65. self.reload_user()
  66. self.assertFalse(self.user.check_password(self.USER_PASSWORD))
  67. self.assertTrue(self.user.check_password('n3wp4ssword'))