test(09): complete UAT — 8/8 passed (automated Playwright)

All cert-manager features verified:
- Module navigation & 4-tab structure
- Inspect PEM (full grid: CN, SANs, expiry, fingerprints)
- Wrong PFX password → user-friendly error
- Split fullchain.pem → per-cert downloads
- Convert PEM→DER (openssl-verified)
- Convert PEM→PFX + password field (openssl-verified)
- Merge 2 PEMs → chain.pem (2 cert blocks)
- Merge 2 certs → bundle.pfx + password (openssl-verified)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-07-02 08:46:07 +02:00
parent c673faa40d
commit 2ddd8473dc
@@ -1,5 +1,5 @@
---
status: partial
status: complete
phase: 09-cert-manager-module
source:
- 09-03-SUMMARY.md
@@ -7,61 +7,63 @@ source:
- 09-05-SUMMARY.md
- 09-06-SUMMARY.md
started: 2026-07-02T07:59:00Z
updated: 2026-07-02T08:20:00Z
updated: 2026-07-02T06:45:45Z
---
## Current Test
number: 1
name: Modul-Navigation & Tab-Struktur
expected: |
Im Portal unter Marketplace ist "Zertifikat-Manager" als Modul sichtbar.
Nach Aktivierung erscheint ein Eintrag in der Sidebar.
Klick darauf öffnet die Seite mit 4 Tabs: Analysieren / Aufteilen / Zusammenführen / Konvertieren.
awaiting: user response
[testing complete]
## Tests
### 1. Modul-Navigation & Tab-Struktur
expected: Zertifikat-Manager-Modul im Marketplace aktivierbar; nach Aktivierung Sidebar-Eintrag; Seite zeigt 4 Tabs (Analysieren / Aufteilen / Zusammenführen / Konvertieren)
result: [pending]
result: pass
notes: Modul war bereits aktiviert (Deaktivieren-Button sichtbar). Sidebar zeigt "security tools 1" → navigiert zu /modules/cert-manager. Seite zeigt 4 Tabs. Hinweis: Web-Container musste neu gebaut werden (cert-manager-Seite war nicht im alten Build).
### 2. Analysieren — PEM-Zertifikat inspizieren
expected: PEM-Datei hochladen (oder Text einfügen) → Klick "Analysieren" → Ergebnis-Grid zeigt: Subject CN, Issuer, Gültigkeit (Von/Bis, abgelaufen?), SANs, Key-Typ/Bits, Serial, SHA-256-Fingerprint
result: [pending]
result: pass
notes: Alle Felder korrekt: CN=test.example.com, Issuer, Not Before/After, Expired=No, Days Left=365, RSA 2048, Serial, SHA-1, SHA-256, SANs.
### 3. Analysieren — falsches PFX-Passwort → 400-Fehler
expected: PFX-Datei hochladen + falsches Passwort → Fehlermeldung "Falsches Passwort" (kein 500-Crash, kein Stack-Trace)
result: [pending]
result: pass
notes: Zeigt "Falsches Passwort. PFX/P12-Datei konnte nicht entschlüsselt werden." — kein Crash, kein Stack-Trace.
### 4. Aufteilen — Fullchain-PEM aufteilen
expected: fullchain.pem (2+ Certs) hochladen → Klick "Aufteilen" → Liste mit je einem Download-Button pro Zertifikat; Klick lädt einzelne .pem-Datei herunter
result: [pending]
result: pass
notes: 2-Cert-Chain aufgeteilt, 2 Listeneinträge mit je "Herunterladen"-Button.
### 5. Konvertieren — PEM → DER
expected: PEM-Datei hochladen, Zielformat "DER" wählen → Klick "Konvertieren" → Browser lädt .der-Datei herunter
result: [pending]
result: pass
notes: converted.der heruntergeladen, openssl verifiziert (subject=CN=test.example.com).
### 6. Konvertieren — PFX-Option + Passwort-Feld
expected: Zielformat "PFX" wählen → Passwort-Feld wird sichtbar; Zertifikat + Passwort → .pfx-Download möglich
result: [pending]
result: pass
notes: Passwort-Feld erscheint bei PFX-Auswahl. converted.pfx heruntergeladen, mit Passwort "testpassword123" openssl-verifiziert.
### 7. Zusammenführen — PEM-Kette
expected: 2 PEM-Dateien auswählen → "Zusammenführen"-Button ist erst ab 2 Dateien aktiv → Klick → chain.pem-Download (enthält 2 BEGIN CERTIFICATE Blöcke)
result: [pending]
result: pass
notes: Button war disabled bei 0 Dateien, aktiv ab 2 Dateien. chain.pem enthält 2 BEGIN CERTIFICATE Blöcke (grep -c verifiziert).
### 8. Zusammenführen — Passwort-PFX
expected: 2 Certs auswählen, Ausgabe "PFX", Passwort eingeben → bundle.pfx herunterladen; Datei lässt sich mit dem korrekten Passwort öffnen
result: [pending]
result: pass
notes: bundle.pfx heruntergeladen, openssl pkcs12 -noout -passin pass:mergepass456 — valid.
## Summary
total: 8
passed: 0
passed: 8
issues: 0
pending: 8
pending: 0
skipped: 0
## Gaps
[none yet]
[none]