feat(alta): conversión directa afluencia → alta de cliente
Tras registrar la afluencia, la pantalla de éxito ofrece 'Pasar a Alta de Cliente': abre el wizard prellenado con los datos recién capturados (nombre, email, celular) y el leadMondayId ya ligado, sin rebuscar el lead. Quedan también 'Capturar otro' y 'Volver'.
This commit is contained in:
@@ -26,7 +26,7 @@ const llenarRequeridos = () => {
|
||||
|
||||
describe('AltaAfluenciaForm', () => {
|
||||
it('sin nombre ni teléfono no llama al API y muestra los errores', () => {
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} />)
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} onPasarAAltaCliente={() => undefined} />)
|
||||
fireEvent.click(screen.getByRole('button', { name: /Registrar en afluencia/ }))
|
||||
|
||||
expect(fetchMock).not.toHaveBeenCalled()
|
||||
@@ -35,7 +35,7 @@ describe('AltaAfluenciaForm', () => {
|
||||
})
|
||||
|
||||
it('con email inválido no llama al API', () => {
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} />)
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} onPasarAAltaCliente={() => undefined} />)
|
||||
llenarRequeridos()
|
||||
fireEvent.change(screen.getByLabelText(/^Email/), { target: { value: 'correo-malo' } })
|
||||
fireEvent.click(screen.getByRole('button', { name: /Registrar en afluencia/ }))
|
||||
@@ -46,7 +46,7 @@ describe('AltaAfluenciaForm', () => {
|
||||
|
||||
it('al registrar (201) muestra el mensaje de éxito', async () => {
|
||||
fetchMock.mockResolvedValueOnce(respuesta({ id: 'l-1', estado: 'NUEVO', oportunidadId: 'op-1' }))
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} />)
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} onPasarAAltaCliente={() => undefined} />)
|
||||
llenarRequeridos()
|
||||
fireEvent.change(screen.getByLabelText(/^Origen/), { target: { value: 'Web' } })
|
||||
fireEvent.change(screen.getByLabelText(/Desarrollo de interés/), { target: { value: 'SENDA' } })
|
||||
@@ -69,7 +69,7 @@ describe('AltaAfluenciaForm', () => {
|
||||
fetchMock.mockResolvedValueOnce(
|
||||
respuesta({ error: 'Ya existe un lead con ese teléfono', leadId: 'l-9', nombre: 'ANA DEMO' }, 409),
|
||||
)
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} />)
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} onPasarAAltaCliente={() => undefined} />)
|
||||
llenarRequeridos()
|
||||
fireEvent.click(screen.getByRole('button', { name: /Registrar en afluencia/ }))
|
||||
|
||||
@@ -80,7 +80,7 @@ describe('AltaAfluenciaForm', () => {
|
||||
|
||||
it('con error de red muestra un mensaje reintentable', async () => {
|
||||
fetchMock.mockRejectedValueOnce(new Error('red caída'))
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} />)
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} onPasarAAltaCliente={() => undefined} />)
|
||||
llenarRequeridos()
|
||||
fireEvent.click(screen.getByRole('button', { name: /Registrar en afluencia/ }))
|
||||
|
||||
@@ -91,7 +91,7 @@ describe('AltaAfluenciaForm', () => {
|
||||
|
||||
it('"Capturar otro" limpia el formulario tras el éxito', async () => {
|
||||
fetchMock.mockResolvedValueOnce(respuesta({ id: 'l-1', estado: 'NUEVO', oportunidadId: 'op-1' }))
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} />)
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} onPasarAAltaCliente={() => undefined} />)
|
||||
llenarRequeridos()
|
||||
fireEvent.click(screen.getByRole('button', { name: /Registrar en afluencia/ }))
|
||||
|
||||
@@ -104,8 +104,28 @@ describe('AltaAfluenciaForm', () => {
|
||||
|
||||
it('"Volver" avisa a la pantalla de entrada', () => {
|
||||
const onVolver = vi.fn()
|
||||
render(<AltaAfluenciaForm onVolver={onVolver} />)
|
||||
render(<AltaAfluenciaForm onVolver={onVolver} onPasarAAltaCliente={() => undefined} />)
|
||||
fireEvent.click(screen.getByRole('button', { name: 'Volver' }))
|
||||
expect(onVolver).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('tras el éxito, "Pasar a Alta de Cliente" entrega el lead recién creado', async () => {
|
||||
fetchMock.mockResolvedValueOnce(respuesta({ id: 'l-1', estado: 'NUEVO', oportunidadId: 'op-1' }))
|
||||
const onPasar = vi.fn()
|
||||
render(<AltaAfluenciaForm onVolver={() => undefined} onPasarAAltaCliente={onPasar} />)
|
||||
llenarRequeridos()
|
||||
fireEvent.change(screen.getByLabelText(/^Email/), { target: { value: 'ana@correo.com' } })
|
||||
fireEvent.click(screen.getByRole('button', { name: /Registrar en afluencia/ }))
|
||||
|
||||
fireEvent.click(await screen.findByRole('button', { name: /Pasar a Alta de Cliente/ }))
|
||||
|
||||
expect(onPasar).toHaveBeenCalledWith({
|
||||
id: 'l-1',
|
||||
nombre: 'Ana Demo',
|
||||
telefono: '6641234567',
|
||||
email: 'ana@correo.com',
|
||||
estado: 'NUEVO',
|
||||
origen: '',
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user