feat(#374): Playwright-Setup + erster Smoke-Test für Web (Phase 1 E2E) #375

Merged
admin-mrrm merged 2 commits from feat/374-e2e-playwright-setup into main 2026-05-21 23:41:35 +02:00
Owner

Closes #374

Summary

Erste Phase der E2E-Test-Einführung. Playwright als Web-E2E-Framework, ein Smoke-Spec der die Login-Page rendert und den OIDC-aus-Pfad verifiziert.

Was ändert sich

  • apps/web/playwright.config.ts (NEU) — webServer baut + serviert auf :4173, OIDC-Envs leer
  • apps/web/e2e/smoke.spec.ts (NEU) — 1 Test: /login → Anmelden → /
  • apps/web/package.json@playwright/test 1.49.0, @types/node, Scripts test:e2e, lint jetzt eslint src e2e
  • apps/web/tsconfig.json — include erweitert um playwright.config.ts + e2e/**/*
  • .gitignoreplaywright-report/, test-results/, .playwright/

Auth-Strategie

Im E2E-Webserver sind VITE_KC_* leer → bestehender !auth-Pfad in:

  • apps/web/src/routes/login.tsx:18-20 (signIn navigiert direkt)
  • apps/web/src/router.tsx:394-398 (requireAuth no-ops bei auth=null)

Kein neuer Code, kein Prod-Risiko.

Termux-Constraint

Playwright kennt android-arm64 nicht (auch --list triggert das Platform-Check). Lokal verifiziert: tsc --noEmit + eslint src e2e grün. Test-Ausführung passiert in CI (Phase 3, separates Issue).

Test plan

  • pnpm --filter @mrrmlab/web run typecheck grün
  • pnpm --filter @mrrmlab/web run lint grün (inkl. e2e/)
  • Drone-CI grün (bisherige Steps: install/typecheck/lint/build-web/bundle-mobile, e2e-Step kommt in Phase 3)
  • Folge-PR Phase 3: e2e-web-Step in .drone.yml, der den Smoke-Test tatsächlich ausführt

Folge-Phasen (separate Issues/PRs)

  • Phase 3: Drone-Integration (e2e-web-Step mit mcr.microsoft.com/playwright-Image)
  • Phase 2: Seed-Fixtures + Specs für Lists/Archiv/Pakete
  • Phase 4 (optional): RNTL für Mobile-Komponenten, später ggf. Maestro

🤖 Generated with Claude Code

Closes #374 ## Summary Erste Phase der E2E-Test-Einführung. Playwright als Web-E2E-Framework, ein Smoke-Spec der die Login-Page rendert und den OIDC-aus-Pfad verifiziert. ## Was ändert sich - `apps/web/playwright.config.ts` (NEU) — webServer baut + serviert auf `:4173`, OIDC-Envs leer - `apps/web/e2e/smoke.spec.ts` (NEU) — 1 Test: `/login` → Anmelden → `/` - `apps/web/package.json` — `@playwright/test` 1.49.0, `@types/node`, Scripts `test:e2e`, `lint` jetzt `eslint src e2e` - `apps/web/tsconfig.json` — include erweitert um `playwright.config.ts` + `e2e/**/*` - `.gitignore` — `playwright-report/`, `test-results/`, `.playwright/` ## Auth-Strategie Im E2E-Webserver sind `VITE_KC_*` leer → bestehender `!auth`-Pfad in: - `apps/web/src/routes/login.tsx:18-20` (signIn navigiert direkt) - `apps/web/src/router.tsx:394-398` (`requireAuth` no-ops bei `auth=null`) Kein neuer Code, kein Prod-Risiko. ## Termux-Constraint Playwright kennt `android-arm64` nicht (auch `--list` triggert das Platform-Check). Lokal verifiziert: `tsc --noEmit` + `eslint src e2e` grün. Test-Ausführung passiert in CI (Phase 3, separates Issue). ## Test plan - [x] `pnpm --filter @mrrmlab/web run typecheck` grün - [x] `pnpm --filter @mrrmlab/web run lint` grün (inkl. `e2e/`) - [ ] Drone-CI grün (bisherige Steps: install/typecheck/lint/build-web/bundle-mobile, e2e-Step kommt in Phase 3) - [ ] Folge-PR Phase 3: `e2e-web`-Step in `.drone.yml`, der den Smoke-Test tatsächlich ausführt ## Folge-Phasen (separate Issues/PRs) - Phase 3: Drone-Integration (`e2e-web`-Step mit `mcr.microsoft.com/playwright`-Image) - Phase 2: Seed-Fixtures + Specs für Lists/Archiv/Pakete - Phase 4 (optional): RNTL für Mobile-Komponenten, später ggf. Maestro 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(#374): Playwright-Setup + erster Smoke-Test für Web (Phase 1 von E2E)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
8c0699de38
Erste Phase der E2E-Test-Einführung. Playwright als Web-E2E-Framework,
ein Smoke-Spec, der die Login-Page rendert und den OIDC-aus-Pfad
verifiziert (auth=null → signIn navigiert direkt zur Home-Route).

Auth-Strategie: Im E2E-Webserver sind die VITE_KC_*-Envs leer. Damit
greift der bestehende !auth-Pfad in apps/web/src/routes/login.tsx +
apps/web/src/router.tsx::requireAuth — kein neuer Code-Pfad, kein
Prod-Risiko, geschützte Routen sind durchgängig erreichbar.

Lokal auf Termux ist Playwright nicht ausführbar (kein aarch64-Browser-
Binary). Tests werden geschrieben, in CI ausgeführt — Phase 3 bringt den
Drone-Step.

- apps/web/playwright.config.ts (NEU, webServer mit build+preview auf :4173)
- apps/web/e2e/smoke.spec.ts (NEU, 1 Test)
- apps/web/package.json: devDeps @playwright/test 1.49.0, @types/node;
  Scripts test:e2e, lint inkludiert e2e/
- apps/web/tsconfig.json: include erweitert um playwright.config.ts + e2e/
- .gitignore: playwright-report/, test-results/, .playwright/

Folge-Issues: Phase 3 (Drone-Integration), Phase 2 (mehr Smoke-Flows),
Phase 4 (Mobile-Komponenten-Tests, später Maestro).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fix(#374): smoke-test selektor strict-mode-violation
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
267046f2db
getByRole('heading', { name: 'mrrmlab' }) matchte sowohl den
Layout-Header <H3>mrrmlab</H3> (routes/layout.tsx) als auch den
Login-/Home-<H1>mrrmlab</H1>. Drone-CI #810 lief in den Playwright-
Strict-Mode-Fehler.

Heading-Check entfernt — das Dev-Modus-Banner und der Anmelden-Button
sind login-spezifisch genug. Robuster gegen künftige Layout-Änderungen.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp!375
No description provided.