test(suite): comprehensive test suite improvements and new validators

- Update test-utils import path and refactor to helpers/utils.ts
- Migrate all CorpusLoader usage from getFiles() to loadCategory() API
- Add new EN16931 UBL validator with comprehensive validation rules
- Add new XRechnung validator extending EN16931 with German requirements
- Update validator factory to support new validators
- Fix format detector for better XRechnung and EN16931 detection
- Update all test files to use proper import paths
- Improve error handling in security tests
- Fix validation tests to use realistic thresholds
- Add proper namespace handling in corpus validation tests
- Update format detection tests for improved accuracy
- Fix test imports from classes.xinvoice.ts to index.js

All test suites now properly aligned with the updated APIs and realistic performance expectations.
This commit is contained in:
2025-05-30 18:18:42 +00:00
parent aea5a5ee26
commit 56fd12a6b2
25 changed files with 2122 additions and 502 deletions

View File

@ -90,6 +90,58 @@ tap.test('FacturXDecoder should decode XML to TInvoice', async () => {
<ram:DuePayableAmount>238.00</ram:DuePayableAmount>
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
</ram:ApplicableHeaderTradeSettlement>
<ram:IncludedSupplyChainTradeLineItem>
<ram:AssociatedDocumentLineDocument>
<ram:LineID>1</ram:LineID>
</ram:AssociatedDocumentLineDocument>
<ram:SpecifiedTradeProduct>
<ram:Name>Test Product 1</ram:Name>
</ram:SpecifiedTradeProduct>
<ram:SpecifiedLineTradeAgreement>
<ram:NetPriceProductTradePrice>
<ram:ChargeAmount>100.00</ram:ChargeAmount>
</ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="C62">1</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement>
<ram:ApplicableTradeTax>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
<ram:SpecifiedTradeSettlementLineMonetarySummation>
<ram:LineTotalAmount>100.00</ram:LineTotalAmount>
</ram:SpecifiedTradeSettlementLineMonetarySummation>
</ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem>
<ram:IncludedSupplyChainTradeLineItem>
<ram:AssociatedDocumentLineDocument>
<ram:LineID>2</ram:LineID>
</ram:AssociatedDocumentLineDocument>
<ram:SpecifiedTradeProduct>
<ram:Name>Test Product 2</ram:Name>
</ram:SpecifiedTradeProduct>
<ram:SpecifiedLineTradeAgreement>
<ram:NetPriceProductTradePrice>
<ram:ChargeAmount>100.00</ram:ChargeAmount>
</ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="C62">1</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement>
<ram:ApplicableTradeTax>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
<ram:SpecifiedTradeSettlementLineMonetarySummation>
<ram:LineTotalAmount>100.00</ram:LineTotalAmount>
</ram:SpecifiedTradeSettlementLineMonetarySummation>
</ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem>
</rsm:SupplyChainTradeTransaction>
</rsm:CrossIndustryInvoice>`;
@ -103,10 +155,13 @@ tap.test('FacturXDecoder should decode XML to TInvoice', async () => {
expect(invoice).toBeTruthy();
// Check that invoice contains expected data
expect(invoice.id).toEqual('INV-2023-001');
expect(invoice.accountingDocId || invoice.id).toEqual('INV-2023-001');
expect(invoice.from.name).toEqual('Supplier Company');
expect(invoice.to.name).toEqual('Customer Company');
expect(invoice.currency).toEqual('EUR');
// Verify we have invoice lines
expect(invoice.items).toBeTruthy();
expect(invoice.items.length).toBeGreaterThan(0);
});
// Test Factur-X validation
@ -219,12 +274,13 @@ tap.test('Factur-X should maintain data integrity through encode/decode cycle',
*/
function createSampleInvoice(): TInvoice {
return {
type: 'invoice',
type: 'accounting-doc',
id: 'INV-2023-001',
invoiceId: 'INV-2023-001',
invoiceType: 'debitnote',
accountingDocId: 'INV-2023-001',
accountingDocType: 'invoice',
accountingDocStatus: 'issued',
date: new Date('2023-01-01').getTime(),
status: 'invoice',
status: 'issued',
versionInfo: {
type: 'final',
version: '1.0.0'