fix: use raw SQL for E2E test teardown to avoid FK violations
All checks were successful
CI / test (push) Successful in 2m2s
CI / release (push) Successful in 34s
CI / docker (push) Successful in 59s

The ORM-based cleanup couldn't see devices created by the NiceGUI
app's session, so the user delete hit a FK constraint. Raw SQL
DELETE in correct order (children first) works reliably.
This commit is contained in:
Stefano Bertelli 2026-03-30 22:34:06 -05:00
parent e59ba0dfe5
commit 3747b963cb

View file

@ -5,12 +5,7 @@ from sqlmodel import select
from wiregui.auth.passwords import hash_password
from wiregui.db import async_session
from wiregui.models.api_token import ApiToken
from wiregui.models.configuration import Configuration
from wiregui.models.device import Device
from wiregui.models.mfa_method import MFAMethod
from wiregui.models.oidc_connection import OIDCConnection
from wiregui.models.rule import Rule
from wiregui.models.user import User
pytest_plugins = ["nicegui.testing.user_plugin"]
@ -19,17 +14,12 @@ FAKE_SERVER_KEY = "SFake0ServerPubKey0000000000000000000000000w="
TEST_EMAIL = "e2e-test@example.com"
TEST_PASSWORD = "testpass123"
RELATED_MODELS = (Device, Rule, MFAMethod, ApiToken, OIDCConnection)
async def _delete_user_cascade(session, user_id):
"""Delete a user and all related objects."""
for model in RELATED_MODELS:
for obj in (await session.execute(select(model).where(model.user_id == user_id))).scalars().all():
await session.delete(obj)
u = await session.get(User, user_id)
if u:
await session.delete(u)
"""Delete a user and all related objects via raw SQL to avoid stale ORM cache issues."""
from sqlalchemy import text
for table in ("devices", "rules", "mfa_methods", "api_tokens", "oidc_connections"):
await session.execute(text(f"DELETE FROM {table} WHERE user_id = :uid"), {"uid": user_id}) # noqa: S608
await session.execute(text("DELETE FROM users WHERE id = :uid"), {"uid": user_id})
@pytest.fixture