test_registration.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import pytest
  2. from flaskbb.core.auth import registration
  3. from flaskbb.core.exceptions import StopValidation, ValidationError
  4. from flaskbb.core.user.repo import UserRepository
  5. class RaisingValidator(registration.UserValidator):
  6. def validate(self, user_info):
  7. raise ValidationError(
  8. 'test', 'just a little whoopsie-diddle'
  9. )
  10. def test_doesnt_register_user_if_validator_fails_with_ValidationError(
  11. mocker
  12. ):
  13. repo = mocker.Mock(UserRepository)
  14. service = registration.RegistrationService([RaisingValidator()], repo)
  15. with pytest.raises(StopValidation):
  16. service.register(
  17. registration.UserRegistrationInfo(
  18. username='fred',
  19. password='lol',
  20. email='fred@fred.fred',
  21. language='fredspeak',
  22. group=4
  23. )
  24. )
  25. repo.add.assert_not_called()
  26. def test_gathers_up_all_errors_during_registration(mocker):
  27. repo = mocker.Mock(UserRepository)
  28. service = registration.RegistrationService([
  29. RaisingValidator(), RaisingValidator()
  30. ], repo)
  31. with pytest.raises(StopValidation) as excinfo:
  32. service.register(
  33. registration.UserRegistrationInfo(
  34. username='fred',
  35. password='lol',
  36. email='fred@fred.fred',
  37. language='fredspeak',
  38. group=4
  39. )
  40. )
  41. repo.add.assert_not_called()
  42. assert len(excinfo.value.reasons) == 2
  43. assert all(('test', 'just a little whoopsie-diddle') == r
  44. for r in excinfo.value.reasons)
  45. def test_registers_user_if_no_errors_occurs(mocker):
  46. repo = mocker.Mock(UserRepository)
  47. service = registration.RegistrationService([], repo)
  48. user_info = registration.UserRegistrationInfo(
  49. username='fred',
  50. password='lol',
  51. email='fred@fred.fred',
  52. language='fredspeak',
  53. group=4
  54. )
  55. service.register(user_info)
  56. repo.add.assert_called_with(user_info)