Files
FRASA-CAS/api-gateway/scripts/seed-usuarios.test.ts
Consult AS Technology de11af985e feat(auth): login JWT en API y las 4 apps
- Modelo Usuario + seed desde lista de vendedores (18 usuarios, bcrypt cost 12)
- POST /api/auth/login + /api/auth/me; middleware Bearer en todo /api
  excepto health, login y webhook Monday; flag AUTH_ENABLED
- Username = nombre completo normalizado (case/acentos insensible),
  password inicial Frasa2026, admin vía ADMIN_PASSWORD
- Apps: LoginScreen + AuthGate (StudioBlank), token en localStorage,
  header Authorization en todas las llamadas, logout en 401
- Tests: api 136, cotizador 71, alta 65, cobranza 71, agente-ia 13, landing 4
2026-08-27 08:20:25 +00:00

54 lines
1.7 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,
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')
})
})