test_options_views.py 3.3 KB

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