test_options_views.py 3.3 KB

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