"""Fehlende Lösch-Funktionen: Teams, Modelle und Endpunkte.""" import pytest from sqlalchemy import select from app.ai.models import Model, Provider, ProviderKey from app.identity.models import Team, User from app.workspaces.models import Workspace from helpers import create_workspace @pytest.fixture def admin(browser, people, db): with db.session() as session: session.get(User, people["anna"]).is_admin = True return browser("anna") def ids(db, model, **where): with db.session() as session: return list(session.scalars(select(model.id).filter_by(**where))) def test_team_loeschen_nur_ohne_workspaces(admin, browser, db, people): admin.post("/admin/teams", {"name": "Kurzlebig", "slug": "kurz"}) team = ids(db, Team, slug="kurz")[0] admin.post(f"/admin/teams/{team}/members", {"username": "anna"}) assert "Team löschen" in admin.get(f"/admin/teams/{team}").text assert browser("ben").post(f"/admin/teams/{team}/delete").status_code == 403 # Mit Workspace (auch im Papierkorb) nicht möglich anna = browser("anna") # neue Sitzung, damit die neue Teamzugehörigkeit gilt workspace_id = create_workspace(anna, team, "Weg") anna.post(f"/workspaces/{workspace_id}/delete", {"confirmation": "Weg"}) response = admin.post(f"/admin/teams/{team}/delete") assert response.status_code == 400 and "noch Workspaces" in response.text anna.post(f"/workspaces/{workspace_id}/purge") response = admin.post(f"/admin/teams/{team}/delete") assert response.status_code == 303 and response.headers["location"] == "/admin/teams" assert ids(db, Team, slug="kurz") == [] def test_modell_und_endpunkt_loeschen(admin, db, people, browser): admin.post("/admin/providers", {"name": "Test-Gateway", "base_url": "https://gateway.example/v1", "active": "1"}) provider = ids(db, Provider, name="Test-Gateway")[0] admin.post("/admin/keys", {"provider_id": provider, "value": "sk-test-1234567890", "team_id": ""}) admin.post("/admin/models", {"provider_id": provider, "name": "test-mini", "label": "Mini", "active": "1"}) model = ids(db, Model, name="test-mini")[0] workspace_id = create_workspace(admin, people["team_demo"]) admin.post(f"/workspaces/{workspace_id}/model", {"model_id": model}) # Endpunkt mit Modell: nicht löschbar response = admin.post(f"/admin/providers/{provider}/delete") assert response.status_code == 400 and "noch Modelle" in response.text # Standardmodell: nicht löschbar admin.post(f"/admin/models/{model}/default") assert admin.post(f"/admin/models/{model}/delete").status_code == 400 with db.session() as session: session.get(Model, model).is_default = False assert browser("ben").post(f"/admin/models/{model}/delete").status_code == 403 assert "Modell gelöscht." in admin.post(f"/admin/models/{model}/delete").text with db.session() as session: assert session.get(Workspace, workspace_id).model_id is None assert "Endpunkt mit seinen API-Keys gelöscht." in admin.post(f"/admin/providers/{provider}/delete").text assert ids(db, Provider, name="Test-Gateway") == [] and ids(db, ProviderKey, provider_id=provider) == []