fix: correct factorZona zero handling and confidence for unresolved selections

This commit is contained in:
Carlos Narro
2026-05-30 12:28:10 +02:00
parent 58d3f62a76
commit e6f8b47205
2 changed files with 29 additions and 2 deletions

View File

@@ -76,4 +76,29 @@ describe('computeBudget', () => {
const r = computeBudget(inputs({}), config, sinPintura);
expect(r.avisos.some((a) => a.includes('pintura'))).toBe(true);
});
it('usa factor zona 1 para provincia desconocida', () => {
const r = computeBudget(inputs({ provincia: 'Cuenca' }), config, catalog);
expect(r.factorZona).toBe(1);
expect(r.total).toBe(536000); // subtotal sin factor
});
it('respeta un factor zona explícito de 0', () => {
const configZero: PricingConfig = { ...config, factorZona: { ...config.factorZona, Madrid: 0 } };
const r = computeBudget(inputs({ provincia: 'Madrid' }), configZero, catalog);
expect(r.factorZona).toBe(0);
expect(r.total).toBe(0);
});
it('no sube la confianza si la selección apunta a un material inexistente', () => {
const r = computeBudget(inputs({ materialSelections: { suelo: 'no-existe' } }), config, catalog);
expect(r.confianza).toBe('media'); // tiene m² pero la selección no resuelve -> no es alta
});
it('omite carpintería y no rompe para tipos sin mobiliario (salón)', () => {
const r = computeBudget(inputs({ tipoReforma: 'salon' }), config, catalog);
const byKey = Object.fromEntries(r.partidas.map((p) => [p.key, p.importe]));
expect(byKey.carpinteria).toBeUndefined();
expect(r.total).toBeGreaterThan(0);
});
});