56 lines
2.2 KiB
Markdown
56 lines
2.2 KiB
Markdown
---
|
|
phase: 03-module-system-domaincheck
|
|
plan: 04
|
|
subsystem: verification
|
|
tags: [e2e-test, module-system, domaincheck, tenant-isolation]
|
|
dependency_graph:
|
|
requires:
|
|
- module-sdk-types
|
|
- module-registry-service
|
|
- domaincheck-service
|
|
- module-loader-registry
|
|
provides:
|
|
- phase-03-verified
|
|
affects: [phase-04-marketplace]
|
|
tech_stack:
|
|
added: []
|
|
patterns: []
|
|
key_files:
|
|
created: []
|
|
modified:
|
|
- apps/api/src/module-registry/module.guard.ts
|
|
- apps/web/src/app/(portal)/modules/domaincheck/components/DomainInput.tsx
|
|
key_decisions:
|
|
- "ModuleGuard uses req.user?.tenantId fallback — same pattern as module-registry controller"
|
|
- "DomainInput strips TLD from user input before API call for better UX"
|
|
requirements_completed: [MOD-01, MOD-02, MOD-03, MOD-04, DCHK-01, DCHK-02, DCHK-03]
|
|
duration: 20min
|
|
completed: 2026-06-20
|
|
---
|
|
|
|
# Plan 04: Human Verification — End-to-End Module System verifiziert
|
|
|
|
**Alle 11 Verifikationsschritte bestanden; zwei Bugs bei der Verifikation gefunden und gefixt.**
|
|
|
|
## Verifikationsergebnisse
|
|
|
|
| Schritt | Beschreibung | Ergebnis |
|
|
|---------|-------------|----------|
|
|
| 1 | Docker Stack starten | Alle Container healthy |
|
|
| 2 | Admin Login | Erfolgreich (admin/admin123) |
|
|
| 3 | GET /modules | Domaincheck in Liste |
|
|
| 4 | GET /modules/active | Domaincheck aktiv fuer Tenant |
|
|
| 5 | Activate/Deactivate API | Funktioniert ohne Neustart |
|
|
| 6 | Kategorie-Seite /modules/domain-tools | Karte mit Name, Beschreibung sichtbar |
|
|
| 7 | Domaincheck "google" | Alle TLDs rot (registered) |
|
|
| 8 | Domaincheck zufaellig | Alle TLDs gruen (available) |
|
|
| 9 | i18n Sprachwechsel | Labels wechseln sauber |
|
|
| 10 | Dark Mode | Modul-UI passt sich an |
|
|
| 11 | Deaktivierung blockiert API | 403 korrekt |
|
|
|
|
## Bugs gefunden und gefixt
|
|
|
|
1. **ModuleGuard fehlender tenantId-Fallback** (5708127): Guard las nur `req.tenantId` von Middleware, die vor dem JwtAuthGuard laeuft und daher nie `tenantId` setzt. Fix: Fallback auf `req.user?.tenantId` + 403 statt silent pass.
|
|
|
|
2. **DomainInput akzeptiert keine vollen Domains** (576e311): User geben natuerlich "google.de" ein, aber die API validiert nur DNS-Labels ohne Punkt. Fix: Frontend strippt alles nach dem ersten Punkt.
|