feat(net): et udfald siger "ingen forbindelse" frem for at bede om kodeordet

Opstarten spørger serveren, hvem man er. Når svaret aldrig kommer, står
`user` som null — og null betyder "logget ud" alle andre steder i
programmet. Så et totalt udfald blev vist som login-skærmen: appen gav
sessionen skylden for, at nettet var nede, og tilbød et kodeordsfelt, der
umuligt kunne virke.

Det er værre end en fejlbesked, fordi det ligner noget, der kunne virke.
Man taster kodeordet, der sker ingenting, og man konkluderer, at kontoen
er i stykker. Det skete i virkeligheden 17. september 2026, da instansens
DNS-post blev slettet: det, appen viste, var en langsom login-side.

Forskellen var der allerede i forespørgselslaget. Et netværkssvigt, der
har brugt sit forsøgsvindue op, kastes som `ApiError(0, 'offline')` —
koden laves af klienten selv, netop fordi der aldrig kom en status. En 401
er serveren, der svarer, og det er en rigtig udlogning. Butikken skelner nu
på den kode, og fladen viser NoConnection i stedet for SignIn.

Teksten siger, at data er i behold, for det er det spørgsmål, man faktisk
har, når ens noter forsvinder bag en login-boks.

Prøven afbryder API-kaldene frem for at stoppe serveren: en afbrudt
forespørgsel er præcis det, en manglende DNS-post giver browseren.
Efterprøvet mod den gamle kode — den fejler på "Ingen forbindelse".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
kristianwind
2026-09-17 12:29:57 +02:00
co-authored by Claude Opus 5
parent 930522ecf6
commit 84af63316d
6 changed files with 159 additions and 0 deletions
+34
View File
@@ -4748,6 +4748,40 @@ test('en ny note hentes ikke igen, når den lige er lavet', async ({ page }) =>
expect(trouble).toEqual([]);
});
/**
* Et totalt udfald siger "ingen forbindelse" — ikke "log ind".
*
* Opstarten spørger serveren, hvem man er. Når svaret aldrig kommer, står `user`
* som null, og null betyder "logget ud" alle andre steder i programmet — så et
* udfald blev vist som login-skærmen. Appen gav altså sessionen skylden for, at
* nettet var nede, og tilbød et kodeordsfelt, der umuligt kunne virke.
*
* Det er værre end en fejlbesked, fordi det ligner noget, der kunne virke: man
* taster kodeordet, der sker ingenting, og man konkluderer, at kontoen er i
* stykker. Det skete i virkeligheden 17. september 2026, da instansens DNS-post
* blev slettet.
*
* Prøven afbryder API-kaldene frem for at stoppe serveren: en afbrudt forespørgsel
* er præcis det, en manglende DNS-post giver browseren — fetch afviser, uden at der
* nogensinde kom en status. En 500 ville være serveren, der svarer, og det er den
* anden sag.
*/
test('et udfald siger ingen forbindelse frem for at bede om kodeordet', async ({ page }) => {
await page.route('**/api/v1/**', (route) => route.abort());
await page.goto('/');
// Prøvetiden skal kunne rumme hele forsøgsvinduet: forespørgselslaget prøver
// igen i femten sekunder, før det kalder det et udfald. Det er med vilje —
// et blink på nettet må ikke smide folk ud — så prøven må vente det ud.
await expect(page.getByText('Ingen forbindelse', { exact: true })).toBeVisible({
timeout: 25000
});
// Og ikke kodeordsfeltet. Det er hele pointen.
await expect(page.getByLabel('Adgangskode')).toHaveCount(0);
});
/**
* Et indsat billede kan ses i fuld størrelse og kopieres videre.
*