fix(260923-ku6): Verbindungstest prueft Formularwerte statt gespeicherten Stand

Nachbesserung aus dem Browser-Rundgang zu 260923-dhh (Befund 1): "Verbindung
testen" pruefte bislang immer den in der Datenbank gespeicherten Server, nicht
das ungespeicherte Formular. Eine im Formular abgeschaltete Zertifikatspruefung
oder ein neu eingetipptes Token-Geheimnis wurden dadurch beim Test ignoriert
und erst nach "Speichern" wirksam — eine Falle fuer genau den Ablauf, den
Nutzer instinktiv waehlen (eintippen, testen, dann erst speichern).

Neues `TestProxmoxServerDto` plus Merge-Baustein `resolveEffectiveTestServer`
in `ProxmoxService`: normale Felder folgen dem Formular (auch wenn absichtlich
geleert), Geheimnisfelder folgen der bestehenden "leer -> gespeicherten Wert
behalten"-Regel, weil `ServerForm` sie beim Laden nie aus der Datenbank
vorbefuellt. Neue Route `POST servers/test` (ohne `:id`) deckt die Neuanlage
ab, wo es noch keinen gespeicherten Server gibt. Der Testen-Knopf steht jetzt
immer zur Verfuegung, nicht mehr nur nach dem ersten Speichern.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-23 15:11:56 +02:00
parent 3091b04673
commit 710034c80a
7 changed files with 372 additions and 32 deletions
@@ -147,3 +147,17 @@ export class UpdateProxmoxServerDto {
@IsOptional()
isActive?: boolean;
}
/**
* DTO fuer den Verbindungstest (Nachbesserung Befund 1, Rundgang zu Aufgabe 4):
* derselbe Feldsatz wie `UpdateProxmoxServerDto` — der Test soll auf JEDEM
* dieser Felder den ungespeicherten Formularwert pruefen koennen, nicht den
* gespeicherten Stand. Ein NICHT gesendetes oder leeres Geheimnisfeld heisst
* "gespeicherten Wert weiterverwenden" (Merge-Logik in
* `ProxmoxService.resolveEffectiveTestServer`), genau wie beim Bearbeiten.
* Fuer die Neuanlage (noch kein gespeicherter Server) bleiben alle Felder
* optional, weil es dort keinen gespeicherten Fallback gibt — ein fehlendes
* Pflichtfeld fuehrt dort einfach zum selben Fehlerschluessel wie ein leer
* gelassenes Feld beim Anlegen selbst (z. B. `zugang` ohne Geheimnis).
*/
export class TestProxmoxServerDto extends UpdateProxmoxServerDto {}