Terminplaner TP2: Fragebogen im Kontext und Speicher

kontext.js: ctx.fragebogen (normalisiert; fehlt er oder ist er kaputt, der leere,
kaputt mit einer Logzeile und ohne Wurf), ladeEinstellung liefert zusaetzlich
fragebogen, neuer kontextFuerPortal(feature) fuer das Portal in jedem Zustand.
speichereFragebogen schreibt unter termine-cfg:<id> nur fragebogen, updatedAt und
updatedBy (ohne version; fehlt das Dokument: 409 keine_einstellung). Neue Option
fragebogen bei speichereEinstellung schreibt Einstellung und Fragebogen in
derselben Sperre. kontextPerSiteKey bleibt unveraendert (Entwurf nie oeffentlich),
Tests dazu fuer off, ordered, setup, disabled und nach activate. Der Test
ladeEntwurf in funktionenCheckout.test.js schaltet die neue Logzeile stumm.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-04 19:14:22 +00:00
1 parent 008ad4fb1e
commit 31aa80affd
3 files changed
+481 -31

No files matched your search

+20 -19
View File
@@ -1155,28 +1155,29 @@ test('ladeEntwurf: Einstellung und Fragebogen aus termineConfig, fehlend oder ka
const doc = (extra) => aw.seed('termineConfig', { $id: 'f_p1_termine', customerId: 'c1', projectId: 'p1', einstellung: JSON.stringify(einstellung), version: 3, updatedAt: new Date().toISOString(), updatedBy: 'x', ...extra })
assert.deepEqual(await order.ladeEntwurf('f_p1_termine'), { einstellung: null, fragebogen: null }, 'kein Dokument')
doc({ fragebogen: JSON.stringify(fragebogen) })
assert.deepEqual(await order.ladeEntwurf('f_p1_termine'), { einstellung, fragebogen })
doc({})
assert.deepEqual(await order.ladeEntwurf('f_p1_termine'), { einstellung, fragebogen: null }, 'Attribut fehlt')
for (const kaputt of ['{kaputt', '', '[1,2]', '42', '"text"', 'null']) {
doc({ fragebogen: kaputt })
assert.deepEqual(await order.ladeEntwurf('f_p1_termine'), { einstellung, fragebogen: null }, `fragebogen ${JSON.stringify(kaputt)}`)
}
// Einstellung unlesbar: null (der Fehler wird im Kontext-Modul geloggt), der Fragebogen bleibt
const log = stumm()
// ladeEinstellung (Kontext-Modul) meldet einen Fragebogen, den die Normalisierung ablehnt, mit einer Logzeile: hier stumm
const leise = stumm()
try {
doc({ fragebogen: JSON.stringify(fragebogen) })
assert.deepEqual(await order.ladeEntwurf('f_p1_termine'), { einstellung, fragebogen })
doc({})
assert.deepEqual(await order.ladeEntwurf('f_p1_termine'), { einstellung, fragebogen: null }, 'Attribut fehlt')
for (const kaputt of ['{kaputt', '', '[1,2]', '42', '"text"', 'null']) {
doc({ fragebogen: kaputt })
assert.deepEqual(await order.ladeEntwurf('f_p1_termine'), { einstellung, fragebogen: null }, `fragebogen ${JSON.stringify(kaputt)}`)
}
// Einstellung unlesbar: null (der Fehler wird im Kontext-Modul geloggt), der Fragebogen bleibt
doc({ einstellung: '{kaputt', fragebogen: JSON.stringify(fragebogen) })
assert.deepEqual(await order.ladeEntwurf('f_p1_termine'), { einstellung: null, fragebogen })
// Lesefehler werden nicht verschluckt
doc({ fragebogen: JSON.stringify(fragebogen) })
aw.failNext({ collection: 'termineConfig', status: 500 })
await assert.rejects(order.ladeEntwurf('f_p1_termine'))
aw.failNext({ collection: 'termineConfig', method: 'GET', status: 500, after: 1 })
await assert.rejects(order.ladeEntwurf('f_p1_termine'))
await assert.doesNotReject(order.ladeEntwurf('f_p1_termine'))
await assert.rejects(order.ladeEntwurf(''), TypeError)
} finally {
log.mock.restore()
leise.mock.restore()
}
// Lesefehler werden nicht verschluckt
doc({ fragebogen: JSON.stringify(fragebogen) })
aw.failNext({ collection: 'termineConfig', status: 500 })
await assert.rejects(order.ladeEntwurf('f_p1_termine'))
aw.failNext({ collection: 'termineConfig', method: 'GET', status: 500, after: 1 })
await assert.rejects(order.ladeEntwurf('f_p1_termine'))
await assert.doesNotReject(order.ladeEntwurf('f_p1_termine'))
await assert.rejects(order.ladeEntwurf(''), TypeError)
})