Buchungskalender: Abgleich – Rechnungs-PDF 200-Pfad getestet, 501 nur bei fehlendem Modul

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
knsoandClaude Opus 5.5 committed 2026-10-07 14:52:13 +00:00
1 parent d27f6d5ddb
commit 2eb38032d3
3 files changed
+11 -7

No files matched your search

+2 -1
View File
@@ -606,7 +606,8 @@ router.get('/rechnungen/:datei', route(async (req, res) => {
let modul
try {
modul = await import('../services/unterkunft/rechnungPdf.js')
} catch {
} catch (err) {
if (err?.code !== 'ERR_MODULE_NOT_FOUND') throw err
return res.status(501).json({ fehler: 'nicht_verfuegbar' })
}
const art = dok.art === 'storno' ? 'storno' : 'rechnung'
+4 -3
View File
@@ -294,12 +294,13 @@ test('Webhook charge.refunded: erstattetCent = Maximum, nie zurueck', async () =
assert.equal((await sp.ladeAnfrage(id)).erstattetCent, 7000)
})
test('rechnung.pdf: 200 mit PDF oder 501 ohne Erzeuger; falsches Token 404', async () => {
test('rechnung.pdf: 200 mit PDF; falsches Token 404', async () => {
const { id, token } = await freigegeben()
await post(url(id, token), { rechnungsadresse: ADRESSE, zahlart: 'vorort' })
const r = await send('GET', url(id, token, '/rechnung.pdf'))
assert.ok([200, 501].includes(r.status), String(r.status))
if (r.status === 200) assert.equal(r.headers.get('content-type'), 'application/pdf')
assert.equal(r.status, 200)
assert.equal(r.headers.get('content-type'), 'application/pdf')
assert.ok(String(r.body).startsWith('%PDF-'), 'PDF-Kopf')
assert.equal((await send('GET', url(id, 'falsch', '/rechnung.pdf'))).status, 404)
assert.equal((await send('GET', url(id, token, '/rechnung.pdf') + '&art=storno')).status, 404)
assert.equal((await send('GET', url(id, token, '/rechnung.pdf') + '&art=x')).status, 400)
+5 -3
View File
@@ -474,7 +474,7 @@ test('Stornieren: Erstattung fehlgeschlagen -> 502 erstattung_fehlgeschlagen mit
// ------------------------------------------------------------------------------------------------ Rechnungen
test('Rechnungen: Liste nur des Projekts; PDF fremde Rechnung 404, eigene 200 oder 501, unsichere ID 404', async () => {
test('Rechnungen: Liste nur des Projekts; PDF fremde Rechnung 404, eigene 200 als PDF, unsichere ID 404', async () => {
aw.seed('ukRechnungen', { $id: 'r1', featureId: FEATURE, anfrageId: 'a1', art: 'rechnung', nummer: 'DH-2026-0001', datum: '2026-11-01', bruttoCent: 100, inhalt: JSON.stringify({ anfrageNummer: 'A-X', empfaenger: { name: 'Eva' } }) })
aw.seed('ukRechnungen', { $id: 'rfremd', featureId: 'anderes', anfrageId: 'a9', art: 'rechnung', nummer: 'XX-1', datum: '2026-11-01', bruttoCent: 100, inhalt: '{}' })
const l = (await get('/rechnungen')).body.rechnungen
@@ -488,8 +488,10 @@ test('Rechnungen: Liste nur des Projekts; PDF fremde Rechnung 404, eigene 200 od
assert.equal((await get('/rechnungen/r1')).status, 404)
assert.equal((await get('/rechnungen/..%2F..%2Fx.pdf')).status, 404)
const eigene = await get('/rechnungen/r1.pdf')
assert.ok([200, 501].includes(eigene.status), String(eigene.status))
if (eigene.status === 501) assert.equal(eigene.body.fehler, 'nicht_verfuegbar')
assert.equal(eigene.status, 200)
assert.equal(eigene.headers.get('content-type'), 'application/pdf')
assert.match(eigene.headers.get('content-disposition'), /Rechnung-DH-2026-0001\.pdf/)
assert.ok(String(eigene.body).startsWith('%PDF-'), 'PDF-Kopf')
})
// ------------------------------------------------------------------------------------------------ Stripe