feat: SQL migration for evolution tables and variant/image_url columns (#69) #84
@ -8,7 +8,41 @@ responsible for binding models to its own in-memory database.
|
||||
|
||||
import os
|
||||
|
||||
import psycopg2
|
||||
import pytest
|
||||
|
||||
os.environ["DATABASE_TYPE"] = "postgresql"
|
||||
# Provide dummy credentials so PooledPostgresqlDatabase can be instantiated
|
||||
# without raising a configuration error (it will not actually be used).
|
||||
os.environ.setdefault("POSTGRES_PASSWORD", "test-dummy")
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def pg_conn():
|
||||
"""Live PostgreSQL connection for integration tests.
|
||||
|
||||
Requires POSTGRES_HOST to be set; runs the migration before yielding the
|
||||
connection so that all integration tests start from a migrated schema.
|
||||
The connection is rolled back and closed at session teardown so that the
|
||||
migration is not persisted to the dev database between test runs.
|
||||
"""
|
||||
conn = psycopg2.connect(
|
||||
host=os.environ["POSTGRES_HOST"],
|
||||
dbname=os.environ.get("POSTGRES_DB", "pd_master"),
|
||||
user=os.environ.get("POSTGRES_USER", "pd_admin"),
|
||||
password=os.environ["POSTGRES_PASSWORD"],
|
||||
port=int(os.environ.get("POSTGRES_PORT", "5432")),
|
||||
)
|
||||
conn.autocommit = False
|
||||
migration_path = os.path.join(
|
||||
|
|
||||
os.path.dirname(__file__),
|
||||
"..",
|
||||
"migrations",
|
||||
"2026-03-12_add_evolution_tables.sql",
|
||||
)
|
||||
with open(migration_path) as fh:
|
||||
conn.cursor().execute(fh.read())
|
||||
conn.commit()
|
||||
yield conn
|
||||
conn.rollback()
|
||||
conn.close()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user
The migration SQL contains
BEGIN; ... COMMIT;. When this fixture callsconn.cursor().execute(fh.read())and thenconn.commit(), theCOMMITinside the SQL fires during execute and permanently durably commits the DDL. Theconn.rollback()at teardown has no effect on the already-committed schema changes.The docstring promise — "The connection is rolled back and closed at session teardown so that the migration is not persisted to the dev database between test runs" — is incorrect as written.
Fix options:
BEGIN;/COMMIT;from the SQL before executing, so the transaction is under the fixture's control.