Buchungskalender: Abschluss – Buchungsseite zeigt 409-Codes, nur https-Zahlung, Feldfehler barrierefrei
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a071e57fb7
commit
392b85c1f0
3 files changed
+102
-13
No files matched your search
@@ -106,7 +106,7 @@ test('freigegeben: Pflichtangaben in Reihenfolge direkt ueber dem Knopf, Abruf m
|
||||
const block = fx.finde(el, '[data-tag="pflichtangaben"]')
|
||||
assert.equal(kinder[kinder.indexOf(block) + 1], knopf, 'Block steht direkt ueber dem Knopf')
|
||||
const t = fx.text(block)
|
||||
const marken = ['Anbieter: Haus Test GmbH', 'Weg 1', 'Unterkunft: Ferienwohnung, 10.11.2026 bis 14.11.2026', 'Check-in ab 15:00 Uhr', 'Check-out bis 11:00 Uhr', 'Personen: 2', 'Übernachtung, 4 Nächte', 'Endreinigung', 'Gesamtpreis: 450,00', '7 % USt', 'Zahlarten:', 'Stornobedingungen: Bis 14 Tage vor Anreise kostenfrei.', 'Ein Widerrufsrecht besteht nicht (§ 312g Abs. 2 Nr. 9 BGB).', 'Datenschutz:', 'Reserviert bis 10.10.2026 14:30 Uhr']
|
||||
const marken = ['Anbieter: Haus Test GmbH', 'Weg 1', 'Unterkunft: Ferienwohnung, 10.11.2026 bis 14.11.2026', 'Check-in ab 15:00 Uhr', 'Check-out bis 11:00 Uhr', 'Personen: 2', 'Übernachtung, 4 Nächte', 'Endreinigung', 'Gesamtpreis: 450,00', '7 % USt', 'Zahlarten:', 'Stornobedingungen: Bis 14 Tage vor Anreise kostenfrei.', 'Ein Widerrufsrecht besteht nicht (§ 312g Abs. 2 Satz 1 Nr. 9 BGB).', 'Datenschutz:', 'Reserviert bis 10.10.2026 14:30 Uhr']
|
||||
let pos = -1
|
||||
for (const m of marken) {
|
||||
const i = t.indexOf(m, pos + 1)
|
||||
@@ -289,3 +289,61 @@ test('Fehler der Rechnungsadresse verschwinden, sobald der Gast die Felder ausfu
|
||||
assert.ok(meldung.hidden)
|
||||
})
|
||||
})
|
||||
|
||||
/* ----------------------------------------------------- Abschluss: 409-Codes, a11y --- */
|
||||
test('409-Codes beim Buchen: eigene Banner-Texte statt stillem Neuladen', async () => {
|
||||
const faelle = [
|
||||
['online_aus', /Online-Zahlung ist gerade nicht möglich – bitte wählen Sie „Vor Ort bezahlen“\./, false],
|
||||
['einstellungen_unvollstaendig', /Die Buchung ist gerade nicht möglich\. Bitte wenden Sie sich direkt an den Anbieter\./, false],
|
||||
['zustimmung_fehlt', /Die Buchung ist gerade nicht möglich\. Bitte wenden Sie sich direkt an den Anbieter\./, false],
|
||||
['status_ungueltig', /Der Stand Ihrer Buchung hat sich geändert\./, true],
|
||||
]
|
||||
for (const [code, muster, neuLaden] of faelle) {
|
||||
const antworten = [{ status: 200, body: DATEN }, { status: 409, body: { fehler: code } }]
|
||||
if (neuLaden) antworten.push({ status: 200, body: { ...DATEN, status: 'gebucht', zahlart: 'vorort' } })
|
||||
await mitFx(antworten, undefined, async (fx, el) => {
|
||||
await fuelle(fx, el)
|
||||
await fx.klick(fx.finde(el, 'button[type="submit"]'))
|
||||
assert.match(fx.text(el), muster, code)
|
||||
assert.equal(fx.fetchLog.length, neuLaden ? 3 : 2, code)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
test('409 bei /zahlung: status_ungueltig laedt neu mit Hinweis; online_aus zeigt Text', async () => {
|
||||
const d = { ...DATEN, status: 'gebucht', zahlart: 'online', bezahlt: false, rechnungNummer: 'R-1' }
|
||||
await mitFx([{ status: 200, body: d }, { status: 409, body: { fehler: 'status_ungueltig' } }, { status: 200, body: { ...d, bezahlt: true } }], undefined, async (fx, el) => {
|
||||
await fx.klick(fx.finde(el, '[data-tag="online-zahlen"]'))
|
||||
assert.match(fx.text(el), /Der Stand Ihrer Buchung hat sich geändert\./)
|
||||
assert.match(fx.text(el), /Bezahlt – vielen Dank\./)
|
||||
})
|
||||
await mitFx([{ status: 200, body: d }, { status: 409, body: { fehler: 'online_aus' } }], undefined, async (fx, el) => {
|
||||
await fx.klick(fx.finde(el, '[data-tag="online-zahlen"]'))
|
||||
assert.match(fx.text(el), /Online-Zahlung ist gerade nicht möglich/)
|
||||
})
|
||||
})
|
||||
|
||||
test('zahlungUrl nur bei https; Widerrufs-Zitat vollstaendig', async () => {
|
||||
await mitFx([{ status: 200, body: DATEN }, { status: 200, body: { status: 'gebucht', rechnungNummer: 'R-1', zahlungUrl: 'javascript:alert(1)' } }], undefined, async (fx, el) => {
|
||||
assert.match(fx.text(el), /§ 312g Abs\. 2 Satz 1 Nr\. 9 BGB/)
|
||||
await fuelle(fx, el)
|
||||
await fx.klick(fx.finde(el, 'input[value="online"]'))
|
||||
await fx.klick(fx.finde(el, 'button[type="submit"]'))
|
||||
assert.deepEqual(fx.assigned, [])
|
||||
})
|
||||
})
|
||||
|
||||
test('Feldfehler: aria-invalid, aria-describedby, Fokus auf erstes Fehlerfeld; Zahlart als fieldset/legend', async () => {
|
||||
await mitFx([{ status: 200, body: DATEN }], undefined, async (fx, el) => {
|
||||
const gruppe = fx.finde(el, 'fieldset[data-tag="zahlart"]')
|
||||
assert.ok(gruppe)
|
||||
assert.equal(fx.text(fx.finde(gruppe, 'legend')), 'Zahlart')
|
||||
await fx.klick(fx.finde(el, 'button[type="submit"]'))
|
||||
const strasse = fx.finde(el, '[name="strasse"]')
|
||||
assert.equal(strasse.getAttribute('aria-invalid'), 'true')
|
||||
assert.equal(strasse.getAttribute('aria-describedby'), 'uk-fehler-strasse')
|
||||
assert.equal(fx.document.activeElement, strasse)
|
||||
await fx.setze(strasse, 'Weg 1')
|
||||
assert.equal(strasse.getAttribute('aria-invalid'), null)
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user