UNPKG

@accounter/shaam6111-generator

Version:

Fully typed application that generates, parses, and validates SHAAM 6111 tax reports.

89 lines (80 loc) 3.68 kB
import { describe, expect, it } from 'vitest'; import { taxAdjustmentArraySchema } from '../src/schemas/tax-adjustment.js'; // Valid tax adjustment records example const validTaxAdjustmentRecords = [ { code: 110, amount: 5000 }, { code: 120, amount: 3000 }, { code: 130, amount: 2000 }, { code: 140, amount: 1000 }, { code: 150, amount: 1500 }, { code: 370, amount: 8500 }, { code: 400, amount: 2000 }, { code: 430, amount: 1000 }, { code: 480, amount: 500 }, { code: 490, amount: 700 }, { code: 500, amount: 1200 }, ]; describe('taxAdjustmentArraySchema', () => { it('should validate valid tax adjustment records', () => { const result = taxAdjustmentArraySchema.safeParse(validTaxAdjustmentRecords); expect(result.success).toBe(true); }); it('should fail validation for an invalid code', () => { const invalidRecords = [...validTaxAdjustmentRecords, { code: 9999, amount: 1000 }]; const result = taxAdjustmentArraySchema.safeParse(invalidRecords); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues[0].message).toBe('Invalid code for tax adjustment section'); } }); it('should fail validation for duplicate codes', () => { const duplicateRecords = [...validTaxAdjustmentRecords, { code: 110, amount: 2000 }]; const result = taxAdjustmentArraySchema.safeParse(duplicateRecords); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues[0].message).toContain('Duplicate code'); } }); it('should fail validation for negative amounts on non-negative codes', () => { const invalidRecords = [...validTaxAdjustmentRecords]; // Replace records with negative amounts for codes that don't allow them const index110 = invalidRecords.findIndex(record => record.code === 110); const index370 = invalidRecords.findIndex(record => record.code === 370); if (index110 >= 0) invalidRecords[index110] = { code: 110, amount: -500 }; if (index370 >= 0) invalidRecords[index370] = { code: 370, amount: -3000 }; const result = taxAdjustmentArraySchema.safeParse(invalidRecords); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues[0].message).toContain('does not allow negative amounts'); } if (!result.success) { expect(result.error.issues[0].message).toContain('does not allow negative amounts'); expect(result.error.issues[0].path).toContain(index110); } }); it('should validate records with correct summary calculations', () => { // Testing the summary calculation rule: code 370 should equal the sum of other specific codes // In this simple case, we're just providing a few codes without triggering any sum validations const validRecordsWithSummary = [ { code: 110, amount: 5000 }, { code: 130, amount: 3000 }, { code: 370, amount: 2000 }, ]; const result = taxAdjustmentArraySchema.safeParse(validRecordsWithSummary); expect(result.success).toBe(true); }); it('should fail validation for incorrect summary calculations', () => { // Code 370 should equal the sum of codes 110 and 120, which is 8000 // Setting it to 1000 should trigger a validation error const invalidSummaryRecords = [ { code: 110, amount: 5000 }, { code: 120, amount: 3000 }, { code: 370, amount: 1000 }, // Incorrect summary ]; const result = taxAdjustmentArraySchema.safeParse(invalidSummaryRecords); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues[0].message).toContain('should equal the sum'); } }); });