# 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 |
