Files
triqura-ecd/tests/README.md
colinislit 38dd7c1f8a chore(strip): verwijder placeholder-pagina's dashboard en reports
Beide waren lege placeholders ('Epic 1 - Placeholder', 'Not designed yet').
Sidebar-items eruit; login-tests gebruiken /epd/agenda als voorbeeld van
een beveiligde route.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 22:49:40 +02:00

257 lines
9.7 KiB
Markdown

# Testhandleiding - Mini EPD Prototype
Deze handleiding is bedoeld voor iedereen die de EPD-applicatie wil testen — ook zonder technische achtergrond. Je kunt kiezen tussen twee testtools: **Playwright** en **Cypress**. Beide doen hetzelfde — een browser automatisch bedienen alsof er een echte gebruiker achter zit — maar de interface is net iets anders.
---
## Mappenstructuur
```
tests/
playwright/ # Playwright tests
.auth/ # Opgeslagen inlogsessie (automatisch aangemaakt)
fixtures/
ai-mocks.ts # Gesimuleerde AI-antwoorden
auth.setup.ts # Eenmalige inlog setup
login.spec.ts
agenda/agenda.spec.ts
cortex/
command-center.spec.ts
dagnotitie-flow.spec.ts
verpleegrapportage/overzicht.spec.ts
cypress/ # Cypress tests (zelfde flows, andere syntax)
support/
commands.ts # cy.login(), cy.mockDagnotitieChat()
e2e.ts
login.cy.ts
agenda/agenda.cy.ts
cortex/
command-center.cy.ts
dagnotitie-flow.cy.ts
verpleegrapportage/overzicht.cy.ts
screenshots/ # Schermafbeeldingen bij fouten (automatisch)
videos/ # Video-opnames per testrun (automatisch)
test-results/ # Playwright: details bij falende tests (automatisch)
playwright-report/ # Playwright: HTML rapport na afloop (automatisch)
README.md # Dit bestand
```
---
## Voorbereiding
Zorg dat je twee dingen hebt gestart voordat je de tests draait:
**1. De applicatie zelf**
Open een terminal en typ:
```bash
pnpm dev
```
Wacht tot je ziet: `✓ Ready on http://localhost:3000`. Laat dit venster open staan.
**2. De testtool naar keuze** — zie hieronder.
---
## Playwright gebruiken
Playwright is geïnstalleerd en geconfigureerd in `playwright.config.ts`.
### Starten
```bash
pnpm test:e2e:ui # visuele UI (aanbevolen voor demo en testers)
pnpm test:e2e # alle tests in de terminal
pnpm test:e2e:debug # stap-voor-stap debuggen
pnpm test:e2e:report # HTML rapport na afloop bekijken
```
### De Playwright UI gebruiken
```
┌─────────────────────────┬──────────────────────────────┐
│ Testlijst (links) │ Browser preview (rechts) │
│ │ │
│ ▶ auth.setup │ Hier zie je de app │
│ ▶ login │ meelopen terwijl de test │
│ ▶ agenda │ wordt uitgevoerd │
│ ▶ cortex │ │
│ ▶ verpleegrapportage │ │
└─────────────────────────┴──────────────────────────────┘
```
**Stap 1 — Filter instellen**
Zorg dat bovenaan "chromium" of "All" geselecteerd is, niet "setup". Anders zie je maar één test.
**Stap 2 — Inloggen (eenmalig per sessie)**
Klik op ▶ naast `auth.setup.ts`. Dit logt automatisch in en slaat de sessie op. Daarna starten alle andere tests al ingelogd.
**Stap 3 — Test uitvoeren**
Klik op een individuele testnaam (niet de groepsnaam). De browser aan de rechterkant springt tot leven.
**Wat betekenen de kleuren?**
- **Grijs** — test is nog niet gedraaid
- **Groen** ✓ — test geslaagd
- **Rood** ✗ — test gefaald, zie details onderaan
---
## Cypress gebruiken
Cypress is de tool die jullie testers al kennen. Geconfigureerd in `cypress.config.ts`.
### Starten
```bash
pnpm test:cypress:open # visuele UI (aanbevolen voor testers)
pnpm test:cypress:run # alle tests headless in de terminal
```
### De Cypress UI gebruiken
Na `pnpm test:cypress:open` opent de Cypress app. Kies **E2E Testing** en daarna **Chrome** als browser.
```
┌──────────────────────────────────────────────────────┐
│ Specs (testbestanden) │
│ │
│ login.cy.ts │
│ agenda / agenda.cy.ts │
│ cortex / command-center.cy.ts │
│ cortex / dagnotitie-flow.cy.ts │
│ verpleegrapportage / overzicht.cy.ts │
└──────────────────────────────────────────────────────┘
```
Klik op een bestand om alle tests erin te draaien. De browser opent en je ziet links de stappen en rechts de live applicatie.
**Inloggen gaat automatisch** via `cy.login()` — je hoeft niets extra te doen. De sessie wordt gecached zodat het maar één keer per testrun hoeft.
---
## Vergelijking Playwright vs Cypress
Beide tools testen exact dezelfde flows. De syntax verschilt iets:
| Actie | Playwright | Cypress |
|---|---|---|
| Navigeer naar pagina | `page.goto('/login')` | `cy.visit('/login')` |
| Vind element | `page.locator('#email')` | `cy.get('#email')` |
| Typ tekst | `page.fill('#email', '...')` | `cy.get('#email').type('...')` |
| Klik | `page.click('button')` | `cy.contains('button').click()` |
| Controleer zichtbaar | `expect(...).toBeVisible()` | `.should('be.visible')` |
| Mock API | `page.route('**/api/...')` | `cy.intercept('GET', '/api/...')` |
| Wacht op redirect | `page.waitForURL(/\/epd\//)` | `cy.url().should('match', /\/epd\//)` |
---
## Overzicht van alle tests
### login — Inlogpagina (5 tests)
| Test | Wat wordt gecontroleerd |
|---|---|
| Toont loginpagina correct | Email, wachtwoord en inlogknop zijn zichtbaar |
| Foutmelding bij verkeerde gegevens | Foutmelding verschijnt bij foute combinatie |
| Demo login knop werkt | ⚡ knop logt direct in en stuurt door naar het EPD |
| Redirect na succesvol inloggen | Na inloggen kom je op `/epd/` terecht |
| Beveiligde route stuurt door | Probeer `/epd/agenda` zonder sessie → je gaat naar login |
---
### agenda — Agenda en afspraken (8 tests)
Zoekresultaten zijn gesimuleerd met **Robbert Robot** zodat de tests niet afhankelijk zijn van live patiëntdata.
**Basiscontroles**
| Test | Wat wordt gecontroleerd |
|---|---|
| Laadt de agendapagina | Pagina opent correct met "Agenda" titel en "Nieuwe Afspraak" knop |
| Navigatieknoppen zichtbaar | "Vandaag", "Dag" en andere knoppen aanwezig |
**Afspraak aanmaken**
| Test | Wat wordt gecontroleerd |
|---|---|
| Modal opent | Klik op "Nieuwe Afspraak" → formulier verschijnt |
| Verplichte velden aanwezig | Patiëntzoekveld, datum, tijd en "Afspraak maken" knop zichtbaar |
| Zoeken toont resultaat | Type "Robbert" → "Robbert Robot" verschijnt in de lijst |
| Patiënt selecteren | Klik op naam → bevestigingskaart verschijnt in formulier |
| Knop uitgeschakeld zonder patiënt | "Afspraak maken" is niet klikbaar zonder geselecteerde patiënt |
| Sluiten werkt | Klik op "Sluiten" → modal verdwijnt |
---
### cortex/command-center — Cortex interface (5 tests)
Puur UI — geen echte AI-calls.
| Test | Wat wordt gecontroleerd |
|---|---|
| Interface laadt | Invoerveld en voorbeeldtekst zichtbaar |
| Tekst invoeren werkt | Je kunt iets typen in het veld |
| ⌘K opent het veld | Sneltoets focust automatisch op het invoerveld |
| Escape wist de invoer | Escape-toets leegt het veld |
| Voorbeeldcommandos zichtbaar | Hints zoals "notitie jan" en "overdracht" staan in beeld |
---
### cortex/dagnotitie-flow — Chat flows (5 tests)
AI-antwoorden zijn gesimuleerd — tests werken altijd hetzelfde en hebben geen Anthropic API nodig.
| Test | Scenario |
|---|---|
| Dagnotitie | Typ "notitie jan de vries voelt zich goed" → AI antwoordt "Genoteerd." |
| Invoer leeg na verzenden | Na het sturen is het invoerveld weer leeg |
| Zoeken | Typ "zoek marie" → AI antwoordt "Even kijken." |
| Onbekende opdracht | AI vraagt om verduidelijking als de intentie onduidelijk is |
| Meerdere berichten | Eerder gestuurde berichten blijven zichtbaar in de chat |
---
### verpleegrapportage — Rapportagepagina's (3 tests)
| Test | Wat wordt gecontroleerd |
|---|---|
| Rapportage pagina laadt | `/epd/verpleegrapportage` opent zonder fout of redirect naar login |
| Inhoud zichtbaar | Er is een patiëntenlijst of een lege-staat melding |
| Overdracht pagina laadt | `/epd/verpleegrapportage/overdracht` opent correct |
---
## Als een test faalt
**Playwright** schrijft bij een falende test het volgende weg in `tests/test-results/`:
| Bestand | Inhoud |
|---|---|
| `screenshot.png` | Foto van de browser op het moment van de fout |
| `video.webm` | Video van de volledige testrun |
| `error-context.md` | Tekstbeschrijving van wat er misging |
Bekijk het volledige HTML-rapport (in `tests/playwright-report/`):
```bash
pnpm test:e2e:report
```
**Cypress** schrijft bij een falende test naar `tests/cypress/screenshots/` en `tests/cypress/videos/`. In de visuele UI zie je de fout direct in beeld met een tijdlijn van alle uitgevoerde stappen.
---
## Veelvoorkomende problemen
| Probleem | Oplossing |
|---|---|
| Alle tests falen meteen | `pnpm dev` draait niet — start de applicatie eerst |
| Auth setup faalt | Supabase is gepauzeerd — herstart het project op supabase.com |
| Alleen de auth test zichtbaar (Playwright) | Filter staat op "setup" — zet hem op "chromium" of "All" |
| Browser preview blijft leeg (Playwright) | Klik op een individuele test (niet de groepsnaam) en druk op ▶ |
| Cypress vraagt om browser te kiezen | Kies "Chrome" in het openingsscherm |
| Tests werken maar app doet het niet | Tests controleren de interface, niet alle logica — meld bevindingen apart |