Terminplaner TP2: Fragebogen-Attribut, Branchen, Schritte, Normalisierung
termineConfig bekommt das Attribut fragebogen (Text 20000, Inhalt bis FRAGEBOGEN_MAX 16000). fragebogen.js: SCHRITTE, BRANCHEN (Vorlagen plus Gesundheitsbereich), leerFragebogen und normalisiereFragebogen. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
36b36bcc4d
commit
ab47fabcb2
4 files changed
+416
-1
No files matched your search
@@ -75,7 +75,7 @@ const expectedIndexes = NAMES.flatMap((name) => TERMINE_COLLECTIONS[name].indexe
|
||||
|
||||
test('Schema: Attribute je Collection wie in der Spezifikation', () => {
|
||||
assert.deepEqual(Object.keys(TERMINE_COLLECTIONS), NAMES)
|
||||
assert.deepEqual(keysOf('termineConfig'), ['customerId', 'projectId', 'einstellung', 'version', 'updatedAt', 'updatedBy'])
|
||||
assert.deepEqual(keysOf('termineConfig'), ['customerId', 'projectId', 'einstellung', 'version', 'updatedAt', 'updatedBy', 'fragebogen'])
|
||||
assert.deepEqual(keysOf('termineBookings'), [
|
||||
'featureId', 'customerId', 'projectId', 'leistungId', 'leistungName', 'ressourceId', 'ressourceName',
|
||||
'startsAt', 'endsAt', 'blockEndsAt', 'status', 'quelle',
|
||||
@@ -101,6 +101,8 @@ test('Schema: Typen und Groessen', () => {
|
||||
assert.equal(settings.updatedAt.type, 'datetime')
|
||||
assert.equal(settings.updatedBy.size, 100)
|
||||
assert.equal(settings.projectId.size, 64)
|
||||
// TP2: Fragebogen als JSON-Text; der Inhalt ist auf 16000 Zeichen begrenzt (FRAGEBOGEN_MAX), die Spalte ist groesser
|
||||
assert.deepEqual(settings.fragebogen, { key: 'fragebogen', type: 'string', size: 20000, required: false })
|
||||
|
||||
const bookings = byKey('termineBookings')
|
||||
const sizes = {
|
||||
@@ -313,6 +315,29 @@ test('main: legt idx_booking der Mail-Warteschlange an; eine vorhandene termineO
|
||||
assert.deepEqual(client.calls.attrs.filter((k) => k.startsWith('termineOutbox.')), [])
|
||||
})
|
||||
|
||||
test('main --check meldet in einer vorhandenen termineConfig ohne fragebogen genau dieses Attribut; der Lauf ohne --check legt es an, der zweite nichts', async () => {
|
||||
const ohneFragebogen = keysOf('termineConfig').filter((key) => key !== 'fragebogen')
|
||||
const vorhanden = () => fakeClient({ termineConfig: { attrs: ohneFragebogen } })
|
||||
|
||||
const lines = []
|
||||
const pruefung = vorhanden()
|
||||
const offen = await main({ check: true, client: pruefung, log: (line) => lines.push(line) })
|
||||
assert.ok(lines.some((line) => line.includes('termineConfig.fragebogen FEHLT')), lines.join('\n'))
|
||||
assert.deepEqual(offen.missing.filter((a) => a.collection === 'termineConfig').map((a) => a.key), ['fragebogen'])
|
||||
assert.deepEqual(offen.missingCollections.includes('termineConfig'), false)
|
||||
assert.deepEqual(pruefung.calls.attrs, [], '--check legt nichts an')
|
||||
|
||||
const client = vorhanden()
|
||||
await main({ client, log: quiet })
|
||||
assert.deepEqual(client.calls.attrs.filter((k) => k.startsWith('termineConfig.')), ['termineConfig.fragebogen'])
|
||||
assert.deepEqual(client.state.get('termineConfig').attrs.get('fragebogen'), { key: 'fragebogen', type: 'string', size: 20000, required: false })
|
||||
assert.ok(!client.calls.collections.some((c) => c.id === 'termineConfig'), 'vorhandene Collection wird nicht neu angelegt')
|
||||
|
||||
client.calls.attrs.length = 0
|
||||
await main({ client, log: quiet })
|
||||
assert.deepEqual(client.calls.attrs, [], 'der zweite Lauf legt nichts an')
|
||||
})
|
||||
|
||||
test('main --check legt nichts an und meldet Fehlendes', async () => {
|
||||
const client = fakeClient()
|
||||
const lines = []
|
||||
|
||||
Reference in new issue
Block a user