Spaces:
Sleeping
Sleeping
File size: 3,258 Bytes
55d9355 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | import test from 'node:test';
import assert from 'node:assert/strict';
import { adoptedValues, applyImportDefaults, importDefaults, decimalValue, EMPTY_REASON } from '../src/importDefaults.js';
const imported = (patch = {}) => ({
preview: { tipo: 'evolutivo', avaliacoes: [{ id: 'evo-1', modelo: 'MODELO_A' }, { id: 'evo-2', modelo: 'MODELO_A' }],
sugestoes: { motivos_desvalorizantes: [{ descricao: 'Sem esgoto', alegado: false, confirmado: true }] } },
referenciaAnos: 'ano_base', anos: { 'evo-1': '2025', 'evo-2': '2023' }, ...patch,
});
test('importação preenche motivos, método, modelo e referências ordenadas', () => {
const defaults = importDefaults(imported());
assert.equal(defaults.metodo_avaliacao, 'Método Comparativo Dados de Mercado - ABNT NBR 14.653-2 e Método de Quantificação de Custo');
assert.equal(defaults.modelo_avaliacao, 'MODELO_A');
assert.equal(defaults.datas_referencia, 'Dezembro/2023, Dezembro/2025');
assert.deepEqual(defaults.motivos_desvalorizantes, [{ descricao: 'Sem esgoto', alegado: false, confirmado: true }]);
});
test('corrigir exercício ou ano-base atualiza somente os campos ainda automáticos', () => {
const previous = importDefaults(imported());
const next = importDefaults(imported({ referenciaAnos: 'exercicio_iptu' }));
const form = { ...previous, modelo_avaliacao: 'Texto revisado', motivos_desvalorizantes: [] };
const result = applyImportDefaults(form, next, previous, new Set(['modelo_avaliacao', 'motivos_desvalorizantes']));
assert.equal(result.datas_referencia, 'Dezembro/2022, Dezembro/2024');
assert.equal(result.modelo_avaliacao, 'Texto revisado');
assert.deepEqual(result.motivos_desvalorizantes, []);
});
test('trocar arquivo substitui sugestões e preserva inclusive edições vazias', () => {
const previous = importDefaults(imported());
const next = { ...previous, modelo_avaliacao: 'MODELO_B', datas_referencia: 'Dezembro/2020' };
const result = applyImportDefaults({ ...previous, datas_referencia: '' }, next, previous, new Set(['datas_referencia']));
assert.equal(result.modelo_avaliacao, 'MODELO_B');
assert.equal(result.datas_referencia, '');
});
test('remover arquivo limpa sugestões antigas e mantém campos manuais', () => {
const previous = importDefaults(imported());
const result = applyImportDefaults({ ...previous, numero_laudo: 'LA_01', modelo_avaliacao: 'Manual' }, {}, previous, new Set(['modelo_avaliacao']));
assert.equal(result.modelo_avaliacao, 'Manual');
assert.equal(result.metodo_avaliacao, '');
assert.equal(result.numero_laudo, 'LA_01');
assert.deepEqual(result.motivos_desvalorizantes, [EMPTY_REASON]);
});
test('referências pendentes não são adivinhadas', () => {
assert.equal(importDefaults(imported({ anos: {} })).datas_referencia, '');
});
test('valores adotados aceitam reais e zero sem perder a parte decimal', () => {
assert.deepEqual(adoptedValues({ valoresAdotados: { a: 'R$ 1.234.567,89', b: '0,00', c: '100.12' } }),
{ a: '1234567.89', b: '0.00', c: '100.12' });
for (const input of ['', '-1', 'NaN', '1..2,00', '1,234', '1e3']) assert.equal(decimalValue(input), null);
assert.throws(() => adoptedValues({ valoresAdotados: { a: '' } }), /valores de mercado válidos/);
});
|