test_validators.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import pytest
  2. from flaskbb.auth.services.registration import (EmailUniquenessValidator,
  3. UsernameRequirements,
  4. UsernameUniquenessValidator,
  5. UsernameValidator)
  6. from flaskbb.core.auth.registration import UserRegistrationInfo
  7. from flaskbb.core.exceptions import ValidationError
  8. from flaskbb.user.models import User
  9. pytestmark = pytest.mark.usefixtures('default_settings')
  10. def test_raises_if_username_too_short():
  11. requirements = UsernameRequirements(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. )
  16. with pytest.raises(ValidationError) as excinfo:
  17. validator(registration)
  18. assert excinfo.value.attribute == 'username'
  19. assert 'must be between' in excinfo.value.reason
  20. def test_raises_if_username_too_long():
  21. requirements = UsernameRequirements(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. )
  26. with pytest.raises(ValidationError) as excinfo:
  27. validator(registration)
  28. assert excinfo.value.attribute == 'username'
  29. assert 'must be between' in excinfo.value.reason
  30. def test_raises_if_username_in_blacklist():
  31. requirements = UsernameRequirements(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. )
  36. with pytest.raises(ValidationError) as excinfo:
  37. validator(registration)
  38. assert excinfo.value.attribute == 'username'
  39. assert 'forbidden username' in excinfo.value.reason
  40. # fred's back. :(
  41. def test_raises_if_user_already_registered(Fred):
  42. validator = UsernameUniquenessValidator(User)
  43. registration = UserRegistrationInfo(
  44. username='fred',
  45. email='fred@fred.fred',
  46. language='fred',
  47. group=4,
  48. password='fred'
  49. )
  50. with pytest.raises(ValidationError) as excinfo:
  51. validator(registration)
  52. assert excinfo.value.attribute == 'username'
  53. assert 'already registered' in excinfo.value.reason
  54. def test_raises_if_user_email_already_registered(Fred):
  55. validator = EmailUniquenessValidator(User)
  56. registration = UserRegistrationInfo(
  57. username='fred',
  58. email='fred@fred.fred',
  59. language='fred',
  60. group=4,
  61. password='fred'
  62. )
  63. with pytest.raises(ValidationError) as excinfo:
  64. validator(registration)
  65. assert excinfo.value.attribute == 'email'
  66. assert 'already registered' in excinfo.value.reason