Files
MABEA/backend/tests/test_found013_systemeinstellung.py
patrickandClaude Sonnet 5 e5dc80c3a6
CI / backend-tests (push) Successful in 3m14s
CI / frontend-build (push) Successful in 21s
feat(foundation): FOUND-013 optionales Error-Tracking (GlitchTip)
Zielserver-Entscheidung durch optionales Install-Script aufgelöst statt
festgeschrieben: deploy/glitchtip-install.sh installiert GlitchTip per
Docker Compose auf einem beliebigen, selbst gewählten Host - nichts
automatisch/ungefragt.

DSN wird zur Laufzeit über eine neue Admin-GUI-Seite ein-/ausschaltbar
(Systemeinstellung-Singleton, GET/PATCH /einstellungen/sentry), statt
nur per .env - kein Redeploy zum Umschalten nötig. Frontend lädt
@sentry/react nur dynamisch nach, wenn tatsächlich aktiv.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 19:35:47 +02:00

45 lines
1.5 KiB
Python

import pytest
from tests.conftest import auth_header, login
@pytest.mark.asyncio
async def test_sentry_einstellung_default_inaktiv(client):
response = await client.get("/api/v1/einstellungen/sentry")
assert response.status_code == 200
assert response.json() == {"sentry_dsn": None, "aktiv": False}
@pytest.mark.asyncio
async def test_sentry_einstellung_setzen_erfordert_admin(client, mitarbeiter_user):
token = await login(client, "mitarbeiter1")
response = await client.patch(
"/api/v1/einstellungen/sentry",
json={"sentry_dsn": "https://example@glitchtip.example.org/1"},
headers=auth_header(token),
)
assert response.status_code == 403
@pytest.mark.asyncio
async def test_admin_kann_sentry_dsn_setzen_und_wieder_leeren(client, admin_user):
token = await login(client, "admin1")
gesetzt = await client.patch(
"/api/v1/einstellungen/sentry",
json={"sentry_dsn": "https://example@glitchtip.example.org/1"},
headers=auth_header(token),
)
assert gesetzt.status_code == 200
assert gesetzt.json()["aktiv"] is True
assert gesetzt.json()["sentry_dsn"] == "https://example@glitchtip.example.org/1"
geholt = await client.get("/api/v1/einstellungen/sentry")
assert geholt.json()["aktiv"] is True
geleert = await client.patch(
"/api/v1/einstellungen/sentry", json={"sentry_dsn": None}, headers=auth_header(token)
)
assert geleert.status_code == 200
assert geleert.json() == {"sentry_dsn": None, "aktiv": False}