63 lines
3.1 KiB
Python
63 lines
3.1 KiB
Python
"""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</button>" 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) == []
|