Files
Investidor-V2/tests/frontend/fiscal-form-preparation.test.mjs
T

61 lines
2.4 KiB
JavaScript

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',
);
});