import pytest from amanuensis.db import DbContext import amanuensis.backend.user as userq from amanuensis.errors import ArgumentError def test_create_user(db: DbContext): """Test new user creation.""" kwargs = { "username": "username", "password": "password", "display_name": "User Name", "email": "user@example.com", "is_site_admin": False, } # Test length constraints with pytest.raises(ArgumentError): userq.create(db, **{**kwargs, "username": "me"}) with pytest.raises(ArgumentError): userq.create( db, **{**kwargs, "username": "the right honorable user-name, esquire"} ) # Test allowed characters with pytest.raises(ArgumentError): userq.create(db, **{**kwargs, "username": "user name"}) # No password with pytest.raises(ArgumentError): userq.create(db, **{**kwargs, "password": None}) # Valid creation works and populates fields new_user = userq.create(db, **kwargs) assert new_user assert new_user.id is not None assert new_user.created is not None # No duplicate usernames with pytest.raises(ArgumentError): duplicate = userq.create(db, **kwargs) # Missing display name populates with username user2_kw = {**kwargs, "username": "user2", "display_name": None} user2 = userq.create(db, **user2_kw) assert user2.display_name is not None