import * as plugins from './plugins.js'; import * as paths from './paths.js'; import * as interfaces from '../ts_shared/interfaces/index.js'; import { expect, tap } from '@push.rocks/tapbundle'; import * as deesDocumentServer from '../ts/index.js'; let testPdfServiceInstance: deesDocumentServer.PdfService; const testLetterData: plugins.tsclass.business.ILetter = { accentColor: null, type: 'invoice', date: null, needsCoverSheet: true, objectActions: [], pdf: null, content: { invoiceData: { id: 'XX-CLIENT-48765', reverseCharge: true, dueInDays: 30, currency: 'EUR', notes: [], type: 'debitnote', billedBy: { address: null, description: null, name: 'Some Service GmbH', type: null, customerNumber: null, email: null, facebookUrl: null, fax: null, legalEntity: null, sepaConnection: { bic: 'BPOTBEB1', iban: 'BE72000000001616', }, }, billedTo: null, status: null, deliveryDate: new Date().getTime(), periodOfPerformance: null, printResult: null, items: [ { name: 'Website Creation', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 0, position: 1, }, ], }, contractData: { contractDate: Date.now(), id: 'LL-CONTRACT-48765', }, textData: [], timesheetData: '', }, from: { name: 'PdfService Test Company', type: 'company', description: 'doing pdf stuff', address: { streetName: 'Awesome Street', houseNumber: '5', city: 'Bremen', country: 'Germany', postalCode: '28359', }, sepaConnection: { bic: 'BPOTBEB1', iban: 'BE72000000001616', }, }, to: { name: 'Awesome To Company', type: 'company', description: 'a company that does stuff', address: { streetName: 'Awesome Street', houseNumber: '5', city: 'Bremen', country: 'Germany', postalCode: '28359', }, }, incidenceId: null, language: null, legalContact: null, logoUrl: null, pdfAttachments: null, subject: 'Invoice XX-CLIENT-48765', versionInfo: { type: 'final', version: '1.0.0', }, }; tap.test('should create a document from an invoice', async () => { testPdfServiceInstance = new deesDocumentServer.PdfService({}); await testPdfServiceInstance.start(); expect(testPdfServiceInstance).toBeInstanceOf(deesDocumentServer.PdfService); }); tap.test('should create an invoice', async () => { let counter = 0; const saveResult = async (optionsArg: { letterData: plugins.tsclass.business.ILetter; documentSettings: interfaces.IDocumentSettings; }) => { const pdfResult = await testPdfServiceInstance.createPdfFromLetterObject(optionsArg); await plugins.smartfile.memory.toFs( Buffer.from(pdfResult.buffer), plugins.path.join(paths.nogitDir, `test-${counter++}.pdf`), ); }; await saveResult({ letterData: testLetterData, documentSettings: {}, }); await saveResult({ letterData: { ...testLetterData, versionInfo: { type: 'draft', version: '1.0.0', }, }, documentSettings: {}, }); (testLetterData.content.invoiceData.items = [ { name: 'Website Creation', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 0, position: 1, }, { name: 'Hosting', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 19, position: 2, }, { name: 'Overnight Shipping', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 24, position: 3, }, { name: 'Website Creation', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 0, position: 4, }, { name: 'Hosting', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 19, position: 5, }, { name: 'Overnight Shipping', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 24, position: 6, }, { name: 'Website Creation', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 0, position: 7, }, { name: 'Hosting', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 19, position: 8, }, { name: 'Overnight Shipping', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 24, position: 9, }, { name: 'Website Creation', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 0, position: 10, }, { name: 'Hosting', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 19, position: 11, }, { name: 'Overnight Shipping', unitQuantity: 1, unitNetPrice: 1200, unitType: 'item', vatPercentage: 24, position: 12, }, ]), await saveResult({ letterData: testLetterData, documentSettings: {}, }); }); tap.test('should stop the service', async () => { await testPdfServiceInstance.stop(); }); tap.start();