Komplette Test-Infrastruktur: Vitest + Playwright + GitHub Actions
Frames hat ab sofort eine durchgehende automatisierte Test-Pipeline. Jeder Push und jeder Pull-Request gegen main löst auf GitHub Actions drei Jobs aus:
- Unit-Tests (Vitest) — pure Funktionen ohne DB: Discount-Code-Validation, Marketing-Trigger-Resolver (2. Sonntag im Mai, letzter Freitag im November, Anniversary-Toleranz), Reminder-Intervalle, XRechnung-XML-Generator (inkl. §19-Kleinunternehmer-Pfad), Cron-Secret-Validation (Bearer + Query, constant-time-compare).
- Integration-Tests (Vitest gegen Postgres-Container) — Migration-Runner läuft alle Migrations sauber durch + prüft dass keine Changelog-Entries eine ungültige Category haben (das hätte den heutigen
category=change-Bug verhindert). Gallery-IDOR-Defense gegen die echte DB. - E2E-Smoke (Playwright) — Dev-Server startet, Landingpage liefert HTML, Login-Route ist erreichbar.
Lokal nutzbar. Mit npm test läuft die Unit-Suite in unter einer Sekunde. npm run test:e2e startet Dev-Server + Playwright lokal. npm run test:all macht das volle Programm.
Coverage-Stand. 38 Unit-Tests passing, Integration-Tests hängen an einer Test-DB (TEST_DATABASE_URL), E2E-Smoke + zwei TODO-Stubs für Login und Gallery-Pick die in Phase 2 fertig werden (brauchen Mailer-Mock + Storage-Mock).
Was die Tests verhindern werden. Den heutigen Migration-Outage (category=change statt feature), IDOR-Lücken in requireOwnedGallery, kaputte Marketing-Trigger an Datumsgrenzen (Schaltjahr, DST), XML-Wohlgeformtheits-Brüche in XRechnung, Cron-Endpoints die ohne Auth callable wären.
Doku: docs/TESTING.md. CI-Workflow: .github/workflows/test.yml.