1e51ef7def
- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/ - 12 code-workspace-Files - STATUS-*.md - viele M/D/R-Änderungen an bereits getrackten Files - .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
146 lines
5.6 KiB
Markdown
146 lines
5.6 KiB
Markdown
# GeoGraSim · Playwright-Test-Suite
|
|
|
|
**Zweck**: automatisierte Browser-Tests, die das halbe Hundertfach manuelles Durchklicken
|
|
ersetzen. Sucht tote Links, geänderte UI-Verhalten, Glossar-Tooltip-Bugs etc.
|
|
|
|
**Wichtig — Plattformregel**: dies ist eine **Lokal-Test-Suite**. Sie läuft gegen
|
|
`http://localhost/geograsim/App/...` (XAMPP). Sie deployt nichts und modifiziert keine
|
|
Prod-Daten. Falls jemals Prod-Tests gebraucht werden, muss das explizit konfiguriert sein.
|
|
|
|
---
|
|
|
|
## Drei Test-Stufen
|
|
|
|
| Stufe | Was wird getestet | Tool | Wer macht's | Wann läuft's |
|
|
|---|---|---|---|---|
|
|
| **1** | Statische Link-Checks · Glossar-Slugs · Sim-Wrapper · Nav-Routes | Playwright headless (Chromium) | Atlas baut + lässt laufen | täglich oder vor jedem Commit |
|
|
| **2** | End-to-End-Flows: Login · Sim durchspielen · Submit · Lehrer-Cockpit | Playwright headless + headed bei Debug | Atlas baut + lässt laufen | vor jedem geplanten Deploy |
|
|
| **3** | Semantische Review: passt didaktisch · UX · Sinnhaftigkeit | Codex (OpenAI) liest Stufe-1-/2-Reports | Atlas baut Briefing-Bundle · Codex schreibt Review · Thomas moderiert | nach größeren Änderungen oder ad hoc |
|
|
|
|
---
|
|
|
|
## Verzeichnisstruktur
|
|
|
|
```
|
|
.dontDeploy/playwright/
|
|
├── README.md ← dieses File
|
|
├── package.json ← npm-Dependencies
|
|
├── playwright.config.js ← globale Konfig (baseURL, retries, reporter)
|
|
├── .gitignore ← node_modules + Reports werden ignoriert
|
|
│
|
|
├── tests/
|
|
│ ├── stufe1-smoke/
|
|
│ │ ├── links-static.spec.js ← Nav-Links, Top-Menü, Footer
|
|
│ │ ├── glossar-all.spec.js ← jeder Glossar-Slug ist erreichbar
|
|
│ │ ├── sim-wrappers.spec.js ← jeder Sim-Wrapper antwortet 200 + rendert
|
|
│ │ └── api-routes.spec.js ← /api/*-Endpunkte antworten (auth-aware)
|
|
│ │
|
|
│ └── stufe2-flows/
|
|
│ ├── login-klassen-code.spec.js
|
|
│ ├── sim-klima-start-bis-submit.spec.js
|
|
│ ├── teacher-cockpit-tabs.spec.js
|
|
│ └── glossar-tooltip-popup.spec.js
|
|
│
|
|
├── fixtures/
|
|
│ ├── known-glossar-slugs.json ← aktuelle Liste aller Glossar-Slugs
|
|
│ ├── known-paths.json ← alle erwarteten Top-Level-Routes
|
|
│ └── test-accounts.json ← Lokal-Test-Schüler:innen + Lehrer
|
|
│
|
|
├── reports/ ← gitignored: HTML-Reports + Screenshots
|
|
│ └── (autogeneriert)
|
|
│
|
|
└── briefing/
|
|
├── CODEX-BRIEF.md ← Liebe-Kollege-Brief an Codex
|
|
├── codex-stufe-3-auftraege.md ← konkrete Review-Aufträge
|
|
└── _context-bundle/ ← Anlagen für Codex
|
|
├── geograsim-readme.md ← Auszug aus CLAUDE.md
|
|
├── projektkonventionen.md ← Sprach-Regeln, Bildstil, Lehrplan
|
|
├── glossar-pattern.md ← Tooltip-Pattern, Bug-Historie
|
|
└── sim-architektur.md ← Wrapper, GGS_LIVE_STATE, Live-Cockpit
|
|
```
|
|
|
|
---
|
|
|
|
## Einrichtung lokal
|
|
|
|
```bash
|
|
cd .dontDeploy/playwright
|
|
npm install
|
|
npx playwright install chromium # nur Chromium reicht für die meisten Tests
|
|
```
|
|
|
|
Hinweis: `npm install` zieht `node_modules/` ins Verzeichnis (~250 MB). Das ist
|
|
via `.gitignore` ausgeschlossen.
|
|
|
|
---
|
|
|
|
## Tests laufen lassen
|
|
|
|
```bash
|
|
# Stufe 1 (Smoke): ~30 Sekunden, headless
|
|
npm run test:smoke
|
|
|
|
# Stufe 2 (Flows): ~3 Minuten, headless
|
|
npm run test:flows
|
|
|
|
# Beides hintereinander
|
|
npm test
|
|
|
|
# Mit UI-Debugger (headed, langsam, sehr nützlich beim Debuggen)
|
|
npm run test:debug
|
|
|
|
# Nur ein Test-File
|
|
npx playwright test glossar-all.spec.js
|
|
|
|
# HTML-Report öffnen
|
|
npm run report
|
|
```
|
|
|
|
---
|
|
|
|
## Was Stufe 1 macht (Smoke)
|
|
|
|
- **Alle Glossar-Slugs anfahren** (aus DB-Dump in `fixtures/known-glossar-slugs.json`):
|
|
jeden `/glossar?term=<slug>` aufrufen, prüfen ob 200 + Begriff-Titel im DOM
|
|
- **Alle Top-Level-Routes** (`fixtures/known-paths.json`):
|
|
`/teacher`, `/schueler`, `/lehrplan`, `/glossar`, `/heli-game`, `/klima-2d`, ...
|
|
- **Alle Sim-Wrapper** öffnen, prüfen ob `window.__GGS__` gesetzt ist + game-DOM rendert
|
|
- **Glossar-Tooltip-Links auf zentralen Seiten** (Klima-Onboarding, Weltküche): clicken,
|
|
prüfen ob Popup öffnet + Link zum vollen Eintrag funktioniert (Regression für den
|
|
Bug vom 2026-06-10!)
|
|
|
|
## Was Stufe 2 macht (Flows)
|
|
|
|
- **Schüler-Login** mit Klassen-Code + Pseudonym + Passwort
|
|
- **Klima starten · 10 Klicks machen · submit**: prüft assessment-Submit + Heartbeat
|
|
- **Heli M1 · alle Wegpunkte klicken · Startfreigabe**: prüft die Startfreigabe-Logik
|
|
vom 2026-06-10 (Audio-Ende alleine reicht NICHT)
|
|
- **Weltküche Pizza · zwei richtige Länder · solved**: prüft Round-End-Anzeige
|
|
- **Lehrer-Cockpit · alle 5 Tabs durchklicken**: prüft alle Render-Funktionen
|
|
- **Glossar-Tooltip in Weltküche**: Begriff klicken → Popup → „Voller Eintrag" → 200
|
|
|
|
## Was Stufe 3 macht (Codex-Review)
|
|
|
|
Codex bekommt:
|
|
- HTML-Reports aus Stufe 1 + 2
|
|
- Screenshots der wichtigsten Stellen
|
|
- Briefing aus `briefing/CODEX-BRIEF.md`
|
|
- Kontext-Bundle aus `briefing/_context-bundle/`
|
|
|
|
Codex schreibt zurück:
|
|
- Markdown-Review mit Fundstellen, Schweregrad, Empfehlungen
|
|
- KEINE Code-Änderungen — nur Bewertung
|
|
|
|
---
|
|
|
|
## Wartung
|
|
|
|
- **Bei jedem Glossar-Update**: `fixtures/known-glossar-slugs.json` neu dumpen
|
|
(siehe `scripts/dump-glossar-slugs.sql`)
|
|
- **Bei jeder neuen Sim**: `fixtures/known-paths.json` ergänzen + neuen Flow-Test bauen
|
|
- **Bei jedem Bug-Fix**: ein Regressionstest dazu, damit der Bug nicht wiederkommt
|
|
|
|
---
|
|
|
|
Stand: 2026-06-11 · gepflegt von Atlas (Claude Opus 4.7) · Reviews durch Codex (GPT-5/4o)
|