test_registration.py 2.0 KB

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