- Borradores por vendedor (guardar/continuar/eliminar), se limpia al registrar - Pre-llenado con ?cotizacion=<id> (cliente, contacto, proyecto, montos); botón 'Iniciar alta' en Mis cotizaciones del cotizador - Liga remota pública /client/firma/<token> (JWT scope firma-remota, 72h, rate limit, solo datos mínimos sin PLD): firma digital + subida de documentos que prende checkboxes en Monday Apartado - Tokens de liga no sirven como sesión y viceversa - Tests: api 228, alta 82, cotizador 82
55 lines
2.1 KiB
TypeScript
55 lines
2.1 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { cotizacionAPrellenado, type CotizacionParaAlta } from './cotizacionAlta'
|
|
import { PROYECTOS } from '../data/constantes'
|
|
|
|
const base: CotizacionParaAlta = {
|
|
clienteNombre: 'María Elena López García',
|
|
clienteEmail: 'maria@example.com',
|
|
clienteTelefono: '4421234567',
|
|
desarrollo: 'DIAGONAL',
|
|
unidadCodigo: 'U-101',
|
|
precioFinal: 1450000,
|
|
enganche: 217500,
|
|
}
|
|
|
|
describe('cotizacionAPrellenado', () => {
|
|
it('prellena nombre y contacto del cliente', () => {
|
|
const pre = cotizacionAPrellenado(base)
|
|
expect(pre.datosGenerales.nombreCompleto).toBe('MARÍA ELENA LÓPEZ GARCÍA')
|
|
expect(pre.datosGenerales.email).toBe('maria@example.com')
|
|
expect(pre.datosGenerales.celular).toBe('4421234567')
|
|
})
|
|
|
|
it('omite email/celular cuando la cotización no los trae', () => {
|
|
const pre = cotizacionAPrellenado({ ...base, clienteEmail: null, clienteTelefono: null })
|
|
expect(pre.datosGenerales).not.toHaveProperty('email')
|
|
expect(pre.datosGenerales).not.toHaveProperty('celular')
|
|
})
|
|
|
|
it('mapea un desarrollo conocido al dropdown de proyecto', () => {
|
|
const pre = cotizacionAPrellenado(base)
|
|
expect(PROYECTOS).toContain('DIAGONAL')
|
|
expect(pre.viviendaCredito.proyecto).toBe('DIAGONAL')
|
|
expect(pre.viviendaCredito.proyectoOtro).toBe('')
|
|
})
|
|
|
|
it('un desarrollo fuera de PROYECTOS cae en OTRO con el nombre en texto libre', () => {
|
|
const pre = cotizacionAPrellenado({ ...base, desarrollo: 'JURIQUILLA' })
|
|
expect(pre.viviendaCredito.proyecto).toBe('OTRO')
|
|
expect(pre.viviendaCredito.proyectoOtro).toBe('JURIQUILLA')
|
|
})
|
|
|
|
it('prellena unidad, valor de venta y enganche', () => {
|
|
const pre = cotizacionAPrellenado(base)
|
|
expect(pre.viviendaCredito.ubicacion).toBe('U-101')
|
|
expect(pre.viviendaCredito.valorVenta).toBe('1450000')
|
|
expect(pre.viviendaCredito.enganche).toBe('217500')
|
|
})
|
|
|
|
it('montos en cero quedan vacíos (no inventa "0")', () => {
|
|
const pre = cotizacionAPrellenado({ ...base, precioFinal: 0, enganche: 0 })
|
|
expect(pre.viviendaCredito.valorVenta).toBe('')
|
|
expect(pre.viviendaCredito.enganche).toBe('')
|
|
})
|
|
})
|