import test from 'node:test'; import assert from 'node:assert/strict'; import { newFiscalPreparation, readFiscalPreparation, fiscalPreparationIssues, fiscalFormFields, } from '../../resources/js/lib/fiscal-form-preparation.ts'; void test('IVA and IRPC preparations round trip deliberate entries and unknown amounts without zero defaults', () => { for (const kind of ['iva', 'irpc']) { const p = newFiscalPreparation(kind); p.name = 'Investidor de teste'; p.nuit = '123456789'; p.period = kind === 'iva' ? '2026-10' : '2026'; const [first, second] = fiscalFormFields(kind); p.values[first.code] = '123456789012345678901234,01'; p.values[second.code] = ''; const restored = readFiscalPreparation(JSON.stringify(p)); assert.deepEqual(restored, p); assert.deepEqual(fiscalPreparationIssues(restored), []); assert.equal(restored.values[second.code], ''); assert.equal(Object.values(restored.values).includes('0'), false); } }); void test('foreign editions, unknown fields and malformed or oversized files cannot replace preparation', () => { const p = newFiscalPreparation('iva'); for (const v of [ { ...p, sourceHash: 'different' }, { ...p, values: { 999: '1' } }, { ...p, values: [] }, { ...p, nuit: 123 }, { ...p, version: 'later' }, ]) assert.throws(() => readFiscalPreparation(JSON.stringify(v))); assert.throws(() => readFiscalPreparation('{broken')); assert.throws(() => readFiscalPreparation('x'.repeat(100001))); assert.equal(p.kind, 'iva'); assert.deepEqual(p.values, {}); }); void test('invalid format is identified without rounding or discarding an incomplete preparation', () => { const p = newFiscalPreparation('irpc'); p.values['303'] = '1.234'; p.values['304'] = '25,00'; const restored = readFiscalPreparation(JSON.stringify(p)); assert.equal(restored.values['303'], '1.234'); assert.ok( fiscalPreparationIssues(restored).some((i) => i.startsWith('Campo 303:'), ), ); assert.equal( fiscalFormFields('irpc').find((f) => f.code === '303').label, 'Dupla tributação económica', ); assert.equal( fiscalFormFields('irpc').find((f) => f.code === '304').label, 'Dupla tributação internacional', ); });