61 lines
2.4 KiB
JavaScript
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',
|
|
);
|
|
});
|