- App Mi día: KPIs, mis actividades, mis leads con acciones rápidas (contactado/intento/agenda cita/descartar con motivo), captura rápida de lead (409 en duplicado por teléfono), vista equipo para coordinadores - API: GET /api/mi-dia/resumen, POST /api/leads, /leads/:id/estado, /leads/:id/descartar; mapeo Usuario.mondayUserId (seed listo para cuando inviten a los vendedores a Monday) - Landing: tarjeta Mi día; tests api 188, mi-dia 8, landing 4
55 lines
1.8 KiB
TypeScript
55 lines
1.8 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
import { upsertUsuario, type DatosUsuarioSeed } from './seed-usuarios.js'
|
|
|
|
// ---------- Prisma mockeado (seed idempotente sin red ni BD) ----------
|
|
|
|
const prismaMock = vi.hoisted(() => ({
|
|
usuario: {
|
|
findUnique: vi.fn(),
|
|
create: vi.fn(),
|
|
update: vi.fn(),
|
|
count: vi.fn(),
|
|
},
|
|
$disconnect: vi.fn(),
|
|
}))
|
|
|
|
vi.mock('../src/services/prisma.js', () => ({ prisma: prismaMock }))
|
|
|
|
const datos: DatosUsuarioSeed = {
|
|
username: 'erick israel pena ramos',
|
|
nombre: 'ERICK ISRAEL PEÑA RAMOS',
|
|
rol: 'vendedor',
|
|
asignacion: 'MONTEBELLO',
|
|
empleadoId: 13676,
|
|
mondayUserId: null,
|
|
passwordHash: 'hash-inicial',
|
|
}
|
|
|
|
beforeEach(() => {
|
|
vi.clearAllMocks()
|
|
})
|
|
|
|
describe('upsertUsuario (seed idempotente)', () => {
|
|
it('crea el usuario si no existe', async () => {
|
|
prismaMock.usuario.findUnique.mockResolvedValue(null)
|
|
const resultado = await upsertUsuario(datos, false)
|
|
expect(resultado).toBe('creado')
|
|
expect(prismaMock.usuario.create).toHaveBeenCalledWith({ data: datos })
|
|
})
|
|
|
|
it('si ya existe actualiza datos sin tocar el password', async () => {
|
|
prismaMock.usuario.findUnique.mockResolvedValue({ id: 'u-1' })
|
|
const resultado = await upsertUsuario({ ...datos, passwordHash: 'hash-nuevo' }, false)
|
|
expect(resultado).toBe('actualizado')
|
|
const update = prismaMock.usuario.update.mock.calls[0][0]
|
|
expect(update.data).not.toHaveProperty('passwordHash')
|
|
})
|
|
|
|
it('con --reset-passwords sí restablece el password', async () => {
|
|
prismaMock.usuario.findUnique.mockResolvedValue({ id: 'u-1' })
|
|
await upsertUsuario({ ...datos, passwordHash: 'hash-nuevo' }, true)
|
|
const update = prismaMock.usuario.update.mock.calls[0][0]
|
|
expect(update.data.passwordHash).toBe('hash-nuevo')
|
|
})
|
|
})
|