feat(cotizador): mensualidades del diferimiento = meses faltantes para la entrega estimada de la unidad (captura de obra)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
// @vitest-environment jsdom
|
||||
import { afterEach, describe, expect, it } from 'vitest'
|
||||
import { act, cleanup, renderHook } from '@testing-library/react'
|
||||
import { APARTADO_ESQUEMA_DEFAULT, useCotizacion } from './useCotizacion'
|
||||
import { APARTADO_ESQUEMA_DEFAULT, mensualidadesParaUnidad, useCotizacion } from './useCotizacion'
|
||||
import { SIN_REGLAS } from '../lib/reglas'
|
||||
import { MENSUALIDADES_DEFAULT, calcularEsquemaFrasa } from '../lib/esquema-frasa'
|
||||
import { INVENTARIO_SEED } from '../data/unidades'
|
||||
@@ -27,7 +27,7 @@ afterEach(cleanup)
|
||||
|
||||
describe('useCotizacion — esquema único FRASA 2026', () => {
|
||||
it('arranca con apartado $15,000, 14 mensualidades y escrituración a la firma', () => {
|
||||
const { result } = montar()
|
||||
const { result } = renderHook(() => useCotizacion(SIN_REGLAS))
|
||||
|
||||
expect(result.current.apartado).toBe(APARTADO_ESQUEMA_DEFAULT)
|
||||
expect(result.current.apartadoEfectivo).toBe(15000)
|
||||
@@ -35,6 +35,34 @@ describe('useCotizacion — esquema único FRASA 2026', () => {
|
||||
expect(result.current.escrituracionDiferida).toBe(false)
|
||||
})
|
||||
|
||||
it('elegir unidad con fecha de entrega: las mensualidades = meses que faltan para entregarla', () => {
|
||||
const { result } = renderHook(() => useCotizacion(SIN_REGLAS))
|
||||
|
||||
act(() => {
|
||||
result.current.setUnidad(unidadDiagonal)
|
||||
})
|
||||
expect(result.current.numMensualidades).toBe(mensualidadesParaUnidad(unidadDiagonal))
|
||||
expect(result.current.numMensualidades).not.toBe(MENSUALIDADES_DEFAULT)
|
||||
})
|
||||
|
||||
it('elegir unidad SIN fecha de entrega: cae al default del esquema (14)', () => {
|
||||
const { result } = renderHook(() => useCotizacion(SIN_REGLAS))
|
||||
|
||||
act(() => {
|
||||
result.current.setUnidad({ ...unidadDiagonal, fechaEntrega: null })
|
||||
})
|
||||
expect(result.current.numMensualidades).toBe(MENSUALIDADES_DEFAULT)
|
||||
})
|
||||
|
||||
it('mensualidadesParaUnidad: acota a 1..36 y cae al default sin fecha', () => {
|
||||
const hoy = new Date('2026-09-29T12:00:00')
|
||||
const base = { ...unidadDiagonal }
|
||||
expect(mensualidadesParaUnidad({ ...base, fechaEntrega: '2026-10-15' }, hoy)).toBe(1)
|
||||
expect(mensualidadesParaUnidad({ ...base, fechaEntrega: '2035-12-31' }, hoy)).toBe(36)
|
||||
expect(mensualidadesParaUnidad({ ...base, fechaEntrega: '2027-09-29' }, hoy)).toBe(12)
|
||||
expect(mensualidadesParaUnidad(null, hoy)).toBe(MENSUALIDADES_DEFAULT)
|
||||
})
|
||||
|
||||
it('el resultado cuadra con calcularEsquemaFrasa sobre el precio de lista', () => {
|
||||
const { result } = montar()
|
||||
const { unidad, acabados } = result.current
|
||||
@@ -42,7 +70,7 @@ describe('useCotizacion — esquema único FRASA 2026', () => {
|
||||
const esperado = calcularEsquemaFrasa({
|
||||
precio: result.current.precioLista,
|
||||
apartado: 15000,
|
||||
numMensualidades: 14,
|
||||
numMensualidades: mensualidadesParaUnidad(unidadDiagonal),
|
||||
escrituracionDiferida: false,
|
||||
})
|
||||
expect(result.current.resultado).toEqual(esperado)
|
||||
|
||||
Reference in New Issue
Block a user