test_options_views.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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("misago:options-form", kwargs={"form_name": "some-fake-form"})
  13. )
  14. self.assertEqual(response.status_code, 200)
  15. class ConfirmChangeEmailTests(AuthenticatedUserTestCase):
  16. def setUp(self):
  17. super().setUp()
  18. link = "/api/users/%s/change-email/" % self.user.pk
  19. response = self.client.post(
  20. link, data={"new_email": "n3w@email.com", "password": self.USER_PASSWORD}
  21. )
  22. self.assertEqual(response.status_code, 200)
  23. for line in [l.strip() for l in mail.outbox[0].body.splitlines()]:
  24. if line.startswith("http://"):
  25. self.link = line.strip()
  26. break
  27. def test_invalid_token(self):
  28. """invalid token is rejected"""
  29. response = self.client.get(
  30. reverse("misago:options-confirm-email-change", kwargs={"token": "invalid"})
  31. )
  32. self.assertContains(
  33. response, "Change confirmation link is invalid.", status_code=400
  34. )
  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().setUp()
  44. link = "/api/users/%s/change-password/" % self.user.pk
  45. response = self.client.post(
  46. link, data={"new_password": "n3wp4ssword", "password": self.USER_PASSWORD}
  47. )
  48. self.assertEqual(response.status_code, 200)
  49. for line in [l.strip() for l in mail.outbox[0].body.splitlines()]:
  50. if line.startswith("http://"):
  51. self.link = line.strip()
  52. break
  53. def test_invalid_token(self):
  54. """invalid token is rejected"""
  55. response = self.client.get(
  56. reverse(
  57. "misago:options-confirm-password-change", kwargs={"token": "invalid"}
  58. )
  59. )
  60. self.assertContains(
  61. response, "Change confirmation link is invalid.", status_code=400
  62. )
  63. def test_change_password(self):
  64. """valid token changes password"""
  65. response = self.client.get(self.link)
  66. self.assertContains(response, "your password has been changed")
  67. self.reload_user()
  68. self.assertFalse(self.user.check_password(self.USER_PASSWORD))
  69. self.assertTrue(self.user.check_password("n3wp4ssword"))