K22: Abo-Ende nur bei beendetem Wartungs-Abo (nicht das Datum eines Hosting-Abos)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-05 07:04:52 +00:00
1 parent bea07e73b1
commit be007af7d0
2 files changed
+10 -1

No files matched your search

+2 -1
View File
@@ -139,7 +139,8 @@ export async function meldeAboEnde(doc, { lage = null, now, onGesendet = null })
const beginn = new Date(Number.isFinite(zeitMs(doc.disabledAt)) ? zeitMs(doc.disabledAt) : nowMs) // disabledAt fehlt nie, ausser bei Altdaten const beginn = new Date(Number.isFinite(zeitMs(doc.disabledAt)) ? zeitMs(doc.disabledAt) : nowMs) // disabledAt fehlt nie, ausser bei Altdaten
// enddatum ist der Tag des Abo-Endes (lage.endedAt: endedAt || canceledAt des Abos), wenn bekannt - das Abschalten kann Tage danach liegen; // enddatum ist der Tag des Abo-Endes (lage.endedAt: endedAt || canceledAt des Abos), wenn bekannt - das Abschalten kann Tage danach liegen;
// sonst (Sofortpfad, Nachlauf ohne Abo-Lesen, kein lesbares Datum) der Tag des Abschaltens. loeschdatum bleibt 30 Tage nach dem Abschalten. // sonst (Sofortpfad, Nachlauf ohne Abo-Lesen, kein lesbares Datum) der Tag des Abschaltens. loeschdatum bleibt 30 Tage nach dem Abschalten.
const aboEnde = zeitMs(lage?.endedAt) // Nur bei art 'beendet' ist lage.endedAt das Ende des Wartungs-Abos; bei 'hosting' gehoert es zum Hosting-Abo (etwa eine vorgemerkte Kuendigung).
const aboEnde = lage?.art === 'beendet' ? zeitMs(lage.endedAt) : NaN
const ende = Number.isFinite(aboEnde) ? new Date(aboEnde) : beginn const ende = Number.isFinite(aboEnde) ? new Date(aboEnde) : beginn
const grundBlock = vorEinrichtung const grundBlock = vorEinrichtung
? { vor_einrichtung: true } ? { vor_einrichtung: true }
+8
View File
@@ -632,6 +632,14 @@ test('C3: ohne endedAt gilt canceledAt, ohne beides der Tag des Abschaltens (dis
assert.match(mails().at(-1).text, /weil Dein Wartungs-Abo am 05\.10\.2026 beendet wurde/, 'unlesbares endedAt: disabledAt') assert.match(mails().at(-1).text, /weil Dein Wartungs-Abo am 05\.10\.2026 beendet wurde/, 'unlesbares endedAt: disabledAt')
}) })
test('C3: bei einem Hosting-Abo nennt K22 den Tag des Abschaltens, nicht das Kuendigungsdatum des Hosting-Abos', async () => {
const id = legeFunktion(1, { state: 'disabled', enabled: false, disabledReason: 'abo_ende', disabledAt: JETZT.toISOString() })
assert.equal(await meldeAboEnde(funktion(id), { lage: { laeuft: false, art: 'hosting', endedAt: AM_ABO_ENDE.toISOString() }, now: JETZT }), true)
const text = mails().at(-1).text
assert.match(text, /05\.10\.2026/, 'Tag des Abschaltens')
assert.doesNotMatch(text, /02\.10\.2026/, 'nicht das Datum des Hosting-Abos')
})
test('C3: K22 vor_einrichtung nennt ebenfalls das Abo-Ende', async () => { test('C3: K22 vor_einrichtung nennt ebenfalls das Abo-Ende', async () => {
legeAufbau(1) legeAufbau(1)
wartung('canceled', { endedAt: AM_ABO_ENDE.toISOString() }) wartung('canceled', { endedAt: AM_ABO_ENDE.toISOString() })