import { ExecutionContext, ForbiddenException } from '@nestjs/common';
import { SoporteHabilitadoGuard } from './soporte-habilitado.guard';

const contexto = (privilegios: string[] | null) =>
  ({
    switchToHttp: () => ({
      getRequest: () => (privilegios ? { sesion: { privilegios: new Set(privilegios) } } : {}),
    }),
  }) as unknown as ExecutionContext;

describe('SoporteHabilitadoGuard', () => {
  const guard = new SoporteHabilitadoGuard();

  it('deja pasar con SOP_IA_USAR (módulo activo y en el perfil)', () => {
    expect(guard.canActivate(contexto(['VEN_FAC_FACTURA_VER', 'SOP_IA_USAR']))).toBe(true);
  });

  it('sin el privilegio (módulo apagado o fuera del perfil): 403 con mensaje para el usuario', () => {
    expect(() => guard.canActivate(contexto(['VEN_FAC_FACTURA_VER']))).toThrow(ForbiddenException);
    expect(() => guard.canActivate(contexto(['VEN_FAC_FACTURA_VER']))).toThrow(/administrador de tu empresa/);
  });

  it('sin sesión: 403', () => {
    expect(() => guard.canActivate(contexto(null))).toThrow(ForbiddenException);
  });
});
