From 6a9d405aea1f3162944861c1d5f1ffd08f459a2f Mon Sep 17 00:00:00 2001 From: Tim Van Baak Date: Thu, 27 May 2021 18:56:29 -0700 Subject: [PATCH] Split out model tests --- tests/test_db.py | 79 ------------------------------------------- tests/test_lexicon.py | 45 ++++++++++++++++++++++++ tests/test_user.py | 53 +++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 79 deletions(-) create mode 100644 tests/test_lexicon.py create mode 100644 tests/test_user.py diff --git a/tests/test_db.py b/tests/test_db.py index 68ae2c1..17460d7 100644 --- a/tests/test_db.py +++ b/tests/test_db.py @@ -1,12 +1,7 @@ -import datetime - import pytest from sqlalchemy import func from amanuensis.db import * -import amanuensis.backend.lexicon as lexiq -import amanuensis.backend.user as userq -from amanuensis.errors import ArgumentError @pytest.fixture @@ -27,77 +22,3 @@ def test_create(db): assert db.session.query(func.count(ArticleIndexRule.id)).scalar() == 0 assert db.session.query(func.count(ArticleContentRule.id)).scalar() == 0 assert db.session.query(func.count(Post.id)).scalar() == 0 - - -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_user(db, **{**kwargs, 'username': 'me'}) - with pytest.raises(ArgumentError): - userq.create_user(db, **{**kwargs, 'username': 'the right honorable user-name, esquire'}) - # Test allowed characters - with pytest.raises(ArgumentError): - userq.create_user(db, **{**kwargs, 'username': 'user name'}) - # No password - with pytest.raises(ArgumentError): - userq.create_user(db, **{**kwargs, 'password': None}) - - # Valid creation works and populates fields - new_user = userq.create_user(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_user(db, **kwargs) - - # Missing display name populates with username - user2_kw = {**kwargs, 'username': 'user2', 'display_name': None} - user2 = userq.create_user(db, **user2_kw) - assert user2.display_name is not None - - -def test_create_lexicon(db): - """Test new game creation.""" - kwargs = { - 'name': 'Test', - 'title': None, - 'prompt': 'A test Lexicon game' - } - # Test name constraints - with pytest.raises(ArgumentError): - lexiq.create_lexicon(db, **{**kwargs, 'name': None}) - with pytest.raises(ArgumentError): - lexiq.create_lexicon(db, **{**kwargs, 'name': ''}) - with pytest.raises(ArgumentError): - lexiq.create_lexicon(db, **{**kwargs, 'name': ' '}) - with pytest.raises(ArgumentError): - lexiq.create_lexicon(db, **{**kwargs, 'name': '..'}) - with pytest.raises(ArgumentError): - lexiq.create_lexicon(db, **{**kwargs, 'name': '\x00'}) - with pytest.raises(ArgumentError): - lexiq.create_lexicon(db, **{**kwargs, 'name': 'space in name'}) - - # Validate that creation populates fields, including timestamps - before = datetime.datetime.utcnow() - datetime.timedelta(seconds=1) - new_lexicon = lexiq.create_lexicon(db, **kwargs) - after = datetime.datetime.utcnow() + datetime.timedelta(seconds=1) - assert new_lexicon - assert new_lexicon.id is not None - assert new_lexicon.created is not None - assert before < new_lexicon.created - assert new_lexicon.created < after - - # No duplicate lexicon names - with pytest.raises(ArgumentError): - duplicate = lexiq.create_lexicon(db, **kwargs) diff --git a/tests/test_lexicon.py b/tests/test_lexicon.py new file mode 100644 index 0000000..15c46c5 --- /dev/null +++ b/tests/test_lexicon.py @@ -0,0 +1,45 @@ +import datetime + +import pytest + +from amanuensis.db import * +import amanuensis.backend.lexicon as lexiq +from amanuensis.errors import ArgumentError + +from .test_db import db + + +def test_create_lexicon(db): + """Test new game creation.""" + kwargs = { + 'name': 'Test', + 'title': None, + 'prompt': 'A test Lexicon game' + } + # Test name constraints + with pytest.raises(ArgumentError): + lexiq.create_lexicon(db, **{**kwargs, 'name': None}) + with pytest.raises(ArgumentError): + lexiq.create_lexicon(db, **{**kwargs, 'name': ''}) + with pytest.raises(ArgumentError): + lexiq.create_lexicon(db, **{**kwargs, 'name': ' '}) + with pytest.raises(ArgumentError): + lexiq.create_lexicon(db, **{**kwargs, 'name': '..'}) + with pytest.raises(ArgumentError): + lexiq.create_lexicon(db, **{**kwargs, 'name': '\x00'}) + with pytest.raises(ArgumentError): + lexiq.create_lexicon(db, **{**kwargs, 'name': 'space in name'}) + + # Validate that creation populates fields, including timestamps + before = datetime.datetime.utcnow() - datetime.timedelta(seconds=1) + new_lexicon = lexiq.create_lexicon(db, **kwargs) + after = datetime.datetime.utcnow() + datetime.timedelta(seconds=1) + assert new_lexicon + assert new_lexicon.id is not None + assert new_lexicon.created is not None + assert before < new_lexicon.created + assert new_lexicon.created < after + + # No duplicate lexicon names + with pytest.raises(ArgumentError): + duplicate = lexiq.create_lexicon(db, **kwargs) diff --git a/tests/test_user.py b/tests/test_user.py new file mode 100644 index 0000000..8c2b9c3 --- /dev/null +++ b/tests/test_user.py @@ -0,0 +1,53 @@ +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_user(db, **{**kwargs, 'username': 'me'}) + with pytest.raises(ArgumentError): + userq.create_user(db, **{**kwargs, 'username': 'the right honorable user-name, esquire'}) + # Test allowed characters + with pytest.raises(ArgumentError): + userq.create_user(db, **{**kwargs, 'username': 'user name'}) + # No password + with pytest.raises(ArgumentError): + userq.create_user(db, **{**kwargs, 'password': None}) + + # Valid creation works and populates fields + new_user = userq.create_user(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_user(db, **kwargs) + + # Missing display name populates with username + user2_kw = {**kwargs, 'username': 'user2', 'display_name': None} + user2 = userq.create_user(db, **user2_kw) + assert user2.display_name is not None