test_credentialchange.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from django.contrib.auth import get_user_model
  2. from django.test import TestCase
  3. from misago.users import credentialchange
  4. UserModel = get_user_model()
  5. class MockRequest(object):
  6. def __init__(self, user):
  7. self.session = {}
  8. self.user = user
  9. class CredentialChangeTests(TestCase):
  10. def setUp(self):
  11. self.user = UserModel.objects.create_user("Bob", "bob@bob.com", "pass123")
  12. def test_valid_token_generation(self):
  13. """credentialchange module allows for store and read of change token"""
  14. request = MockRequest(self.user)
  15. token = credentialchange.store_new_credential(
  16. request, "email", "newbob@test.com"
  17. )
  18. email = credentialchange.read_new_credential(request, "email", token)
  19. self.assertEqual(email, "newbob@test.com")
  20. def test_email_change_invalidated_token(self):
  21. """token is invalidated by email change"""
  22. request = MockRequest(self.user)
  23. token = credentialchange.store_new_credential(
  24. request, "email", "newbob@test.com"
  25. )
  26. self.user.set_email("egebege@test.com")
  27. self.user.save()
  28. email = credentialchange.read_new_credential(request, "email", token)
  29. self.assertIsNone(email)
  30. def test_password_change_invalidated_token(self):
  31. """token is invalidated by password change"""
  32. request = MockRequest(self.user)
  33. token = credentialchange.store_new_credential(
  34. request, "email", "newbob@test.com"
  35. )
  36. self.user.set_password("Egebeg!123")
  37. self.user.save()
  38. email = credentialchange.read_new_credential(request, "email", token)
  39. self.assertIsNone(email)
  40. def test_invalid_token_is_handled(self):
  41. """there are no explosions in invalid tokens handling"""
  42. request = MockRequest(self.user)
  43. token = credentialchange.store_new_credential(
  44. request, "email", "newbob@test.com"
  45. )
  46. email = credentialchange.read_new_credential(request, "em4il", token)
  47. self.assertIsNone(email)