diff --git a/tests/conftest.py b/tests/conftest.py index 5bd4e67..6439552 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -51,12 +51,21 @@ def disable_rate_limiting(): @pytest.fixture def engine(): - """Sync in-memory SQLite engine for model unit tests.""" - eng = create_engine("sqlite:///:memory:") - from cartsnitch_api.models.user import User + """Sync in-memory SQLite engine for model unit tests. + + Strips PostgreSQL-specific server_default expressions so SQLite can + handle all column inserts without missing-function errors. + """ + eng = create_engine("sqlite:///:memory:") + + for table in Base.metadata.tables.values(): + for col in table.columns.values(): + sd = col.server_default + if sd is not None: + expr_str = str(sd.expression).lower() + if "gen_random_uuid" in expr_str or "gen_random_bytes" in expr_str: + col.server_default = None - col = User.__table__.columns["email_inbound_token"] - col.server_default = None Base.metadata.create_all(eng) yield eng eng.dispose() @@ -80,12 +89,16 @@ async def db_engine(): cursor.execute("PRAGMA foreign_keys=ON") cursor.close() - async with engine.begin() as conn: - from cartsnitch_api.models.user import User + for table in Base.metadata.tables.values(): + for col in table.columns.values(): + sd = col.server_default + if sd is not None: + expr_str = str(sd.expression).lower() + if "gen_random_uuid" in expr_str or "gen_random_bytes" in expr_str: + col.server_default = None - User.__table__.columns["email_inbound_token"].server_default = None + async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) - # Create Better-Auth tables (not managed by SQLAlchemy models) await conn.execute( text(""" CREATE TABLE IF NOT EXISTS sessions ( diff --git a/tests/test_encrypted_json.py b/tests/test_encrypted_json.py index 2ef3ccb..07cf44c 100644 --- a/tests/test_encrypted_json.py +++ b/tests/test_encrypted_json.py @@ -17,6 +17,15 @@ from cartsnitch_api.models.user import User, UserStoreAccount @pytest.fixture def engine(): eng = create_engine("sqlite:///:memory:") + + for table in Base.metadata.tables.values(): + for col in table.columns.values(): + sd = col.server_default + if sd is not None: + expr_str = str(sd.expression).lower() + if "gen_random_uuid" in expr_str or "gen_random_bytes" in expr_str: + col.server_default = None + Base.metadata.create_all(eng) yield eng eng.dispose()