From 64169c4aeeb7acd13310c32dd368d502656eb45d Mon Sep 17 00:00:00 2001 From: NixReaper Date: Sat, 5 Sep 2026 02:21:43 -0500 Subject: [PATCH] Fix test factory Provider collision from ingestion-cascade tests tests/integration/factories.py:make_provider did a raw INSERT assuming no "tmdb" Provider row existed yet. That held as long as every test used the db_session fixture's isolated, rolled-back transaction -- but the new ingestion-cascade tests call get_or_create_ingestion_job, which really commits via session_scope()'s own connection, outside that per-test isolation. Once that ran, every later test using the raw-insert factory hit "duplicate key value violates unique constraint uq_providers_slug". Fixed by using the app's own get_or_create_provider in the factory instead of a bare insert, which is also just correct: provider slugs are unique in production too, so the test helper should behave the same way real ingestion code does rather than assume a pristine table. Co-Authored-By: Claude Sonnet 5 --- tests/integration/factories.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/integration/factories.py b/tests/integration/factories.py index 0138d15..cf874f5 100644 --- a/tests/integration/factories.py +++ b/tests/integration/factories.py @@ -14,13 +14,15 @@ from app.models.genre import Genre, MovieGenre from app.models.movie import Movie from app.models.person import Person from app.models.provider import Provider +from app.repositories.provider_repository import get_or_create_provider async def make_provider(session: AsyncSession, slug: str = "tmdb") -> Provider: - provider = Provider(slug=slug, name=slug.upper()) - session.add(provider) - await session.flush() - return provider + # get_or_create, not a raw insert: some tests (e.g. the ingestion + # cascade ones) create a real "tmdb" Provider row via session_scope()'s + # own connection, outside this test's rolled-back transaction, so it + # can already exist here regardless of db_session's per-test isolation. + return await get_or_create_provider(session, slug, slug.upper()) async def make_movie(