import { describe, expect, it } from 'vitest' import { ETAPAS_PIPELINE, normalizarEtapa, rangoEtapa, TRASPASOS } from './etapas.js' describe('normalizarEtapa', () => { it('mapea las etiquetas del maestro ERP a los labels oficiales', () => { expect(normalizarEtapa('APARTADO')).toBe('Apartado') expect(normalizarEtapa('RESERVADO')).toBe('Reserva') expect(normalizarEtapa('VENDIDO')).toBe('Vendido') expect(normalizarEtapa('INTEGRACION')).toBe('Integración') expect(normalizarEtapa('EN ANALISIS')).toBe('En Análisis') expect(normalizarEtapa('AUTORIZADO')).toBe('Autorizado') expect(normalizarEtapa('NOTARIA')).toBe('Notaría') expect(normalizarEtapa('ESCRITURADO')).toBe('Escriturado') expect(normalizarEtapa('ENTREGA')).toBe('Entrega') expect(normalizarEtapa('POSTVENTA')).toBe('PostVenta') }) it('acepta los labels oficiales tal cual (idempotente)', () => { for (const etapa of ETAPAS_PIPELINE) { expect(normalizarEtapa(etapa)).toBe(etapa) } }) it('devuelve null para vacío, DISPONIBLE o desconocidos', () => { expect(normalizarEtapa('')).toBeNull() expect(normalizarEtapa(null)).toBeNull() expect(normalizarEtapa(undefined)).toBeNull() expect(normalizarEtapa('DISPONIBLE')).toBeNull() expect(normalizarEtapa('OTRA COSA')).toBeNull() }) }) describe('rangoEtapa / TRASPASOS', () => { it('el rango sigue el orden oficial 1..10', () => { expect(rangoEtapa('Apartado')).toBe(1) expect(rangoEtapa('Vendido')).toBe(3) expect(rangoEtapa('Escriturado')).toBe(8) expect(rangoEtapa('PostVenta')).toBe(10) }) it('solo Vendido y Escriturado disparan traspaso de departamento', () => { expect(TRASPASOS['Vendido']).toBe('Escrituración') expect(TRASPASOS['Escriturado']).toBe('SAC') expect(Object.keys(TRASPASOS)).toHaveLength(2) }) })