rebreak-monorepo/docs/superpowers/specs/2026-06-18-vitest-pipeline-integration-design.md

74 lines
3.0 KiB
Markdown

# Design: Vitest-Integration für Backend in Woodpecker-Pipeline
**Datum:** 2026-06-18
**Scope:** Backend-Tests mit Vitest in `.woodpecker.yml` integrieren
**Decision:** Variante A — minimal, Tests als Gate vor dem Build, keine Coverage
---
## Ziel
`pnpm test` im Backend (`backend/`) wird in die Woodpecker-CI-Pipeline eingebunden. Fehlschlagende Tests blockieren Build und Deploy auf Staging.
## Ausgangslage
- `backend/package.json` enthält bereits `vitest` und `@vitest/coverage-v8` als Dev-Dependencies.
- `backend/vitest.config.ts` ist konfiguriert (Node-Environment, `tests/**/*.test.ts`, Setup-File, Forks-Pool).
- Es existieren 24 Test-Dateien unter `backend/tests/`, davon scheitern aktuell **4 Dateien mit 12 Tests**.
- `apps/admin` hat kein Test-Setup — wird in diesem Design nicht berücksichtigt.
- `.woodpecker.yml` enthält bisher keine Test-Phase.
## Fehlerhafte Tests (vor der Integration zu reparieren)
| Datei | Problem |
|-------|---------|
| `tests/social/profile-counts.test.ts` | `usePrisma().domainSubmission.count` ist `undefined` — Mock unvollständig |
| `tests/voice/quota.test.ts` | Quota-Berechnung liefert falsche Werte (z. B. 270 statt 30, 300 statt 60) — vermutlich Datum/Reset-Logik oder falsche Mock-Daten |
## Architektur / Pipeline-Änderung
`.woodpecker.yml` bekommt einen neuen Schritt `test-backend`, der nach `install` und vor `build-backend` ausgeführt wird:
```yaml
test-backend:
image: *node_image
commands:
- *pnpm_setup
- cd backend && npx nitro prepare && pnpm test
depends_on: [install]
```
`npx nitro prepare` generiert `backend/.nitro/types/tsconfig.json`, das von `backend/tsconfig.json` referenziert wird. Ohne diesen Schritt failt `vitest` mit `Cannot find module './.nitro/types/tsconfig.json'`.
`build-backend` und `deploy-backend` erhalten `depends_on: [test-backend, install]` bzw. bleiben von `build-backend` abhängig.
## Abhängigkeiten
- Keine externen Services nötig (Tests laufen mit gemocktem Prisma).
- Keine neuen Secrets.
- `node:24-slim`-Image wird wie bei allen anderen Build-Steps verwendet.
## Fehlerbehandlung
- Wenn `pnpm test` mit Exit-Code ≠ 0 endet, failt der Pipeline-Schritt.
- Woodpecker führt daraufhin `build-backend`, `build-admin` und Deploy-Steps **nicht** aus.
- Pull Requests werden ebenfalls getestet, aber nicht deployed (bestehende `when`-Regeln bleiben erhalten).
## Nicht im Scope
- Kein Coverage-Reporting in der Pipeline.
- Kein Test-Setup für `apps/admin`.
- Keine parallele Ausführung der Tests (Aufwand lohnt sich bei ~500 ms Laufzeit nicht).
- Keine Änderung an der lokalen Entwickler-Experience außer der erwarteten grünen Test-Suite.
## Akzeptanzkriterien
1. `cd backend && pnpm test` läuft lokal erfolgreich durch (0 Fehler).
2. `.woodpecker.yml` enthält den `test-backend`-Schritt vor den Build-Steps.
3. Ein Push auf `main` mit fehlschlagenden Tests blockiert den Deploy.
4. Ein Push auf `main` mit grünen Tests führt wie bisher zu Build und Deploy.
## Offene Punkte
- Keine.