26 lines
1.2 KiB
TypeScript
26 lines
1.2 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { resolvePrecioUnitario } from '@/budget/resolve';
|
|
import type { CatalogItem } from '@/budget/types';
|
|
|
|
const catalog: CatalogItem[] = [
|
|
{ id: 's-media', categoria: 'suelo', nombre: 'Cerámico medio', calidad: 'media', precioUnit: 2800, unidad: 'm2', descriptorRender: 'suelo cerámico gris', esDefault: true, sku: 'SUE-M' },
|
|
{ id: 's-premium', categoria: 'suelo', nombre: 'Porcelánico roble', calidad: 'premium', precioUnit: 4500, unidad: 'm2', descriptorRender: 'porcelánico símil roble', esDefault: true, sku: 'SUE-P' },
|
|
];
|
|
|
|
describe('resolvePrecioUnitario', () => {
|
|
it('devuelve el default de la calidad cuando no hay selección', () => {
|
|
const { item } = resolvePrecioUnitario('suelo', 'media', catalog, {});
|
|
expect(item?.id).toBe('s-media');
|
|
});
|
|
|
|
it('prioriza la selección exacta sobre la calidad global', () => {
|
|
const { item } = resolvePrecioUnitario('suelo', 'media', catalog, { suelo: 's-premium' });
|
|
expect(item?.id).toBe('s-premium');
|
|
});
|
|
|
|
it('devuelve null si no hay default para esa calidad ni selección', () => {
|
|
const { item } = resolvePrecioUnitario('pared', 'media', catalog, {});
|
|
expect(item).toBeNull();
|
|
});
|
|
});
|