Edge Cases: Cross-fase
Scenario’s die meerdere fases raken of over het hele systeem gaan. 6 scenario’s.
EC-9 Concurrency en race conditions
Section titled “EC-9 Concurrency en race conditions”Twee gebruikers doen tegelijk conflicterende acties.
Versterkt: S-2.3, S-3.2
- Laatste daycare plek: twee klanten boeken tegelijk. Een krijgt boeking, andere krijgt “vol” melding
- Laatste kamer: twee klanten boeken zelfde kamertype op zelfde datum. Een geblokkeerd
- Dubbele check-in: admin klikt twee keer snel op check-in knop. Slechts 1 check-in geregistreerd
- Gelijktijdige betaling: klant betaalt online terwijl admin handmatig markeert. Geen dubbele betaling
- Voucher credit race condition: klant boekt 2x daycare snel achter elkaar met 1 credit over. Slechts 1 boeking succesvol. Database constraint voorkomt negatief saldo. Check dat de tweede boeking een duidelijke foutmelding geeft (niet een generieke 500)
Resultaat: Database constraints en optimistic locking voorkomen inconsistenties. Race conditions op voucher credits afgevangen op database-niveau.
EC-15 Klant met meerdere honden in parallelle diensten
Section titled “EC-15 Klant met meerdere honden in parallelle diensten”Complexe scenario’s met meerdere honden in verschillende diensten.
Versterkt: Alle fases
- Klant heeft hond A in boarding en hond B in daycare op dezelfde dag. Beide correct in dashboard
- Hond A in training, hond B op testdag. Onafhankelijke flows
- Klant annuleert alle boekingen. Alle facturen correct bijgewerkt
- Admin dashboard: klant met 3 actieve boekingen. Alle zichtbaar in klantprofiel
- Hond in boarding wiens vaccinatie tijdens verblijf verloopt. Systeem stuurt admin een waarschuwing: check hoe deze waarschuwing wordt getoond (notificatie op dashboard? email? inline waarschuwing bij de boeking?). Hond blijft in boarding maar admin moet actie ondernemen
Resultaat: Parallelle diensten verstoren elkaar niet, dashboard altijd consistent, vaccinatie-verloop tijdens boarding levert proactieve admin-waarschuwing op.
EC-16 Security edge cases
Section titled “EC-16 Security edge cases”Beveiligingstests op applicatieniveau.
Versterkt: S-0.5, alle fases
- XSS: voer
<script>alert('xss')</script>in als hondnaam / special_notes / behavior_notes. Wordt escaped - SQL Injection: stuur
'; DROP TABLE dogs;--via API. Zod + parameterized queries blokkeren - IDOR: klant A kent factuur-ID van klant B. Directe API call. Moet 403 of lege response geven
- File upload: upload
.svgmet embedded JavaScript. Geweigerd of gesanitiseerd - Rate limiting: 100 snelle requests naar login endpoint. Rate limit actief na X pogingen per minuut (definieer exact: bijv. 10 per minuut? 5 per minuut?). Check dat de response een 429 status code is met een duidelijke melding
- CORS: XMLHttpRequest van evil.com naar API. Geblokkeerd door CORS (alleen
APP_ORIGINtoegestaan) - Sensitive data: check dat service role key niet in frontend bundle zit (check
VITE_prefix variabelen) - Query limits: API endpoint zonder pagination. Check
.limit()actief (max 200-500) - Error leaking: forceer server error. Response bevat geen stack trace of interne details, alleen generieke foutmelding
Resultaat: Geen enkele OWASP top 10 kwetsbaarheid exploiteerbaar, rate limiting met duidelijke drempels gedefinieerd.
EC-19 Lege states en eerste gebruik
Section titled “EC-19 Lege states en eerste gebruik”Hoe ziet de app eruit als er nog geen data is? Elke lege state moet een CTA bevatten.
Versterkt: Alle fases
- Klant dashboard
/dashboardzonder boekingen. Melding: “Je hebt nog geen boekingen. Plan je eerste bezoek!” met CTA knop naar/bookings/new - Klant factuuroverzicht
/invoiceszonder facturen. Melding: “Geen facturen gevonden.” (geen CTA nodig) - Admin dashboard
/adminzonder klanten. Lege state met uitleg dat er nog geen registraties zijn - Hondenlijst
/petszonder honden. Melding: “Voeg je eerste hond toe” met CTA knop naar het toevoegformulier - Kalenderweergave zonder boekingen. Lege kalender getoond, geen crash of foutmelding
- Filters die 0 resultaten opleveren. Melding: “Geen resultaten voor deze filters” met optie om filters te resetten
- Voucheroverzicht
/subscriptionszonder actieve vouchers. Melding met CTA naar voucherkoop - Abonnementenpagina
/subscriptionszonder abonnement. Knop “Sluit een Unlimited abonnement af” zichtbaar
Resultaat: Alle lege states hebben duidelijke berichten met context-specifieke CTA’s, geen crashes of lege pagina’s.
EC-20 Sessiebeheer en gelijktijdig gebruik
Section titled “EC-20 Sessiebeheer en gelijktijdig gebruik”Meerdere sessies en tabs tegelijk.
Versterkt: Alle fases
- Klant ingelogd in twee tabs. Actie in tab 1 reflecteert in tab 2 na refresh
- Klant logt uit in tab 1. Tab 2 wordt bij volgende actie naar login gestuurd
- Admin en klant kijken naar dezelfde boeking. Admin wijzigt status. Klant ziet update na refresh
- Wachtwoord wijzigen. Alle andere sessies worden uitgelogd (of niet? beslissing nodig)
- Token verloopt tijdens langdurig formulier invullen. Check welk type melding de gebruiker ziet: modal met “Je sessie is verlopen, log opnieuw in”, toast notificatie, of redirect naar login? Check dat ingevulde data niet verloren gaat (bijv. opgeslagen in localStorage of sessionStorage)
Resultaat: Consistente state tussen tabs, graceful token expiry met duidelijk meldingstype en geen dataverlies.