2023-10-16 16:28:12 +00:00
|
|
|
import * as plugins from './plugins.js';
|
|
|
|
import * as paths from './paths.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,
|
|
|
|
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,
|
2024-11-27 11:19:18 +00:00
|
|
|
position: 1,
|
2023-10-16 16:28:12 +00:00
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
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 (letterDataArg: plugins.tsclass.business.ILetter) => {
|
|
|
|
const pdfResult = await testPdfServiceInstance.createPdfFromLetterObject(letterDataArg);
|
|
|
|
await plugins.smartfile.memory.toFs(Buffer.from(pdfResult.buffer), plugins.path.join(paths.nogitDir, `test-${counter++}.pdf`));
|
|
|
|
}
|
|
|
|
await saveResult(testLetterData);
|
|
|
|
await saveResult({
|
|
|
|
...testLetterData,
|
|
|
|
versionInfo: {
|
|
|
|
type: 'draft',
|
|
|
|
version: '1.0.0',
|
|
|
|
}
|
|
|
|
});
|
|
|
|
testLetterData.content.invoiceData.items = [
|
|
|
|
{
|
|
|
|
name: 'Website Creation',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 0,
|
|
|
|
currency: 'EUR',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'Hosting',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 19,
|
|
|
|
currency: 'EUR',
|
|
|
|
},
|
2023-10-17 10:00:36 +00:00
|
|
|
{
|
|
|
|
name: 'Overnight Shipping',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 24,
|
|
|
|
currency: 'EUR',
|
|
|
|
},{
|
|
|
|
name: 'Website Creation',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 0,
|
|
|
|
currency: 'EUR',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'Hosting',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 19,
|
|
|
|
currency: 'EUR',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'Overnight Shipping',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 24,
|
|
|
|
currency: 'EUR',
|
|
|
|
},{
|
|
|
|
name: 'Website Creation',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 0,
|
|
|
|
currency: 'EUR',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'Hosting',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 19,
|
|
|
|
currency: 'EUR',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'Overnight Shipping',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 24,
|
|
|
|
currency: 'EUR',
|
|
|
|
},{
|
|
|
|
name: 'Website Creation',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 0,
|
|
|
|
currency: 'EUR',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'Hosting',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 19,
|
|
|
|
currency: 'EUR',
|
|
|
|
},
|
2023-10-16 16:28:12 +00:00
|
|
|
{
|
|
|
|
name: 'Overnight Shipping',
|
|
|
|
unitQuantity: 1,
|
|
|
|
unitNetPrice: 1200,
|
|
|
|
unitType: 'item',
|
|
|
|
vatPercentage: 24,
|
|
|
|
currency: 'EUR',
|
|
|
|
},
|
|
|
|
],
|
|
|
|
await saveResult({
|
|
|
|
...testLetterData,
|
|
|
|
})
|
|
|
|
});
|
|
|
|
|
|
|
|
tap.test('should stop the service', async () => {
|
|
|
|
await testPdfServiceInstance.stop();
|
|
|
|
});
|
|
|
|
|
|
|
|
tap.start();
|