From 7526c15af777ab7d31dc69bb5aefc91240dca473 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Tue, 8 Nov 2022 08:29:03 +0300 Subject: Tests: Separate *ALL* unit test fixtures from auth-specific ones * tests/unit/auth/conftest.py: add fixtures specific to auth * tests/unit/auth/test_migration_create_users_table.py: import from new fixtures module * tests/unit/conftest.py: remove auth-specific fixtures from *ALL* unit tests fixture module. --- tests/unit/auth/conftest.py | 51 ++++++++++++++++++++++ .../unit/auth/test_migration_create_users_table.py | 2 +- tests/unit/conftest.py | 35 --------------- 3 files changed, 52 insertions(+), 36 deletions(-) create mode 100644 tests/unit/auth/conftest.py diff --git a/tests/unit/auth/conftest.py b/tests/unit/auth/conftest.py new file mode 100644 index 0000000..faecd32 --- /dev/null +++ b/tests/unit/auth/conftest.py @@ -0,0 +1,51 @@ +"""Fixtures for auth tests.""" +import sqlite3 +from pathlib import Path +from typing import Union +from contextlib import closing + +import pytest +from yoyo import get_backend, read_migrations +from yoyo.migrations import Migration, MigrationList + +from gn3.migrations import apply_migrations, rollback_migrations + +@pytest.fixture(scope="session") +def auth_testdb_path(test_app_config): # pylint: disable=redefined-outer-name + """Get the test application's auth database file""" + return test_app_config["AUTH_DB"] + +@pytest.fixture(scope="session") +def auth_migrations_dir(test_app_config): # pylint: disable=redefined-outer-name + """Get the test application's auth database file""" + return test_app_config["AUTH_MIGRATIONS"] + +def apply_single_migration(db_uri: Union[Path, str], migration: Migration): + """Utility to apply a single migration""" + apply_migrations(get_backend(f"sqlite:///{db_uri}"), MigrationList([migration])) + +def rollback_single_migration(db_uri: Union[Path, str], migration: Migration): + """Utility to rollback a single migration""" + rollback_migrations(get_backend(f"sqlite:///{db_uri}"), MigrationList([migration])) + +@pytest.fixture(scope="session") +def backend(auth_testdb_path): # pylint: disable=redefined-outer-name + return get_backend(f"sqlite:///{auth_testdb_path}") + +@pytest.fixture(scope="session") +def all_migrations(auth_migrations_dir): # pylint: disable=redefined-outer-name + return read_migrations(auth_migrations_dir) + +@pytest.fixture(scope="function") +def conn_after_auth_migrations(backend, auth_testdb_path, all_migrations): # pylint: disable=redefined-outer-name + """Run all migrations and return a connection to the database after""" + apply_migrations(backend, all_migrations) + with closing(sqlite3.connect(auth_testdb_path)) as conn: + yield conn + + rollback_migrations(backend, all_migrations) + +def migrations_up_to(migration, migrations_dir): + migrations = read_migrations(migrations_dir) + index = [mig.path for mig in migrations].index(migration) + return MigrationList(migrations[0:index]) diff --git a/tests/unit/auth/test_migration_create_users_table.py b/tests/unit/auth/test_migration_create_users_table.py index c97c050..74f2020 100644 --- a/tests/unit/auth/test_migration_create_users_table.py +++ b/tests/unit/auth/test_migration_create_users_table.py @@ -5,7 +5,7 @@ import pytest import sqlite3 from gn3.migrations import get_migration, apply_migrations, rollback_migrations -from tests.unit.conftest import ( +from tests.unit.auth.conftest import ( apply_single_migration, rollback_single_migration) migration_path = "migrations/auth/20221103_01_js9ub-initialise-the-auth-entic-oris-ation-database.py" diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py index dd6abb4..a2b562e 100644 --- a/tests/unit/conftest.py +++ b/tests/unit/conftest.py @@ -1,17 +1,11 @@ """Fixtures for unit tests.""" -import sqlite3 -from typing import Union from pathlib import Path from datetime import datetime -from contextlib import closing from tempfile import TemporaryDirectory import pytest -from yoyo import get_backend, read_migrations -from yoyo.migrations import Migration, MigrationList from gn3.app import create_app -from gn3.migrations import apply_migrations, rollback_migrations @pytest.fixture(scope="session") def client(): @@ -31,32 +25,3 @@ def client(): def test_app_config(client): # pylint: disable=redefined-outer-name """Return the test application's configuration object""" return client.application.config - -@pytest.fixture(scope="session") -def auth_testdb_path(test_app_config): # pylint: disable=redefined-outer-name - """Get the test application's auth database file""" - return test_app_config["AUTH_DB"] - -@pytest.fixture(scope="session") -def auth_migrations_dir(test_app_config): # pylint: disable=redefined-outer-name - """Get the test application's auth database file""" - return test_app_config["AUTH_MIGRATIONS"] - -def apply_single_migration(db_uri: Union[Path, str], migration: Migration): - """Utility to apply a single migration""" - apply_migrations(get_backend(f"sqlite:///{db_uri}"), MigrationList([migration])) - -def rollback_single_migration(db_uri: Union[Path, str], migration: Migration): - """Utility to rollback a single migration""" - rollback_migrations(get_backend(f"sqlite:///{db_uri}"), MigrationList([migration])) - -@pytest.fixture(scope="function") -def conn_after_auth_migrations(auth_testdb_path, auth_migrations_dir): - """Run all migrations and return a connection to the database after""" - backend = get_backend(f"sqlite:///{auth_testdb_path}") - migrations = read_migrations(auth_migrations_dir) - apply_migrations(backend, migrations) - with closing(sqlite3.connect(auth_testdb_path)) as conn: - yield conn - - rollback_migrations(backend, migrations) -- cgit v1.2.3