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') }) })