"""Auto report generation tests.""" from collections.abc import Generator from glob import glob from os import path from sqlite3 import Connection from typing import cast from unittest import mock import pytest from sqlalchemy import create_engine from sqlalchemy.orm import Session from auto_report_run.db.art_relations_model import Base as ArtRelationsBase from auto_report_run.db.collaborators_model import Base as CollaboratorsBase from auto_report_run.db.royalty_accounting_model import Base as RoyaltyAccountingBase @pytest.fixture(scope="session", autouse=True) def test_session() -> Generator[Session]: """Fixture for querying in-memory database populated with seed data.""" engine = create_engine("sqlite://") # Create tables CollaboratorsBase.metadata.create_all(engine) RoyaltyAccountingBase.metadata.create_all(engine) ArtRelationsBase.metadata.create_all(engine) # Seed tables with engine.connect() as conn: for sql_path in glob(path.join(path.dirname(__file__), "seed/*.sql")): with open(sql_path) as file: sql = file.read() cast(Connection, conn.connection.driver_connection).executescript(sql) # Create test session and mock the default session with it session = Session(engine) patcher_collaborators = mock.patch("auto_report_run.db.collaborators.session", session) patcher_collaborators.start() patcher_art_relations = mock.patch("auto_report_run.db.art_relations.session", session) patcher_art_relations.start() yield session patcher_collaborators.stop() patcher_art_relations.stop() session.close()