4.9 KiB
4.9 KiB
| inputDocuments | bmadSkill | bmadWorkflow | |||
|---|---|---|---|---|---|
|
QA Agent (Quinn) — /bmad-agent-bmm-qa → [QE] Generate E2E Tests | _bmad/bmm/workflows/qa-generate-e2e-tests/workflow.yaml |
QA E2E Test-Manifest — CouncilOS
Autor: Quinn (🧪 BMAD QA Agent) Datum: 2026-03-12
1. Bestehende Unit-Tests (Backend)
| Datei | Beschreibung | Status |
|---|---|---|
backend/tests/test_state.py |
CouncilState-Reducer, operator.add | ✅ |
backend/tests/test_routing.py |
Routing-Logik (score < 8, ≥ 8, safety valve) | ✅ |
backend/tests/test_api.py |
Health-Check, Run-Endpunkte (httpx AsyncClient) | ✅ |
backend/tests/test_blueprint_api.py |
Blueprint CRUD REST-API | ✅ |
backend/tests/test_blueprint_service.py |
Blueprint-Service-Layer | ✅ |
backend/tests/test_dynamic_graph_builder.py |
Dynamischer Graph-Builder | ✅ |
backend/tests/test_god_mode.py |
Human-in-the-Loop (approve/reject/modify) | ✅ |
backend/tests/test_run_service.py |
Run-History-Service | ✅ |
backend/tests/test_run_store.py |
In-Memory-Run-Store | ✅ |
backend/tests/test_tools.py |
Web-Search und PDF-Reader (gemockt) | ✅ |
2. Frontend-Unit-Tests
| Datei | Beschreibung | Status |
|---|---|---|
frontend/app/__tests__/ |
Vitest-Tests für React-Komponenten | ✅ |
3. E2E-Test-Szenarien (für Playwright / Cypress — Post-MVP)
TC-E2E-001: Council erstellen und ausführen (Happy Path)
Voraussetzung: Backend läuft auf Port 8000, Frontend auf 3000
Schritte:
- Öffne
http://localhost:3000 - Wechsel zum Tab „Rat-Architekt"
- Ziehe einen Agent-Node auf den Canvas
- Setze Name: „Test Master", System-Prompt: „Du bist ein Test-Agent"
- Ziehe einen zweiten Node (Critic)
- Verbinde die Nodes mit einer linearen Edge
- Klicke „Speichern" → Bestätigungsmeldung erscheint
- Wechsel zum Tab „Konferenzzimmer"
- Gib Prompt: „Schreibe einen kurzen Test-Text" ein
- Wähle „Auto-Pilot"
- Klicke „Starten"
- Beobachte: Erster Node pulsiert gelb
- Nach Abschluss: Finaler Text erscheint im Output-Bereich
Erwartetes Ergebnis: Run erreicht status=completed, final_draft nicht leer
TC-E2E-002: God Mode — Approve
Schritte:
- Wähle „God Mode" im Toggle
- Starte Run mit beliebigem Prompt
- Nach erstem Node: Overlay erscheint
- Klicke „Genehmigen"
- Nächster Node startet (pulsiert)
- Bis Abschluss: alle Nodes genehmigen
Erwartetes Ergebnis: Run erreicht status=completed
TC-E2E-003: God Mode — Reject
Schritte:
- Starte Run in God Mode
- Overlay erscheint
- Klicke „Ablehnen"
Erwartetes Ergebnis: Run status=failed, Fehlermeldung „Rejected by user" sichtbar
TC-E2E-004: PDF-Upload und Verwendung
Schritte:
- Öffne
POST /api/councils/upload-pdfmit Test-PDF - Response enthält
chunks_ingested > 0 - Erstelle Council mit Agent, der
pdf_reader=truehat - Starte Run mit Thema aus dem PDF
- Agent-Output referenziert PDF-Inhalte
Erwartetes Ergebnis: Chunks werden korrekt eingelesen und sind abrufbar
TC-E2E-005: WebSocket-Events in korrekter Reihenfolge
Schritte:
- Verbinde mit
WS /ws/council/{run_id} - Starte Run
- Zeichne alle empfangenen Events auf
Erwartetes Ergebnis:
{"node": "master_agent", "status": "running"}
{"node": "master_agent", "status": "completed"}
{"node": "critic_agent", "status": "running"}
{"node": "critic_agent", "status": "completed"}
... (ggf. Schleife)
{"node": "writer_agent", "status": "running"}
{"node": "writer_agent", "status": "completed"}
{"status": "done"}
4. Test-Mocking-Konventionen
# Standard-Mock-Pattern für alle Agent-Tests (CLAUDE.md-Anforderung)
from unittest.mock import patch, MagicMock
@patch("agents.master_agent.ChatAnthropic")
def test_master_agent_node_appends_to_messages(mock_llm):
mock_llm.return_value.invoke.return_value = MagicMock(content="Draft v2")
state = {...}
result = master_agent_node(state)
assert result["current_draft"] == "Draft v2"
Regeln (aus CLAUDE.md):
- ❌ Niemals echte LLM-API-Aufrufe in Tests
- ❌ Kein shared Test-Datenbankzustand (Transactions rollback)
- ❌ Kein Snapshot-Test für React Flow Canvas
- ✅ Immer beide Seiten der Threshold-Grenze testen (7.9 und 8.0)
5. Coverage-Ziele
| Modul | Ziel-Coverage |
|---|---|
backend/state.py |
≥ 90 % |
backend/services/graph_builder.py |
≥ 90 % |
backend/services/dynamic_graph_builder.py |
≥ 85 % |
backend/agents/ |
≥ 80 % |
backend/api/ |
≥ 75 % |
backend/tools/ |
≥ 75 % |