Buchungskalender: Buchungsseite – Ablauf, bezahlt und Wiederholung

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
knsoandClaude Opus 5.5 committed 2026-10-07 14:13:40 +00:00
1 parent 0b0d8da335
commit 51a36be36a
4 files changed
+71 -14

No files matched your search

+40 -2
View File
@@ -32,6 +32,8 @@ test('Widget-Seite und Buchungsseite: 200, Schluessel escaped, Schutz-Header', a
assert.match(r.text, /<script src="\/unterkunft-buchung\.js" defer><\/script>/)
assert.equal(r.headers.get('cache-control'), 'no-store')
assert.equal(r.headers.get('x-robots-tag'), 'noindex')
assert.equal(r.headers.get('referrer-policy'), 'no-referrer')
assert.match(r.text, /<meta name="referrer" content="no-referrer">/)
assert.equal(r.headers.get('x-content-type-options'), 'nosniff')
const csp = r.headers.get('content-security-policy')
for (const d of ["default-src 'self'", "script-src 'self'", "connect-src 'self'", "frame-ancestors 'none'", "base-uri 'none'", "form-action 'self'"]) assert.ok(csp.includes(d), d)
@@ -186,7 +188,7 @@ test('gebucht, online unbezahlt: „Jetzt online bezahlen“ holt /zahlung und l
test('gebucht und bezahlt: kein Zahlknopf', async () => {
await mitFx([{ status: 200, body: { ...DATEN, status: 'gebucht', zahlart: 'online', bezahlt: true } }], undefined, (fx, el) => {
assert.equal(fx.finde(el, '[data-tag="online-zahlen"]'), null)
assert.match(fx.text(el), /Zahlung ist eingegangen/)
assert.match(fx.text(el), /Bezahlt – vielen Dank\./)
})
})
@@ -207,11 +209,16 @@ test('abgelaufen, 404 und Netzfehler: feste Texte; ohne Token kein Abruf', async
})
test('Fehler beim Buchen: abgelaufen, Feldfehler, Server-Ausfall (Knopf wieder frei)', async () => {
await mitFx([{ status: 200, body: DATEN }, { status: 409, body: { fehler: 'abgelaufen' } }], undefined, async (fx, el) => {
await mitFx([{ status: 200, body: DATEN }, { status: 410, body: { fehler: 'frist_abgelaufen' } }], undefined, async (fx, el) => {
await fuelle(fx, el)
await fx.klick(fx.finde(el, 'button[type="submit"]'))
assert.match(fx.text(el), /Die Reservierung ist abgelaufen\./)
})
await mitFx([{ status: 200, body: DATEN }, { status: 409, body: { fehler: 'zeitraum_belegt' } }], undefined, async (fx, el) => {
await fuelle(fx, el)
await fx.klick(fx.finde(el, 'button[type="submit"]'))
assert.match(fx.text(el), /Der Zeitraum ist leider inzwischen belegt\. Bitte fragen Sie einen anderen Zeitraum an\./)
})
await mitFx([{ status: 200, body: DATEN }, { status: 400, body: { fehler: 'ungueltig', felder: { plz: 'PLZ ungültig' } } }, { status: 500, body: {} }], undefined, async (fx, el) => {
await fuelle(fx, el)
await fx.klick(fx.finde(el, 'button[type="submit"]'))
@@ -234,3 +241,34 @@ test('Token verlaesst die Seite nur in den Schnittstellen-Aufrufen', async () =>
for (const a of fx.fetchLog) assert.ok(a.url.startsWith('/api/public/unterkunft/v1/'), a.url)
})
})
test('Status bezahlt wie gebucht: Bestaetigung, kein Zahlknopf', async () => {
await mitFx([{ status: 200, body: { ...DATEN, status: 'bezahlt', zahlart: 'online', bezahlt: true } }], undefined, (fx, el) => {
assert.match(fx.text(el), /Ihre Buchung ist bestätigt/)
assert.match(fx.text(el), /Bezahlt – vielen Dank\./)
assert.equal(fx.finde(el, '[data-tag="online-zahlen"]'), null)
})
})
test('Wiederholung: POST 409 oder ok ohne gebucht laedt neu und zeigt den aktuellen Stand', async () => {
const gebucht = { ...DATEN, status: 'gebucht', zahlart: 'vorort', bezahlt: false, rechnungNummer: 'R-1' }
for (const post of [{ status: 409, body: { fehler: 'bereits_gebucht' } }, { status: 200, body: {} }]) {
await mitFx([{ status: 200, body: DATEN }, post, { status: 200, body: gebucht }], undefined, async (fx, el) => {
await fuelle(fx, el)
await fx.klick(fx.finde(el, 'button[type="submit"]'))
assert.equal(fx.fetchLog.length, 3)
assert.equal(fx.fetchLog[2].method, 'GET')
assert.match(fx.text(el), /Ihre Buchung ist bestätigt/)
})
}
})
test('Uebersicht: Menge × Einzelpreis, gewaehlte Zahlart, Titel', async () => {
await mitFx([{ status: 200, body: DATEN }], undefined, async (fx, el) => {
assert.match(fx.text(fx.finde(el, '[data-tag="posten"]')), /Übernachtung, 4 Nächte \(4 × 100,00\s€\)400,00\s€/)
assert.match(fx.text(fx.finde(el, '.uk-zahlarten')), /\(gewählt: vor Ort\)/)
await fx.klick(fx.finde(el, 'input[value="online"]'))
assert.match(fx.text(fx.finde(el, '.uk-zahlarten')), /\(gewählt: online\)/)
assert.equal(fx.document.title, 'Buchung – Ferienwohnung')
})
})