Files

106 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: testing
description: Write und ausführen von Tests für Symfony Backend (PHPUnit) und React Frontend (Jest/Vitest inkl. E2E). Deckt Unit, Functional, Integration und E2E ab inklusive Mandantenisolation und OAuth-Flows.
license: MIT
compatibility: opencode
metadata:
audience: tester-backend-coder-frontend-coder
workflow: tdd-bdd-e2e
---
## Was ich mache
- Tests schreiben, ausführen und debuggen für das gesamte Projekt
- Test-Pyramide anwenden: Unit > Functional > Integration > E2E
- Mandantenisolation in jedem relevanten Test explizit prüfen
- OAuth-Vflows mocken und testen
- Code-Coverage messen und Lücken identifizieren
## Wann du mich nutzen solltest
- Neue Features implementiert wurden und abgedeckt werden müssen
- Tests fehlen oder veraltet sind
- Coverage-Analyse nötig ist
- CI/CD-Pipeline Tests validiert werden sollen
## Workflow
### 1. Projektstruktur prüfen
```bash
pwd # aktuellen Pfad verifizieren
ls api/phpunit.xml* api/composer.json # Symfony Test-Setup prüfen
ls frontend/package.json # Frontend Test-Setup prüfen
```
### 2. Bestehende Tests verstehen
- `api/tests/` durchsuchen für现有 Controller/Service-Tests
- `frontend/src/**/__tests__/` oder `frontend/src/**/*.test.{ts,tsx,js,jsx}` prüfen
- Tester-Agent-Konventionen aus `.opencode/agents/tester.md` beachten
### 3. Tests schreiben (Symfony PHPUnit)
```php
// api/tests/Unit/Entity/PersonTest.php
// api/tests/Functional/Controller/Api/VeranstaltungControllerTest.php
// api/tests/Integration/MandantIsolationTest.php
```
#### Wichtige Konventionen:
- `WebTestCase` für Functional Tests mit `/api/*` Routen
- Mandanten-Scope in jedem Request via Header oder Session setzen
- OAuth-Token mocken (kein echter Vonova-Flow in unit tests)
- Datenbank über `test` Environment und SQLite/In-Memory oder dedizierte Test-Datenbank
### 4. Tests schreiben (Frontend)
```bash
# Jest oder Vitest je nachdem was konfiguriert ist
npm test --prefix frontend
# bzw.
cd frontend && npm test
```
#### Wichtige Konventionen:
- Komponenten isoliert testen (React Testing Library bevorzugt)
- API-Calls mocken (MSW, axios-mock-adapter, etc.)
- State-Management (Redux/Zustand/etc.) separat testen
- E2E über Playwright/Cypress falls vorhanden
### 5. Mandantenisolation prüfen
Jeder Test der Daten betrifft muss validieren:
- Person A aus Mandant 1 sieht NICHT Daten von Mandant 2
- API-Filters `mandantId` korrekt scopen
- Repository-Traits/QueryBuilders filtern automatisch
### 6. Tests ausführen und Coverage prüfen
```bash
# Backend
cd api && php bin/phpunit --coverage-text --testsuite=Unit
cd api && php bin/phpunit --testsuite=functional
# Frontend
cd frontend && npm test -- --coverage
# E2E (falls konfiguriert)
cd frontend && npx playwright test
# oder
cd frontend && npx cypress run
```
### 7. DeepTrace analysieren (falls Testfehler auftreten)
Wenn Tests fehlschlagen oder unerwartetes Verhalten zeigen:
- `\\opencode\deeptrace` aufrufen um die vollständige Ausführungskette zu inspecten
- Stacktrace, Umgebungsvariablen, und abhängige Aufrufe prüfen
- Besonders nützlich bei:
- Mandantenisolation-Verletzungen (wer hat welche Daten gesehen?)
- OAuth-Token-Problemen (welcher Mock wurde nicht geladen?)
- Datenbank-State-Korruption in Integrationstests
### 8. Coverage-Ziel
- Kritische Pfade > 80%: Anwesenheitsprotokollierung, Mandantenisolation, OAuth-Flows
- Lücken dokumentieren und als TODOs erfassen
## Regeln
- Immer `pwd` vor Dateioperationen prüfen
- Test-Namen klar und deskriptiv: `testPersonCreationScopesToMandant()`
- Jeder Test testet genau eine Verhalten/Anforderung
- Arrange → Act → Assert Pattern durchhalten
- Keine echten externen Calls alles mocken (Vonova OAuth, externe APIs)
- Test-Daten sauber aufräumen ( tearDown / fixtures )