Terminplaner: Kunden-Schnittstelle

/api/termine: Einstellungen (Vorlage, PATCH mit Version, Feed-Link), Buchungen
(Liste, Zeiten, von Hand, Sperre, Aktionen), CSV-Export, Protokoll der
Kundenansicht. Pflichtangaben fuer Gaeste (Telefon immer, Anschrift bei
Widerrufsbelehrung) in normalisiereEinstellung, Entwurf aus Vorlagen,
kontextPerSiteKey ohne Pflichtangaben nicht buchbar; speichereEinstellung
nimmt eine Funktion unter der Sperre.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-03 08:17:43 +00:00
1 parent 9e8fd33713
commit e3e198fb1a
10 files changed
+1766 -40

No files matched your search

+17 -7
View File
@@ -305,13 +305,23 @@ test('config: ohne Widerrufsrecht (nur Unternehmer) kein widerruf und keine Bele
assert.deepEqual(Object.keys(body.texte).sort(), ['erinnerung', 'gesundheit', 'storno', 'vorzeitig'])
})
test('config: eine nicht zu erzeugende Belehrung (Anschrift fehlt) ist 503 statt einer Buchung ohne Belehrung', async () => {
const e = einstellung()
e.betrieb.adresse = ''
await speichere(e)
const res = await api('GET', `/${SITE_KEY}/config`)
assert.equal(res.status, 503)
assert.deepEqual(res.body, NICHT_ERREICHBAR)
test('config: ohne Anschrift (Belehrung nicht zu erzeugen) oder Telefon ist die Funktion fuer Gaeste nicht aktiv (R41), nie eine Buchung ohne Belehrung', async () => {
for (const felder of [{ adresse: '' }, { telefon: '' }]) {
const e = einstellung()
Object.assign(e.betrieb, felder) // wie ein Entwurf aus einer Vorlage, gespeichert ohne strenge Pruefung
await speichere(e)
for (const [methode, pfad, body] of [
['GET', 'config'],
['GET', `tage?leistung=${S_SOFORT}&ressource=egal&monat=2026-10`],
['GET', `zeiten?leistung=${S_SOFORT}&ressource=egal&tag=${TAG_FERN}`],
['POST', 'buchungen', buchungBody()],
]) {
const res = await api(methode, `/${SITE_KEY}/${pfad}`, body ? { body } : {})
assert.equal(res.status, 200, `${JSON.stringify(felder)} ${pfad}`)
assert.deepEqual(res.body, AKTIV_FALSE, `${JSON.stringify(felder)} ${pfad}`)
}
assert.equal(aw.docs('termineBookings').size, 0, 'nichts gebucht')
}
})
// ---------------------------------------------------------------- Unbekannt, aus, abgeschaltet