Terminplaner: Hinweistexte nach Recherche, Storno nur bei Preis
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
722c686690
commit
6ec8885bfd
11 files changed
+230
-21
No files matched your search
@@ -12,6 +12,7 @@ import {
|
||||
zahlungText,
|
||||
fehlendePflichtangaben,
|
||||
zeigtWiderruf,
|
||||
hatPreis,
|
||||
} from '../server/services/termine/einstellungen.js'
|
||||
import { VORLAGEN, vorlagenListe, ausVorlage } from '../server/services/termine/vorlagen.js'
|
||||
import { BUNDESLAENDER } from '../server/services/termine/feiertage.js'
|
||||
@@ -116,8 +117,12 @@ test('Vorlagen: Anfrage bei tattoo/handwerk/fotograf, sonst sofort; Werkstatt mi
|
||||
assert.ok(werkstatt.ressourcen.every((r) => r.typ === 'platz'))
|
||||
})
|
||||
|
||||
test('Vorlagen: Stornotext Variante 1 mit Frist aus den Regeln und 50 Prozent, Widerrufssatz bleibt', () => {
|
||||
for (const key of Object.keys(VORLAGEN)) {
|
||||
const MIT_PREIS = (key) => VORLAGEN[key].leistungen.some((l) => l.preisArt !== 'keiner' && l.preisCent > 0)
|
||||
|
||||
test('Vorlagen: Stornotext Variante 1 mit Frist aus den Regeln und 50 Prozent, Widerrufssatz bleibt (Vorlagen mit Preis)', () => {
|
||||
const mitPreis = Object.keys(VORLAGEN).filter(MIT_PREIS)
|
||||
assert.ok(mitPreis.length >= 7, 'die meisten Vorlagen haben Preise')
|
||||
for (const key of mitPreis) {
|
||||
const e = ausVorlage(key, BETRIEB, NOW)
|
||||
const text = e.storno.text
|
||||
assert.ok(text.startsWith(`Sie können Ihren Termin bis ${e.regeln.absageBisStd} Stunden vorher kostenlos absagen oder verschieben (Link in der Bestätigungsmail).`), key)
|
||||
@@ -129,6 +134,26 @@ test('Vorlagen: Stornotext Variante 1 mit Frist aus den Regeln und 50 Prozent, W
|
||||
}
|
||||
})
|
||||
|
||||
test('vorlage_ohne_preis_ohne_storno: eine Vorlage, deren Leistungen alle kostenlos sind, bringt keinen Stornotext mit; Vorlagen mit Preisen bleiben unverändert', () => {
|
||||
const ohnePreis = Object.keys(VORLAGEN).filter((key) => !MIT_PREIS(key))
|
||||
assert.deepEqual(ohnePreis.sort(), ['handwerk', 'sonstiges'], 'diese beiden Vorlagen haben nur kostenlose Leistungen')
|
||||
for (const key of ohnePreis) {
|
||||
const e = ausVorlage(key, BETRIEB, NOW)
|
||||
assert.ok(e.leistungen.every((l) => !hatPreis(l)), key)
|
||||
assert.equal(e.storno.text, '', `${key}: kein Stornotext`)
|
||||
assert.equal(e.storno.version, '', `${key}: und keine Fassungsnummer`)
|
||||
assert.deepEqual(gueltig(e, { bisher: e }), e, `${key}: stabil`)
|
||||
}
|
||||
// mit Preisen: der Vorschlag steht wie bisher im Entwurf (50 % / 24 h für Salon)
|
||||
for (const key of Object.keys(VORLAGEN).filter(MIT_PREIS)) {
|
||||
const e = ausVorlage(key, BETRIEB, NOW)
|
||||
assert.equal(e.storno.text, VORLAGEN[key].storno, key)
|
||||
assert.equal(e.storno.version, '2026-10-02-1', key)
|
||||
}
|
||||
// die Vorlagendaten selbst bleiben unverändert (der Text steht dort weiter, ausVorlage entscheidet)
|
||||
assert.ok(VORLAGEN.handwerk.storno.includes('50 %'))
|
||||
})
|
||||
|
||||
test('Vorlagen: zwei Aufrufe ergeben verschiedene IDs und Feed-Token; Kleinunternehmer wird uebernommen', () => {
|
||||
const a = ausVorlage('salon', BETRIEB, NOW)
|
||||
const b = ausVorlage('salon', { ...BETRIEB, kleinunternehmer: true }, NOW)
|
||||
|
||||
Reference in new issue
Block a user