test_validators.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import pytest
  2. from flaskbb.auth.services.registration import (EmailUniquenessValidator,
  3. UsernameRequirements,
  4. UsernameUniquenessValidator,
  5. UsernameValidator)
  6. from flaskbb.core.auth.registration import (UserRegistrationError,
  7. UserRegistrationInfo)
  8. from flaskbb.user.models import User
  9. def test_raises_if_username_too_short():
  10. requirements = UsernameRequirements(
  11. min=4, max=100, blacklist=set())
  12. validator = UsernameValidator(requirements)
  13. registration = UserRegistrationInfo(
  14. username='no', password='no', email='no@no.no', group=4, language='no')
  15. with pytest.raises(UserRegistrationError) as excinfo:
  16. validator(registration)
  17. assert excinfo.value.attribute == 'username'
  18. assert 'must be between' in excinfo.value.reason
  19. def test_raises_if_username_too_long():
  20. requirements = UsernameRequirements(
  21. min=0, max=1, blacklist=set())
  22. validator = UsernameValidator(requirements)
  23. registration = UserRegistrationInfo(
  24. username='no', password='no', email='no@no.no', group=4, language='no')
  25. with pytest.raises(UserRegistrationError) as excinfo:
  26. validator(registration)
  27. assert excinfo.value.attribute == 'username'
  28. assert 'must be between' in excinfo.value.reason
  29. def test_raises_if_username_in_blacklist():
  30. requirements = UsernameRequirements(
  31. min=1, max=100, blacklist=set(['no']))
  32. validator = UsernameValidator(requirements)
  33. registration = UserRegistrationInfo(
  34. username='no', password='no', email='no@no.no', group=4, language='no')
  35. with pytest.raises(UserRegistrationError) as excinfo:
  36. validator(registration)
  37. assert excinfo.value.attribute == 'username'
  38. assert 'forbidden username' in excinfo.value.reason
  39. # fred's back. :(
  40. def test_raises_if_user_already_registered(Fred):
  41. validator = UsernameUniquenessValidator(User)
  42. registration = UserRegistrationInfo(
  43. username='fred',
  44. email='fred@fred.fred',
  45. language='fred',
  46. group=4,
  47. password='fred')
  48. with pytest.raises(UserRegistrationError) as excinfo:
  49. validator(registration)
  50. assert excinfo.value.attribute == 'username'
  51. assert 'already registered' in excinfo.value.reason
  52. def test_raises_if_user_email_already_registered(Fred):
  53. validator = EmailUniquenessValidator(User)
  54. registration = UserRegistrationInfo(
  55. username='fred',
  56. email='fred@fred.fred',
  57. language='fred',
  58. group=4,
  59. password='fred')
  60. with pytest.raises(UserRegistrationError) as excinfo:
  61. validator(registration)
  62. assert excinfo.value.attribute == 'email'
  63. assert 'already registered' in excinfo.value.reason