Gaestetexte/Datenschutz: Storno-Regel im Archiv, PDF-Pruefsumme, PDF-Kopfpruefung

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-05 05:03:54 +00:00
1 parent 9a2a70b491
commit ec320853ce
13 files changed
+124 -12

No files matched your search

+33
View File
@@ -200,6 +200,39 @@ test('featureLegalReady("termine"): je PDF stat und "%PDF-", nie den ganzen Inha
assert.equal(await featureLegalReady('termine'), true, 'mit den ausgelieferten Dateien bereit')
})
// R121: ein Anhang ist ein PDF. Eine leere oder keine PDF-Datei wird nie angehängt, sondern wirft (die Aufrufer fangen den Wurf).
test('legalPdfAttachments: eine leere Datei oder eine Datei ohne "%PDF-" am Anfang wirft, ausgenommene Dokumente zählen nicht', async () => {
const kopien = mkdtempSync(join(tmpdir(), 'legal-anhang-'))
mkdirSync(join(kopien, 'rechtliches'))
const echtePdf = Object.fromEntries(Object.entries(legalPdfFiles('termine', V)).map(([doc, f]) => [doc, f.path]))
const pdfPfad = (doc) => join(kopien, 'rechtliches', echtePdf[doc].split('/').at(-1))
const bereit = () => {
for (const pfad of Object.values(echtePdf)) copyFileSync(pfad, join(kopien, 'rechtliches', pfad.split('/').at(-1)))
}
try {
setLegalDirForTests(kopien)
bereit()
const gut = await legalPdfAttachments('termine', V)
assert.equal(gut.length, 3)
for (const a of gut) assert.equal(a.content.subarray(0, 5).toString('latin1'), '%PDF-')
for (const doc of ['lb', 'avv', 'widerruf']) {
for (const [mangel, inhaltDatei] of [['leer', ''], ['kein PDF', '<html>kein PDF</html>'], ['zu kurz', '%PDF'], ['PDF nicht am Anfang', ' %PDF-1.4\n']]) {
writeFileSync(pdfPfad(doc), inhaltDatei)
await assert.rejects(legalPdfAttachments('termine', V), /PDF/, `${doc}: ${mangel}`)
await assert.rejects(featureLegalAttachments('termine'), /PDF/, `${doc}: ${mangel} (Funktion)`)
// ein ausgenommenes Dokument wird nicht gelesen und darf kaputt sein
const ohne = await legalPdfAttachments('termine', V, { ohne: [doc] })
assert.equal(ohne.length, 2, `${doc}: ${mangel}, ausgenommen`)
}
bereit()
assert.equal((await legalPdfAttachments('termine', V)).length, 3, `${doc}: wieder in Ordnung`)
}
} finally {
setLegalDirForTests(null)
rmSync(kopien, { recursive: true, force: true })
}
})
// Fassung wählbar (Task F8, Fix-Runde 1): K15 schickt die Unterlagen der Fassung, der der Kunde zugestimmt hat
test('featureLegalAttachments / featureLegalReady / featureLegalPaths mit opts.fassung', async () => {
assert.deepEqual(featureLegalPaths('termine'), legalPaths('termine', V))