diff --git a/public/buchungen-preise.js b/public/buchungen-preise.js index caa9b13..fe694a8 100644 --- a/public/buchungen-preise.js +++ b/public/buchungen-preise.js @@ -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), diff --git a/server/services/unterkunft/verwaltung.js b/server/services/unterkunft/verwaltung.js index 23a6cb9..c3a5006 100644 --- a/server/services/unterkunft/verwaltung.js +++ b/server/services/unterkunft/verwaltung.js @@ -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 } } diff --git a/test/unterkunftVerwaltung.test.js b/test/unterkunftVerwaltung.test.js index c18d1a4..ac73a5f 100644 --- a/test/unterkunftVerwaltung.test.js +++ b/test/unterkunftVerwaltung.test.js @@ -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) +})