From 32e3fe04a2f9b1a0d30e20da68d6f6c36cfe5282 Mon Sep 17 00:00:00 2001 From: Campbell Alden Date: Thu, 3 Sep 2026 22:58:29 +0900 Subject: [PATCH] Set up an extremely lightweight set of tests for the user infra implementation --- pytest.ini | 4 ++++ setup.py | 3 +++ shell.nix | 1 + src/infra/db_test.py | 8 ++++++++ src/infra/users_test.py | 31 +++++++++++++++++++++++++++++++ 5 files changed, 47 insertions(+) create mode 100644 pytest.ini create mode 100644 src/infra/db_test.py create mode 100644 src/infra/users_test.py diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..fb33402 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,4 @@ +[pytest] +testpaths = src +python_files = *_test.py +addopts = -ra -q diff --git a/setup.py b/setup.py index d244a90..2b6aaed 100644 --- a/setup.py +++ b/setup.py @@ -6,5 +6,8 @@ setup( packages=find_packages(), include_package_data=True, package_data={'src': ['templates/**/*.html', 'templates/**/*.txt']}, + exclude_package_data={ + '': ['*_test.py'], + }, scripts=['./src/main.py'], ) diff --git a/shell.nix b/shell.nix index 585c993..e5e7b1b 100644 --- a/shell.nix +++ b/shell.nix @@ -20,6 +20,7 @@ mkShell { python313Packages.ruff python313Packages.python-lsp-server python313Packages.jedi-language-server + python313Packages.pytest ty ]; } diff --git a/src/infra/db_test.py b/src/infra/db_test.py new file mode 100644 index 0000000..e362239 --- /dev/null +++ b/src/infra/db_test.py @@ -0,0 +1,8 @@ +from src.infra import Base +from sqlalchemy import Engine, create_engine + + +def mock_db() -> Engine: + engine = create_engine('sqlite:///:memory:', echo=True) + Base.metadata.create_all(engine) + return engine diff --git a/src/infra/users_test.py b/src/infra/users_test.py new file mode 100644 index 0000000..119c135 --- /dev/null +++ b/src/infra/users_test.py @@ -0,0 +1,31 @@ +from src.utils.secret import SecretBox +from src.services.users.data import UserDTO, User +from src.services.users.repo import UserRepo +from src.infra.users import UserRepoImpl +from src.infra.db_test import mock_db +import pytest + +DB = mock_db() + + +@pytest.fixture +def db(): + return DB + + +@pytest.fixture +def repo(db): + return UserRepoImpl(db) + + +@pytest.fixture +def users(repo: UserRepo): + return [ + repo.create(UserDTO('example@example.com', SecretBox('hunter1')), None), + repo.create(UserDTO('example2@example.com', SecretBox('hunter2')), None), + ] + + +def test_getting_a_user_by_email(users: list[User], repo: UserRepo): + assert repo.get_user_by_email('example@example.com') == users[0] + assert repo.get_user_by_email('fred@example.com') is None