242 lines
5.4 KiB
TypeScript
242 lines
5.4 KiB
TypeScript
import * as plugins from './plugins.js';
|
|
import * as paths from './paths.js';
|
|
import * as interfaces from '../ts/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();
|