Skip to content

Commit 7e6063e

Browse files
feat(demo): laat zien dat het paneel je opnieuw heeft ingelogd
Het herstel navigeert weg, dus de melding die erbij hoort flitst voorbij en is na terugkomst nergens meer te zien. Wie even niet naar het scherm keek, kan een geslaagd herstel dan niet onderscheiden van een demo waarin niets gebeurde — en daarmee is de afhandeling zelf ook niet te beproeven. Het herstel laat nu een spoor achter in sessionStorage, dat de navigatie naar de proxy en terug overleeft. Het paneel leest het bij het opstarten, meldt één keer dat je opnieuw bent ingelogd, en wist het spoor meteen — anders komt die melding bij elke volgende verversing terug. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 9b27d74 commit 7e6063e

3 files changed

Lines changed: 79 additions & 0 deletions

File tree

demo/demo-console/src/main/resources/META-INF/resources/bediening.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2093,6 +2093,13 @@ richtIn(false);
20932093

20942094
verversToestand();
20952095

2096+
// Ná `verversToestand()`: die zet bij een geslaagde ronde zelf niets in de balk, dus deze melding
2097+
// blijft staan. Zonder dit is een geslaagd herstel niet te onderscheiden van een demo waarin niets
2098+
// gebeurde — het herstel navigeert immers weg, en de melding van vóór die navigatie is dan weg.
2099+
const herstelmelding = muurHerstelMelding();
2100+
2101+
if (herstelmelding) toonMelding(herstelmelding, 'let-op', null);
2102+
20962103
// Alleen pollen terwijl er iemand kijkt: een demo-console blijft dagen in een tab openstaan.
20972104
setInterval(() => {
20982105
if (!document.hidden) verversToestand();

demo/demo-console/src/main/resources/META-INF/resources/inlogmuur.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ const MUUR_DEMPING_MS = 30000;
3030
* in het geheugen is bij terugkomst juist weg, precies wanneer de lus zou beginnen. */
3131
const MUUR_SLEUTEL = 'fbs-demo-inlogmuur:laatste-poging';
3232

33+
/* Dat er hersteld ís. Het herstel navigeert weg, dus de melding die daarbij hoort flitst voorbij en
34+
* is na terugkomst nergens meer te zien: wie even niet keek, kan een geslaagd herstel niet van een
35+
* rustige ochtend onderscheiden — en bij het beproeven van deze afhandeling is dat juist wat je
36+
* wilt weten. Ook in sessionStorage, om dezelfde reden als de demping. */
37+
const MUUR_SPOOR = 'fbs-demo-inlogmuur:hersteld';
38+
3339
/* Of de navigatie naar het inlogpad al is ingezet. De poll en een druk op een knop kunnen elkaar
3440
* overlappen, en twee navigaties tegelijk laten de browser de eerste afbreken. */
3541
let muurHerstelLoopt = false;
@@ -65,6 +71,7 @@ function herstelInlogsessie() {
6571

6672
muurHerstelLoopt = true;
6773
onthoudHerstelpoging();
74+
laatSpoorAchter();
6875

6976
window.location.assign(MUUR_START_PAD + '?rd=' + encodeURIComponent(location.pathname + location.search));
7077

@@ -79,6 +86,39 @@ function muurMelding() {
7986
: 'Je bent uitgelogd bij de omgeving. Ververs de pagina om opnieuw in te loggen.';
8087
}
8188

89+
/* De melding voor wie terugkomt uit een herstel, of `null` wanneer er niets aan voorafging. Net als
90+
* `muurMelding()` één ingang: de tekst en de toets erop horen niet uit elkaar te lopen. */
91+
function muurHerstelMelding() {
92+
return netHersteld() ? 'Je was uitgelogd bij de omgeving en bent opnieuw ingelogd.' : null;
93+
}
94+
95+
/* Of er op deze pagina zojuist een herstel aan voorafging. Wist het spoor meteen: de melding hoort
96+
* bij die ene terugkomst, en zou anders bij elke volgende verversing opnieuw verschijnen en de
97+
* bediener laten denken dat hij er steeds uit vliegt. */
98+
function netHersteld() {
99+
try {
100+
const spoor = window.sessionStorage.getItem(MUUR_SPOOR);
101+
102+
if (!spoor) return false;
103+
104+
window.sessionStorage.removeItem(MUUR_SPOOR);
105+
106+
return true;
107+
} catch (fout) {
108+
console.error('[inlogmuur] spoor niet te lezen', fout);
109+
110+
return false;
111+
}
112+
}
113+
114+
function laatSpoorAchter() {
115+
try {
116+
window.sessionStorage.setItem(MUUR_SPOOR, String(Date.now()));
117+
} catch (fout) {
118+
console.error('[inlogmuur] spoor niet te bewaren', fout);
119+
}
120+
}
121+
82122
/* Storage kan gooien wanneer site-data geblokkeerd is. Dan liever herstellen zonder demping dan
83123
* helemaal niet: de bediener heeft meer aan een poging dan aan een dood paneel. */
84124
function dempingVerstreken() {

demo/demo-console/src/test/kotlin/nl/rijksoverheid/moz/fbs/democonsole/PaneelInlogmuurTest.kt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,38 @@ class PaneelInlogmuurTest {
116116
assertTrue(controle in 0 until onleesbaar, "de muur-controle staat ná de terugval op een onleesbaar antwoord")
117117
}
118118

119+
@Test
120+
fun `het herstel laat een spoor achter dat de navigatie overleeft`() {
121+
// Zonder spoor is een geslaagd herstel niet waarneembaar: de melding van vóór de navigatie
122+
// is na terugkomst weg, en wie even niet keek kan het niet van een rustige ochtend
123+
// onderscheiden. Dat maakt ook het beproeven van deze afhandeling onmogelijk.
124+
val code = zonderCommentaar(inlogmuur)
125+
126+
assertTrue(code.contains("MUUR_SPOOR"), "er is geen spoor van een herstel")
127+
assertTrue(functieBody(inlogmuur, "herstelInlogsessie").contains("laatSpoorAchter()"), "het herstel laat geen spoor achter")
128+
assertTrue(code.contains("sessionStorage.setItem(MUUR_SPOOR"), "het spoor overleeft de navigatie naar de proxy niet")
129+
}
130+
131+
@Test
132+
fun `het spoor verdwijnt zodra het gelezen is`() {
133+
// Anders verschijnt de melding bij elke volgende verversing opnieuw, en denkt de bediener
134+
// dat hij er steeds uit vliegt.
135+
assertTrue(
136+
functieBody(inlogmuur, "netHersteld").contains("sessionStorage.removeItem(MUUR_SPOOR)"),
137+
"het spoor blijft staan na het lezen",
138+
)
139+
}
140+
141+
@Test
142+
fun `het paneel meldt bij het opstarten dat het hersteld is`() {
143+
// Buiten elke functie, tussen de bedrading onderaan: hier hoort het één keer per laadbeurt
144+
// te gebeuren en niet in een pad dat de bediener zelf moet aanraken.
145+
assertTrue(
146+
zonderCommentaar(script).contains("const herstelmelding = muurHerstelMelding()"),
147+
"het paneel leest het spoor niet bij het opstarten",
148+
)
149+
}
150+
119151
@Test
120152
fun `de melding over uitloggen staat alleen bij de herstelpoging`() {
121153
// Eén ingang voor melden en herstellen: een aanroeper die de tekst zelf opschrijft, meldt

0 commit comments

Comments
 (0)