test_registration.py 2.0 KB

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