@sync-in/server
Version:
The secure, open-source platform for file storage, sharing, collaboration, and sync
103 lines (102 loc) • 4.21 kB
JavaScript
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
const _tsjest = require("@golevelup/ts-jest");
const _common = require("@nestjs/common");
const _core = require("@nestjs/core");
const _user = require("../constants/user");
const _permissionsdecorator = require("../decorators/permissions.decorator");
const _usermodel = require("../models/user.model");
const _test = require("../utils/test");
const _permissionsguard = require("./permissions.guard");
describe(_permissionsguard.UserPermissionsGuard.name, ()=>{
let reflector;
let permissionsGuard;
let userTest;
let context;
beforeAll(async ()=>{
reflector = new _core.Reflector();
permissionsGuard = new _permissionsguard.UserPermissionsGuard(reflector);
userTest = new _usermodel.UserModel((0, _test.generateUserTest)());
_common.Logger.overrideLogger([
'fatal'
]);
});
it('should be defined', ()=>{
expect(permissionsGuard).toBeDefined();
expect(userTest).toBeDefined();
});
it('should pass with a valid permission', async ()=>{
userTest.applications = [
_user.USER_PERMISSION.PERSONAL_SPACE
];
context = (0, _tsjest.createMock)();
(0, _permissionsdecorator.UserHavePermission)(_user.USER_PERMISSION.PERSONAL_SPACE)(context.getHandler());
context.switchToHttp().getRequest.mockReturnValue({
user: userTest
});
expect(permissionsGuard.canActivate(context)).toBe(true);
});
it('should pass if any of the permissions are granted', async ()=>{
userTest.applications = [
_user.USER_PERMISSION.PERSONAL_SPACE
];
context = (0, _tsjest.createMock)();
(0, _permissionsdecorator.UserHavePermission)([
_user.USER_PERMISSION.SPACES,
_user.USER_PERMISSION.PERSONAL_SPACE
])(context.getHandler());
context.switchToHttp().getRequest.mockReturnValue({
user: userTest
});
expect(permissionsGuard.canActivate(context)).toBe(true);
});
it('should not pass with a bad permission', async ()=>{
userTest.applications = [];
context = (0, _tsjest.createMock)();
(0, _permissionsdecorator.UserHavePermission)(_user.USER_PERMISSION.PERSONAL_SPACE)(context.getHandler());
context.switchToHttp().getRequest.mockReturnValue({
user: userTest
});
expect(()=>permissionsGuard.canActivate(context)).toThrow(_common.HttpException);
});
it('should pass with no permissions but with the admin role', async ()=>{
userTest.applications = [];
userTest.role = _user.USER_ROLE.ADMINISTRATOR;
context = (0, _tsjest.createMock)();
(0, _permissionsdecorator.UserHavePermission)(_user.USER_PERMISSION.PERSONAL_SPACE)(context.getHandler());
context.switchToHttp().getRequest.mockReturnValue({
user: userTest
});
expect(permissionsGuard.canActivate(context)).toBe(true);
// reset
userTest.role = _user.USER_ROLE.USER;
});
it('should not pass with a missing decorator', async ()=>{
userTest.applications = [
_user.USER_PERMISSION.PERSONAL_SPACE
];
context = (0, _tsjest.createMock)();
context.switchToHttp().getRequest.mockReturnValue({
user: userTest
});
expect(permissionsGuard.canActivate(context)).toBeFalsy();
});
it('should pass with an empty decorator', async ()=>{
userTest.applications = [
_user.USER_PERMISSION.PERSONAL_SPACE
];
context = (0, _tsjest.createMock)();
(0, _permissionsdecorator.UserHavePermission)()(context.getHandler());
context.switchToHttp().getRequest.mockReturnValue({
user: userTest
});
expect(permissionsGuard.canActivate(context)).toBeTruthy();
});
});
//# sourceMappingURL=permissions.guard.spec.js.map