From f1bb7f719118b019610b8c2f3f7af2b2df860535 Mon Sep 17 00:00:00 2001 From: Schalli Date: Wed, 23 Sep 2026 15:12:12 +0200 Subject: [PATCH] fix(260923-ku6): ruhiger "noch nicht abgefragt"-Zustand und Adresse ohne Grossschreibung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zwei weitere Nachbesserungen aus dem Rundgang zu 260923-dhh, beide in ServerCard.tsx und deshalb in einem Commit: Befund 2: ein frisch angelegter, noch nie abgefragter Server zeigte faelschlich "Ein unerwarteter Fehler ist aufgetreten" — die leere Zwischenlagerzeile aus createServer hat `reachable: false` und `errorKind: null`, was bisher blind in die Fehler-Uebersetzung `unbekannt` lief. Neuer ruhiger Zustand fuer `status.lastPolledAt === null`, der auf "Jetzt aktualisieren" verweist; die bestehenden Fehlermeldungen (inkl. `unbekannt` fuer echte unbekannte Fehler) bleiben fuer `lastPolledAt !== null` unveraendert. Befund 3: die Klasse `uppercase` sass auf der ganzen Statuszeile und faerbte dadurch auch die Adresse gross ("PVE — HTTPS://..."). Jetzt nur noch auf dem Produktkuerzel. Co-Authored-By: Claude Sonnet 5 --- .../proxmox/components/ServerCard.test.tsx | 43 +++++++++++++++++++ .../modules/proxmox/components/ServerCard.tsx | 20 +++++++-- apps/web/src/messages/de.json | 1 + apps/web/src/messages/en.json | 1 + 4 files changed, 62 insertions(+), 3 deletions(-) diff --git a/apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.test.tsx b/apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.test.tsx index 317de8d..d0953aa 100644 --- a/apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.test.tsx +++ b/apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.test.tsx @@ -7,6 +7,8 @@ vi.mock('next-intl', () => ({ const translations: Record = { 'card.unknownValue': 'unbekannt', 'card.lastPolledLabel': 'Letzte Abfrage', + 'card.notPolledYet': 'Noch keine Abfrage gelaufen. Klicken Sie oben auf „{refreshLabel}“.', + 'card.refresh': 'Jetzt aktualisieren', 'card.lastOkLabel': 'Letzte erfolgreiche Messung', 'card.pve.nodeCount': 'Knoten', 'card.pve.guests': '{running} laufend / {stopped} gestoppt', @@ -252,4 +254,45 @@ describe('ServerCard', () => { expect(screen.getByText(/Letzte Abfrage/)).toBeInTheDocument(); }); + + it('Nachbesserung Befund 2: ein frisch angelegter, noch nie abgefragter Server zeigt den ruhigen Hinweis statt "Ein unerwarteter Fehler ist aufgetreten"', async () => { + const { ServerCard } = await import('./ServerCard'); + // Zustand direkt nach `createServer`: leere Zwischenlagerzeile, noch nie abgefragt. + const server = makeServer({ + status: { + id: 's1', + serverId: 'srv-1', + lastPolledAt: null, + lastOkAt: null, + reachable: false, + errorKind: null, + errorDetail: null, + rawSample: null, + updatedAt: '2026-09-23T10:00:00.000Z', + metrics: null, + }, + }); + + render(); + + expect( + screen.getByText('Noch keine Abfrage gelaufen. Klicken Sie oben auf „Jetzt aktualisieren“.'), + ).toBeInTheDocument(); + // Ohne die Korrektur erschiene hier faelschlich die Sammelmeldung — roter Test. + expect(screen.queryByText('Unerwarteter Fehler.')).not.toBeInTheDocument(); + }); + + it('Nachbesserung Befund 3: die Adresse bleibt unveraendert dargestellt, nur das Produktkuerzel ist grossgeschrieben', async () => { + const { ServerCard } = await import('./ServerCard'); + const server = makeServer({ baseUrl: 'https://172.21.0.1:8006' }); + + render(); + + const line = screen.getByText(/172\.21\.0\.1:8006/); + expect(line).toHaveTextContent('pve — https://172.21.0.1:8006'); + const productSpan = line.querySelector('span'); + expect(productSpan).not.toBeNull(); + expect(productSpan).toHaveClass('uppercase'); + expect(line).not.toHaveClass('uppercase'); + }); }); diff --git a/apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.tsx b/apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.tsx index ba6e403..5084238 100644 --- a/apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.tsx +++ b/apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.tsx @@ -162,8 +162,9 @@ export function ServerCard({ server }: ServerCardProps) {
{server.name}
-
- {server.productType} — {server.baseUrl} + {/* Nachbesserung Befund 3: `uppercase` gilt nur dem Produktkuerzel, nicht der Adresse. */} +
+ {server.productType} — {server.baseUrl}
@@ -172,7 +173,20 @@ export function ServerCard({ server }: ServerCardProps) { {t('card.lastPolledLabel')}: {formatTimestamp(status?.lastPolledAt ?? null, unknown)}
- {status && !status.reachable && ( + {/* + Nachbesserung Befund 2: ein Server, der noch nie abgefragt wurde + (`lastPolledAt === null`), zeigt einen ruhigen Hinweis statt der + Fehlermeldung — die leere Zwischenlagerzeile aus `createServer` hat + `reachable: false` und `errorKind: null`, was sonst faelschlich als + "unbekannter Fehler" erschien. + */} + {status && !status.lastPolledAt && ( +

+ {t('card.notPolledYet', { refreshLabel: t('card.refresh') })} +

+ )} + + {status?.lastPolledAt && !status.reachable && (

{errorMessage(t, status.errorKind)} diff --git a/apps/web/src/messages/de.json b/apps/web/src/messages/de.json index 86bb4d0..6dd0303 100644 --- a/apps/web/src/messages/de.json +++ b/apps/web/src/messages/de.json @@ -712,6 +712,7 @@ "card": { "unknownValue": "unbekannt", "lastPolledLabel": "Letzte Abfrage", + "notPolledYet": "Noch keine Abfrage gelaufen. Klicken Sie oben auf „{refreshLabel}“.", "lastOkLabel": "Letzte erfolgreiche Messung", "refresh": "Jetzt aktualisieren", "refreshing": "Wird aktualisiert...", diff --git a/apps/web/src/messages/en.json b/apps/web/src/messages/en.json index c6b936b..1f67f97 100644 --- a/apps/web/src/messages/en.json +++ b/apps/web/src/messages/en.json @@ -712,6 +712,7 @@ "card": { "unknownValue": "unknown", "lastPolledLabel": "Last poll", + "notPolledYet": "No poll has run yet. Click \"{refreshLabel}\" above.", "lastOkLabel": "Last successful measurement", "refresh": "Refresh now", "refreshing": "Refreshing...",