Öffnungszeiten: Mails K24–K27 heißen jetzt K27–K30, Feld k24At heißt einschaltMailAt

K24–K26 sind seit dem Webshop-Livegang (main) vergeben; der Mail-Lader sucht die Vorlage über den
Dateianfang, doppelte Nummern hätten die falsche Mail geschickt. Das Feld ist noch nicht in der
Produktion angelegt (zeiten-setup.mjs lief noch nicht), daher jetzt ein sprechender Name.
Spec und Plan behalten die alten Nummern (Hinweis oben im Dokument).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-06 06:00:17 +00:00
1 parent ea4457e6a4
commit c7cd436ec2
34 files changed
+359 -354

No files matched your search

+7 -7
View File
@@ -16,7 +16,7 @@ const { createDocument, updateDocument, getDocument } = await import('../server/
after(() => Promise.all([aw.close(), st.close()]))
const NAMES = ['oeffnungszeiten', 'zeitenErinnerungen']
const FEATURE_KEYS = ['unlockedBy', 'aboEndeAt', 'einbau', 'behaltenSessionId', 'k24At']
const FEATURE_KEYS = ['unlockedBy', 'aboEndeAt', 'einbau', 'behaltenSessionId', 'einschaltMailAt']
const keysOf = (name) => ZEITEN_COLLECTIONS[name].attributes.map((a) => a.key)
/**
@@ -120,13 +120,13 @@ test('zeitenErinnerungen: featureId, datum, createdAt', () => {
])
})
test('portalFeatures bekommt unlockedBy(8), aboEndeAt, einbau(12), behaltenSessionId(128), k24At', () => {
test('portalFeatures bekommt unlockedBy(8), aboEndeAt, einbau(12), behaltenSessionId(128), einschaltMailAt', () => {
assert.deepEqual(ZEITEN_FEATURE_ATTRIBUTES, [
{ key: 'unlockedBy', type: 'string', size: 8, required: false },
{ key: 'aboEndeAt', type: 'datetime', required: false },
{ key: 'einbau', type: 'string', size: 12, required: false },
{ key: 'behaltenSessionId', type: 'string', size: 128, required: false },
{ key: 'k24At', type: 'datetime', required: false },
{ key: 'einschaltMailAt', type: 'datetime', required: false },
])
})
@@ -206,7 +206,7 @@ test('main legt auf leerer Datenbank 2 Collections, alle Attribute und Indizes a
assert.deepEqual(client.calls.attrs.filter((k) => k.startsWith(`${featuresId}.`)), FEATURE_KEYS.map((key) => `${featuresId}.${key}`))
const features = client.state.get(featuresId).attrs
assert.deepEqual(features.get('unlockedBy'), { key: 'unlockedBy', type: 'string', size: 8, required: false })
assert.deepEqual(features.get('k24At'), { key: 'k24At', type: 'datetime', required: false })
assert.deepEqual(features.get('einschaltMailAt'), { key: 'einschaltMailAt', type: 'datetime', required: false })
})
test('main: zweiter Lauf legt nichts mehr an', async () => {
@@ -232,7 +232,7 @@ test('main legt nur fehlende Attribute und Indizes einer vorhandenen Collection
)
assert.deepEqual(
client.calls.attrs.filter((k) => k.startsWith(`${featuresId}.`)),
[`${featuresId}.aboEndeAt`, `${featuresId}.behaltenSessionId`, `${featuresId}.k24At`],
[`${featuresId}.aboEndeAt`, `${featuresId}.behaltenSessionId`, `${featuresId}.einschaltMailAt`],
)
assert.equal(client.calls.collections.length, 1)
})
@@ -256,9 +256,9 @@ test('--check meldet bei vollständigem Stand nichts und ein einzelnes fehlendes
const client = fakeClient()
await main({ client, log: quiet })
assert.deepEqual(await main({ check: true, client, log: quiet }), { missing: [], missingCollections: [], missingIndexes: [] })
client.state.get(featuresId).attrs.delete('k24At')
client.state.get(featuresId).attrs.delete('einschaltMailAt')
const result = await main({ check: true, client, log: quiet })
assert.deepEqual(result.missing.map((a) => `${a.collection}.${a.key}`), [`${featuresId}.k24At`])
assert.deepEqual(result.missing.map((a) => `${a.collection}.${a.key}`), [`${featuresId}.einschaltMailAt`])
assert.deepEqual(result.missingCollections, [])
})