74 lines
3.0 KiB
Markdown
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.
|