test_registration.py 2.0 KB

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