Buchungskalender: Aufbewahrung und Löschfristen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
knsoandClaude Opus 5.5 committed 2026-10-07 14:38:35 +00:00
1 parent f57a3d477e
commit c019d3c3b0
9 files changed
+719 -13

No files matched your search

+31
View File
@@ -23,6 +23,12 @@ const aw = await startAppwriteMock({
shopOrders: schemaKeys('shopOrders'),
shopWiderrufe: schemaKeys('shopWiderrufe'),
shopRechtstexteArchiv: schemaKeys('shopRechtstexteArchiv'),
ukUnterkuenfte: schemaKeys('ukUnterkuenfte'),
ukPreise: schemaKeys('ukPreise'),
ukSperren: schemaKeys('ukSperren'),
ukAnfragen: schemaKeys('ukAnfragen'),
ukRechnungen: schemaKeys('ukRechnungen'),
ukEinstellungen: schemaKeys('ukEinstellungen'),
},
})
const st = await startFakeStripe()
@@ -673,3 +679,28 @@ test('Webshop: scheitert das Löschen der Shopdaten, bleiben die Abo-Dokumente s
assert.deepEqual(nochmal.held, [])
assert.ok(!aw.docs('shopConfig').has('f_sh4_shop') && !aw.docs('subscriptions').has('sh4_sub'))
})
// ------------------------------------------------------------------------------------------------ Buchungskalender (Task 10)
test('Buchungskalender: fällige Kunden verlieren alle uk*-Daten ihrer Funktion; andere Kunden bleiben; Bericht nennt es', async () => {
for (const [kunde, faellig] of [['uk1', true], ['uk2', false]]) {
sub(`${kunde}_sub`, kunde, faellig ? { status: 'canceled', endedAt: '2022-03-15T10:00:00.000Z' } : { status: 'active' })
if (faellig) stripeSub(`${kunde}_sub`, kunde)
const f = `f_${kunde}`
aw.seed('portalFeatures', { $id: f, customerId: kunde, projectId: `${kunde}p`, featureKey: 'unterkunft', siteKey: 'defghijklmnopqrs', state: 'disabled', enabled: false })
aw.seed('ukEinstellungen', { $id: f, featureId: f, firma: 'Haus' })
aw.seed('ukUnterkuenfte', { $id: `${f}_u`, featureId: f, customerId: kunde, name: 'W', aktiv: false })
aw.seed('ukAnfragen', { $id: `${f}_a`, featureId: f, customerId: kunde, unterkunftId: `${f}_u`, nummer: 'A-X', status: 'bezahlt', gast: '{}' })
aw.seed('ukRechnungen', { $id: `${f}_r`, featureId: f, anfrageId: `${f}_a`, art: 'rechnung', nummer: 'R', datum: '2022-01-01', bruttoCent: 1, inhalt: '{}' })
}
const plan = await findDueDeletions(JAN_2026)
assert.deepEqual(plan.news.find((n) => n.customerId === 'uk1').ukIds, ['f_uk1'])
assert.ok(!plan.news.some((n) => n.customerId === 'uk2'))
assert.match(formatReport(plan), /Kunde uk1: .*1 Buchungskalender samt Anfragen, Rechnungen und Unterkünften zu löschen/)
const result = await applyDeletions({ ...plan, customers: plan.customers.filter((c) => c.customerId === 'uk1'), news: plan.news.filter((n) => n.customerId === 'uk1'), takeover: [] })
assert.equal(result.deleted.unterkuenfte, 1)
assert.equal(result.deleted.ukDocs, 4)
for (const c of ['ukEinstellungen', 'ukUnterkuenfte', 'ukAnfragen', 'ukRechnungen']) assert.equal([...aw.docs(c).values()].filter((d) => d.$id.startsWith('f_uk1')).length, 0, c)
assert.ok(aw.docs('ukAnfragen').has('f_uk2_a'))
assert.match(formatReport(plan, result), /Buchungskalender: 1 Funktion\(en\) gelöscht \(4 Dokument/)
})