"""Phase 6 verification for the URL-keyed engine and session-factory registries. Covers [MED-04]: replacing `functools.cache` with an explicit registry so that disposing one database's engine cannot silently tear down every other one. """ import pytest from transcription.db.engine import dispose_engine from transcription.db.engine import get_engine from transcription.db.session import dispose_session_factory from transcription.db.session import get_session_factory URL_A = "sqlite+aiosqlite:///./.registry-test-a.db" URL_B = "sqlite+aiosqlite:///./.registry-test-b.db" @pytest.mark.asyncio async def test_distinct_urls_produce_distinct_engines_and_eviction_is_targeted(): engine_a = get_engine(URL_A) engine_b = get_engine(URL_B) assert engine_a is not engine_b assert get_engine(URL_A) is engine_a await dispose_engine(URL_A) assert get_engine(URL_B) is engine_b, "disposing one URL must not evict the others" assert get_engine(URL_A) is not engine_a, "the disposed URL must be rebuilt on demand" await dispose_engine(URL_A) await dispose_engine(URL_B) @pytest.mark.asyncio async def test_disposing_an_unregistered_url_is_a_noop(): await dispose_engine("sqlite+aiosqlite:///./.registry-test-never-created.db") @pytest.mark.asyncio async def test_session_factory_eviction_is_targeted(): factory_a = get_session_factory(URL_A) factory_b = get_session_factory(URL_B) assert factory_a is not factory_b await dispose_session_factory(URL_A) assert get_session_factory(URL_B) is factory_b assert get_session_factory(URL_A) is not factory_a await dispose_session_factory(URL_A) await dispose_session_factory(URL_B)