From 9155e799b14b94a7aecb773e499b73cdda177a2a Mon Sep 17 00:00:00 2001 From: kristianwind Date: Thu, 8 Oct 2026 20:29:59 +0200 Subject: [PATCH] =?UTF-8?q?fix(pr=C3=B8ver):=20mark=C3=B8r-pr=C3=B8verne?= =?UTF-8?q?=20venter=20p=C3=A5=20editoren,=20f=C3=B8r=20de=20taster?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Runde 3 og 4 af de røde End-to-end var samme årsag. Det faste ophold, jeg fjernede i forrige commit, skjulte den bag en anden påstand. `page.keyboard.type` kørte, før editoren var tegnet. `click()` på "Ny note" vender tilbage, så snart klikket er sendt, mens noten først skal oprettes på serveren og tegnes bagefter. Så gik det tastede ind i den FORRIGE note eller ingen steder, og noten blev liggende tom: * runde 3 fejlede på, at noten ikke fandtes efter genindlæsningen * runde 4 fejlede på, at der ikke kom nogen PATCH at vente på To forskellige påstande, én årsag. Og svaret stod skrevet over `nyNote` i samme fil, før prøverne blev skrevet: Et klik på "Ny note" efterfulgt af tastetryk med det samme skriver derfor i den forrige note — teksten havner det forkerte sted, og den nye note bliver liggende tom. Efter en genindlæsning findes den titel, prøven leder efter, slet ikke. Det er runde 3's fejl ord for ord. Men `nyNote` KLIKKER i feltet, og det er netop det, markør-prøverne ikke må: de måler, at markøren står der, uden at nogen har sat den. Derfor `nyTomNote` — samme ventetid, uden klikket. Ankret på

frem for blot et tomt felt:

skrives af samme effekt, der sætter markøren, så når den er der, er markøren sat. Et tomt felt kan være et felt, effekten ikke har rørt endnu. Kontrolleret i begge retninger med 1500 ms plantet på POST /notes: det rå klik fejler med runde 4's ordlyd, `nyTomNote` består. E2E: 131 bestod, 0 netafbrydelser. Co-Authored-By: Claude Opus 5 --- web/e2e/smoke.spec.js | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/web/e2e/smoke.spec.js b/web/e2e/smoke.spec.js index 7874ef8..314d794 100644 --- a/web/e2e/smoke.spec.js +++ b/web/e2e/smoke.spec.js @@ -86,6 +86,31 @@ async function nyNote(side) { return felt; } +/** + * Som `nyNote`, men UDEN klikket i feltet. + * + * Klikket er netop det, markør-prøverne ikke må gøre: de måler, at markøren + * står i overskriften, uden at nogen har sat den. Ventetiden skal de til + * gengæld have, og manglen på den kostede to røde CI-kørsler. + * + * `click()` på "Ny note" vender tilbage, så snart klikket er sendt, mens noten + * først skal oprettes på serveren og tegnes bagefter. Uden ventetiden går det, + * der tastes, ind i den FORRIGE note eller ingen steder — og så er der heller + * ingen gemning at vente på, så en `waitForResponse` løber tørt i stedet. Det + * er to forskellige påstande, der fejler, med én årsag. Se kommentaren over + * `nyNote`: faren var skrevet ned, med sin løsning, før prøverne blev skrevet. + * + * Overskriften er værnet frem for bare det tomme felt:

skrives af samme + * effekt, der sætter markøren, så når den er der, er markøren sat. + */ +async function nyTomNote(side) { + await side.getByRole('button', { name: 'Ny note' }).click(); + const felt = side.getByRole('textbox', { name: 'Notens tekst' }); + await expect(felt).toHaveText(''); + await expect(side.locator('.editor h1')).toHaveCount(1); + return felt; +} + /** * Kommendes liste kan se længere frem end en uge. * @@ -5721,7 +5746,7 @@ async function caretBlock(page) { test('en ny note åbner med markøren i overskriften', async ({ page }) => { const trouble = watchForTrouble(page); await page.goto('/noter'); - await page.getByRole('button', { name: 'Ny note' }).click(); + await nyTomNote(page); // `expect.poll` og ikke én læsning: `click()` vender tilbage, så snart klikket er // sendt, mens markøren sættes efter en netværksrundtur OG en gentegning. Lokalt @@ -5752,7 +5777,7 @@ test('en note med indhold stjæler ikke markøren', async ({ page }) => { // overskriften og skubbe det, man var i gang med. const trouble = watchForTrouble(page); await page.goto('/noter'); - await page.getByRole('button', { name: 'Ny note' }).click(); + await nyTomNote(page); // Lyt FØR der skrives. Her stod `waitForTimeout(1200)`, og kommentaren over // `gemt` i toppen af filen nævner præcis det tal: et fast ophold er et gæt om, @@ -5780,7 +5805,7 @@ test('urd-døren opfører sig ens: ny note, markør i overskriften', async ({ pa const trouble = watchForTrouble(page); await page.goto('/urd'); await expect(page).toHaveURL(/\/noter$/); - await page.getByRole('button', { name: 'Ny note' }).click(); + await nyTomNote(page); await expect .poll(() => caretBlock(page), { message: 'markøren skal stå i h1 også i urd' })