import pytest from amanuensis.db import * import amanuensis.backend.lexicon as lexiq import amanuensis.backend.user as userq from amanuensis.errors import ArgumentError from .test_db import db @pytest.fixture def db(): db = DbContext('sqlite:///:memory:', debug=True) db.create_all() return db def test_create_user(db): """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