mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.6 KiB
50 lines
1.6 KiB
import { HttpException } from '@nestjs/common';
|
|
import { Reflector } from '@nestjs/core';
|
|
import { ExecutionContextHost } from '@nestjs/core/helpers/execution-context-host';
|
|
|
|
import { HasPermissionGuard } from './has-permission.guard';
|
|
|
|
describe('HasPermissionGuard', () => {
|
|
let guard: HasPermissionGuard;
|
|
let reflector: Reflector;
|
|
|
|
beforeEach(async () => {
|
|
reflector = new Reflector();
|
|
guard = new HasPermissionGuard(reflector);
|
|
});
|
|
|
|
function setupReflectorSpy(returnValue: string) {
|
|
jest.spyOn(reflector, 'get').mockReturnValue(returnValue);
|
|
}
|
|
|
|
function createMockExecutionContext(permissions: string[]) {
|
|
return new ExecutionContextHost([
|
|
{
|
|
user: {
|
|
permissions // Set user permissions based on the argument
|
|
}
|
|
}
|
|
]);
|
|
}
|
|
|
|
it('should deny access if the user does not have any permission', () => {
|
|
setupReflectorSpy('required-permission');
|
|
const noPermissions = createMockExecutionContext([]);
|
|
|
|
expect(() => guard.canActivate(noPermissions)).toThrow(HttpException);
|
|
});
|
|
|
|
it('should deny access if the user has the wrong permission', () => {
|
|
setupReflectorSpy('required-permission');
|
|
const wrongPermission = createMockExecutionContext(['wrong-permission']);
|
|
|
|
expect(() => guard.canActivate(wrongPermission)).toThrow(HttpException);
|
|
});
|
|
|
|
it('should allow access if the user has the required permission', () => {
|
|
setupReflectorSpy('required-permission');
|
|
const rightPermission = createMockExecutionContext(['required-permission']);
|
|
|
|
expect(guard.canActivate(rightPermission)).toBe(true);
|
|
});
|
|
});
|
|
|