test_options_views.py 3.6 KB

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