import { resolverPermisos } from './permisos-columnas';

const crearPrisma = (superadmin: boolean, codigos: string[]) => ({
  usuario: { findUnique: jest.fn().mockResolvedValue({ is_superadmin: superadmin }) },
  perfiles_privilegios: {
    findMany: jest
      .fn()
      .mockResolvedValue(codigos.map((codigo) => ({ privilegios: { codigo } }))),
  },
});

describe('resolverPermisos', () => {
  it('devuelve solo los privilegios otorgados', async () => {
    const prisma = crearPrisma(false, ['INV_PRD_PRODUCTO_EDITAR']);
    const r = await resolverPermisos(prisma as any, 'u-1', [
      'INV_PRD_PRODUCTO_EDITAR',
      'INV_PRD_COSTO_EDITAR',
    ]);
    expect(r.has('INV_PRD_PRODUCTO_EDITAR')).toBe(true);
    expect(r.has('INV_PRD_COSTO_EDITAR')).toBe(false);
  });

  it('el superadmin recibe todos los pedidos sin consultar perfiles', async () => {
    const prisma = crearPrisma(true, []);
    const r = await resolverPermisos(prisma as any, 'u-1', [
      'INV_PRD_COSTO_EDITAR',
      'INV_PRD_PRECIO_BASE_EDITAR',
    ]);
    expect(r.size).toBe(2);
    expect(prisma.perfiles_privilegios.findMany).not.toHaveBeenCalled();
  });

  it('sin privilegios pedidos no consulta nada', async () => {
    const prisma = crearPrisma(false, []);
    const r = await resolverPermisos(prisma as any, 'u-1', []);
    expect(r.size).toBe(0);
    expect(prisma.usuario.findUnique).not.toHaveBeenCalled();
  });

  it('usuario sin perfiles no recibe ningún privilegio', async () => {
    const prisma = crearPrisma(false, []);
    const r = await resolverPermisos(prisma as any, 'u-1', ['INV_PRD_COSTO_EDITAR']);
    expect(r.size).toBe(0);
  });
});
