import { ExecutionContext } from '@nestjs/common';
import { GqlExecutionContext } from '@nestjs/graphql';

import { AdminPanelGuard } from 'src/engine/guards/admin-panel-guard';

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

  it('should return true if user can access full admin panel', async () => {
    const mockContext = {
      getContext: jest.fn(() => ({
        req: {
          user: {
            canAccessFullAdminPanel: true,
          },
        },
      })),
    };

    jest
      .spyOn(GqlExecutionContext, 'create')
      .mockReturnValue(mockContext as any);

    const mockExecutionContext = {} as ExecutionContext;

    const result = await guard.canActivate(mockExecutionContext);

    expect(result).toBe(true);
  });

  it('should return false if user cannot access full admin panel', async () => {
    const mockContext = {
      getContext: jest.fn(() => ({
        req: {
          user: {
            canAccessFullAdminPanel: false,
          },
        },
      })),
    };

    jest
      .spyOn(GqlExecutionContext, 'create')
      .mockReturnValue(mockContext as any);

    const mockExecutionContext = {} as ExecutionContext;

    const result = await guard.canActivate(mockExecutionContext);

    expect(result).toBe(false);
  });
});
