From c0d353077b3015279ab43c55ecf6e9fabdb4c0f9 Mon Sep 17 00:00:00 2001 From: luxferre Date: Mon, 1 Jun 2026 15:25:50 +0100 Subject: [PATCH] test: db setup fix Previous set up seemed to work but the db was persisting between tests, allowing for contamination. --- test/conftest.py | 69 ++++++++++++++++++------------------------------ 1 file changed, 26 insertions(+), 43 deletions(-) diff --git a/test/conftest.py b/test/conftest.py index b6fde60..e29e131 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -20,13 +20,14 @@ SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) @pytest.fixture() def db_session(): + Base.metadata.drop_all(bind=engine) + Base.metadata.create_all(bind=engine) db = SessionLocal() try: + _seed(db) # extracted seeding logic into a plain function yield db - except: - db.rollback() - raise finally: + db.rollback() db.close() @@ -43,43 +44,25 @@ async def client(db_session) -> AsyncGenerator[AsyncClient, None]: app.dependency_overrides.clear() -@pytest.fixture(scope="session") -def setup_database(): - Base.metadata.create_all(bind=engine) - yield - Base.metadata.drop_all(bind=engine) - - -@pytest.fixture(scope="session") -def seed_db(): - db = SessionLocal() - try: - db.add(User(email="admin@test.com", first_name="Admin", last_name="Test", oidc_id="abcd-efgh-ijkl-mnop")) - db.add(Contact(org_id=1)) - db.add(Contact(org_id=1)) - db.add(Contact(org_id=1)) - db.flush() - db.add(Org(name="Test Org", root_user_id=1, billing_contact_id=1, owner_contact_id=1, security_contact_id=1, - status="approved", intake_questionnaire="{}")) - db.add(Service(name="Test Service", api_key="123456789")) - db.add(Permission(service_id=1, resource="test_resource", action="read")) - db.add(Group(name="Test Group")) - db.flush() - group_model = db.get(Group, 1) - perm_model = db.get(Permission, 1) - group_model.permission_rel.append(perm_model) - user_model = db.get(User, 1) - org_model = db.get(Org, 1) - org_model.user_rel.append(user_model) - db.flush() - group_model.user_rel.append(user_model) - db.commit() - yield db - finally: - db.close() - - -@pytest.fixture(scope="session", autouse=True) -def seed_data(setup_database, seed_db): - yield - \ No newline at end of file +def _seed(db): + db.add(User(email="admin@test.com", first_name="Admin", last_name="Test", oidc_id="abcd-efgh-ijkl-mnop")) + db.add(Contact(org_id=1, email="billing@test.org", phonenumber="07521539927")) + db.add(Contact(org_id=1, email="owner@test.org", phonenumber="07521539927")) + db.add(Contact(org_id=1, email="security@test.org", phonenumber="07521539927")) + db.flush() + db.add(Org(name="Test Org", root_user_id=1, billing_contact_id=1, owner_contact_id=2, security_contact_id=3, + status="approved", intake_questionnaire={"question_two": "answer two"})) + db.add(Service(name="Test Service", api_key="123456789")) + db.add(Permission(service_id=1, resource="test_resource", action="read")) + db.add(Group(name="Test Group")) + db.flush() + group_model = db.get(Group, 1) + perm_model = db.get(Permission, 1) + group_model.permission_rel.append(perm_model) + user_model = db.get(User, 1) + org_model = db.get(Org, 1) + org_model.user_rel.append(user_model) + org_model.group_rel.append(group_model) + db.flush() + group_model.user_rel.append(user_model) + db.commit()