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]) })