Files
Webklar-Kundenbereich/test/auftraegeAbVorschau.test.js
T

54 lines
3.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { test, after, beforeEach, mock } from 'node:test'
import assert from 'node:assert/strict'
import { starteUmgebung, VON, MELDUNG, festpreisEingabe, kundeDoc, baueDeps, abgelehnt, dateienIn } from './helpers/auftraegeAb.js'
const umg = await starteUmgebung()
const { aw, config, uploadDir } = umg
after(() => umg.schliesse())
beforeEach(umg.zuruecksetzen)
const { getAuftrag, updateAuftrag } = await import('../server/services/auftraege/auftragStore.js')
const { kundeSnapshot } = await import('../server/services/auftraege/auftragSicht.js')
const { AuftragError } = await import('../server/services/auftraege/fehler.js')
const { legeEntwurfAn, vorschauPdf, setzeDepsFuerTests } = await import('../server/services/auftraege/auftraege.js')
beforeEach(() => setzeDepsFuerTests(null))
test('vorschauPdf: Entwurf mit „Entwurf“ als Nummer, aktuellem Kunden und den Einstellungen – ohne etwas zu speichern', async () => {
aw.seed(config.collections.financeSettings, { $id: 'main', steuernummer: '12/345/67890', bankDetailsText: 'IBAN DE00 0000 0000 0000 0000 00' })
const entwurf = await legeEntwurfAn(festpreisEingabe(), { von: VON })
aw.seed(config.collections.customers, kundeDoc({ street: 'Neue Straße 5' })) // der Kunde ändert sich nach dem Entwurf
const { deps, calls } = baueDeps()
assert.deepEqual(await vorschauPdf(entwurf.id, { deps }), Buffer.from('%PDF-1.4 Entwurf'))
assert.equal(calls.pdf.length, 1)
const { auftrag, optionen } = calls.pdf[0]
assert.deepEqual([auftrag.id, auftrag.nummer], [entwurf.id, 'Entwurf'])
assert.deepEqual(auftrag.kunde, kundeSnapshot(kundeDoc({ street: 'Neue Straße 5' })))
assert.equal(auftrag.kunde.strasse, 'Neue Straße 5')
assert.deepEqual(optionen, { settings: { steuernummer: '12/345/67890', bankDetailsText: 'IBAN DE00 0000 0000 0000 0000 00' }, vorschau: true })
assert.equal(calls.token.length + calls.mail.length, 0)
assert.deepEqual(dateienIn(uploadDir), [])
const danach = await getAuftrag(entwurf.id)
assert.deepEqual([danach.status, danach.nummer, danach.kunde], ['entwurf', '', null])
})
test('vorschauPdf: nur Entwürfe (409), unbekannt (404); wirft die PDF-Erzeugung oder liefert sie nichts, gibt es 500 mit fester Meldung; ein AuftragError der PDF-Funktion bleibt erhalten', async () => {
mock.method(console, 'error', () => {})
const entwurf = await legeEntwurfAn(festpreisEingabe(), { von: VON })
await abgelehnt(vorschauPdf('a_gibtsnicht', { deps: baueDeps().deps }), 404, MELDUNG.auftragFehlt)
await abgelehnt(vorschauPdf(entwurf.id, { deps: baueDeps({ pdfFehler: new Error('pdfkit kaputt') }).deps }), 500, MELDUNG.pdf)
await abgelehnt(vorschauPdf(entwurf.id, { deps: baueDeps({ pdf: Buffer.alloc(0) }).deps }), 500, MELDUNG.pdf)
const unvollstaendig = new AuftragError(409, 'Entwurf unvollständig: Anschrift fehlt.')
await abgelehnt(vorschauPdf(entwurf.id, { deps: baueDeps({ pdfFehler: unvollstaendig }).deps }), 409, 'Entwurf unvollständig: Anschrift fehlt.')
await updateAuftrag(entwurf.id, { status: 'versendet' })
await abgelehnt(vorschauPdf(entwurf.id, { deps: baueDeps().deps }), 409, 'Eine Vorschau gibt es nur für Entwürfe.')
})
test('deps: ohne Angabe gilt der Ersatz aus setzeDepsFuerTests, ausdrückliche Angaben haben Vorrang, nötig ist nur die benutzte Funktion', async () => {
const entwurf = await legeEntwurfAn(festpreisEingabe(), { von: VON })
const ersatz = baueDeps({ pdf: Buffer.from('%PDF-1.4 ersatz') })
const eigene = baueDeps({ pdf: Buffer.from('%PDF-1.4 eigene') })
setzeDepsFuerTests(ersatz.deps)
assert.deepEqual(await vorschauPdf(entwurf.id), Buffer.from('%PDF-1.4 ersatz'))
assert.deepEqual(await vorschauPdf(entwurf.id, { deps: { erzeugeAuftragPdf: eigene.deps.erzeugeAuftragPdf } }), Buffer.from('%PDF-1.4 eigene'))
assert.deepEqual([ersatz.calls.pdf.length, eigene.calls.pdf.length], [1, 1])
})