import { tap, expect } from '@push.rocks/tapbundle'; import * as getInvoices from './assets/getasset.js'; import { ValidatorFactory } from '../ts/formats/validator.factory.js'; import { ValidationLevel } from '../ts/interfaces.js'; import { validateXml } from '../ts/index.js'; // Test ValidatorFactory format detection tap.test('ValidatorFactory should detect UBL format', async () => { const path = getInvoices.invoices.XMLRechnung.UBL['EN16931_Einfach.ubl.xml']; const invoice = await getInvoices.getInvoice(path); const xml = invoice.toString('utf8'); const validator = ValidatorFactory.createValidator(xml); expect(validator.constructor.name).toBeTypeOf('string'); expect(validator.constructor.name).toInclude('UBL'); }); tap.test('ValidatorFactory should detect CII/Factur-X format', async () => { const path = getInvoices.invoices.XMLRechnung.CII['EN16931_Einfach.cii.xml']; const invoice = await getInvoices.getInvoice(path); const xml = invoice.toString('utf8'); const validator = ValidatorFactory.createValidator(xml); expect(validator.constructor.name).toBeTypeOf('string'); expect(validator.constructor.name).toInclude('FacturX'); }); // Test UBL validation tap.test('UBL validator should validate valid XML at syntax level', async () => { const path = getInvoices.invoices.XMLRechnung.UBL['EN16931_Einfach.ubl.xml']; const invoice = await getInvoices.getInvoice(path); const xml = invoice.toString('utf8'); const result = validateXml(xml, ValidationLevel.SYNTAX); expect(result.valid).toBeTrue(); expect(result.errors.length).toEqual(0); }); // Test CII validation tap.test('CII validator should validate valid XML at syntax level', async () => { const path = getInvoices.invoices.XMLRechnung.CII['EN16931_Einfach.cii.xml']; const invoice = await getInvoices.getInvoice(path); const xml = invoice.toString('utf8'); const result = validateXml(xml, ValidationLevel.SYNTAX); expect(result.valid).toBeTrue(); expect(result.errors.length).toEqual(0); }); // Test XInvoice integration tap.test('XInvoice class should validate invoices on load when requested', async () => { // Import XInvoice dynamically to prevent circular dependencies const { XInvoice } = await import('../ts/index.js'); // Create XInvoice with validation enabled const options = { validateOnLoad: true }; // Load a UBL invoice with validation const path = getInvoices.invoices.XMLRechnung.UBL['EN16931_Einfach.ubl.xml']; const invoiceBuffer = await getInvoices.getInvoice(path); const xml = invoiceBuffer.toString('utf8'); // Create XInvoice from XML with validation enabled const invoice = await XInvoice.fromXml(xml, options); // Check validation results expect(invoice.isValid()).toBeTrue(); expect(invoice.getValidationErrors().length).toEqual(0); }); // Mark the test file as complete tap.start();