Buchungskalender: UI-Durchlauf – Platzhalter in Stornobedingungen blockieren das Speichern

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
knsoandClaude Opus 5.5 committed 2026-10-07 15:09:57 +00:00
1 parent 196921fdf0
commit f5e304ad7a
3 files changed
+12

No files matched your search

+1
View File
@@ -143,6 +143,7 @@ export async function zeichnePreise(ctx, unterkunft) {
}
const storn = String(storno.value).trim()
if (storn.length < 20 || storn.length > 5000) fehler.stornobedingungen = 'Die Stornobedingungen brauchen 20 bis 5000 Zeichen.'
if (!fehler.stornobedingungen && /\[[^\]]*\]/.test(storn)) fehler.stornobedingungen = 'Bitte ersetze die Platzhalter in eckigen Klammern durch deine Werte.'
const body = {
staffeln, reinigungCent, aufpreisPersonNachtCent: aufpreisCent,
personenInklusive: zahl('personenInklusive', inklusive, 'Bitte gib eine ganze Zahl ab 1 an.', 1, 1000),
+3
View File
@@ -21,6 +21,8 @@ const BIC_RE = /^[A-Z0-9]{8}([A-Z0-9]{3})?$/
const UST_ID_RE = /^[A-Z]{2}[A-Z0-9]{2,18}$/
const SAETZE = [0, 7, 19]
/** Unausgefuellte Platzhalter des Mustertexts ("[30]", "[E-Mail-Adresse des Vermieters]") duerfen nicht zum Gast gelangen. */
export const PLATZHALTER_TEXT = 'Bitte ersetze die Platzhalter in eckigen Klammern durch deine Werte.'
export const MAX_UNTERKUENFTE = 20
export const MAX_ICAL_IMPORTE = 5
export const MAX_STAFFELN = 6
@@ -204,6 +206,7 @@ export function pruefePreise(eingabe) {
}
const sb = text(e.stornobedingungen, 5000)
if (sb.length < 20 || sb.length > 5000) fehler.stornobedingungen = 'Die Stornobedingungen müssen 20 bis 5000 Zeichen lang sein.'
else if (/\[[^\]]*\]/.test(sb)) fehler.stornobedingungen = PLATZHALTER_TEXT
else werte.stornobedingungen = sb
return Object.keys(fehler).length ? { fehler } : { werte }
}
+8
View File
@@ -613,3 +613,11 @@ test('Online-Zahlung: nur mit aktivem Stripe-Konto, sonst 409 mit felder.onlineZ
assert.equal((await put('/einstellungen', { telefon: '123' })).status, 200)
assert.equal((await put('/einstellungen', { onlineZahlung: true })).status, 200)
})
test('Stornobedingungen mit unausgefuellten Platzhaltern in eckigen Klammern werden abgelehnt', () => {
for (const text of ['Bis [30] Tage vor Anreise kostenfrei, sonst Anteil.', 'Stornierung per E-Mail an [E-Mail-Adresse des Vermieters] moeglich.']) {
const r = pruefePreise({ ...PREISE, stornobedingungen: text })
assert.equal(r.fehler?.stornobedingungen, 'Bitte ersetze die Platzhalter in eckigen Klammern durch deine Werte.', text)
}
assert.ok(pruefePreise({ ...PREISE, stornobedingungen: 'Bis 30 Tage vor Anreise kostenfrei, danach 50 Prozent.' }).werte)
})