From aad0a8b807c80f29515cf5612148b53ab2f32b12 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 7 Oct 2026 14:24:19 +0000 Subject: [PATCH] =?UTF-8?q?Tests:=20W=C3=A4chter=20der=20Kundenansicht=20s?= =?UTF-8?q?perrt=20auch=20die=20Routen=20der=20Auftragsbest=C3=A4tigung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- test/kundenansichtGuard.test.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/kundenansichtGuard.test.js b/test/kundenansichtGuard.test.js index d455d81..982f677 100644 --- a/test/kundenansichtGuard.test.js +++ b/test/kundenansichtGuard.test.js @@ -41,6 +41,8 @@ const MOUNTS = [ ['/api/termine', termineRouter], ['/api/shop', (await import('../server/routes/shop.js')).default], ['/api/zeiten', zeitenRouter], + ['/api/auftraege', (await import('../server/routes/auftraegeKunde.js')).default], + ['/api/auftrag', (await import('../server/routes/auftrag.js')).default], ] // Oeffentliche Schnittstelle (ohne Session) wie in server/index.js hinter dem Waechter; nicht in MOUNTS, weil sie keine Kunden-Route ist const oeffentlich = (await import('../server/routes/publicTermine.js')).default @@ -146,6 +148,19 @@ test('Behalten der Öffnungszeiten ist in der Kundenansicht gesperrt (Route gefu assert.equal(res.body.code, 'view_blocked') }) +// Auftragsbestätigung bestätigen ist eine Erklärung im Namen des Kunden (Spec Abschnitt 2): Portal-Weg und Link-Weg stehen nicht auf der +// Erlaubnisliste; der Wächter sperrt sie vor dem Router (auch der Link-Weg, wenn der Browser das Cookie einer Kundenansicht trägt). +test('Auftragsbestätigung bestätigen ist in der Kundenansicht gesperrt (Portal-Weg und Link-Weg)', async () => { + const routes = writeRoutes(MOUNTS) + for (const p of ['/api/auftraege/x/bestaetigen', '/api/auftrag/x/bestaetigen']) { + assert.ok(routes.some(({ method, path: r }) => method === 'POST' && r === p), `Route ${p} gefunden`) + assert.ok(!allowed('POST', p), p) + const res = await call('POST', p, { ...kv(), body: { bestaetigt: true, fruehbeginn: false } }) + assert.equal(res.status, 403, p) + assert.equal(res.body.code, 'view_blocked', p) + } +}) + test('Erlaubnisliste: genau News, Terminplaner, Webshop-Verwaltung, Öffnungszeiten, Analyse-Link, Ende, Logout und Login', () => { const ok = [ ['POST', '/api/news'], ['POST', '/api/news/image'], ['PATCH', '/api/news/abc'], ['DELETE', '/api/news/abc'],