UNPKG

@bdelab/roar-firekit

Version:

A library to facilitate Firebase authentication and Cloud Firestore interaction for ROAR apps

100 lines (99 loc) 6.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const permissions_service_1 = require("./permissions.service"); const permissions_1 = require("../constants/permissions"); const user_roles_1 = require("../constants/user-roles"); const roles_1 = require("../constants/roles"); const MOCK_ADMIN_TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJSUE1fVGVzdF9Ub2tlbiIsImlhdCI6MTc0MDU5NTg5MywiZXhwIjoxNzcyMTMxOTAzLCJhdWQiOiJyb2FyLmVkdWNhdGlvbiIsInN1YiI6InRlc3RUb2tlbkFkbWluIiwicm9sZSI6ImFkbWluIn0.x_WFnnQCFD4M-9f77X3QzGSpq_SynUC6yhIKbW1QfBY'; const MOCK_STUDENT_TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJSUE1fVGVzdF9Ub2tlbiIsImlhdCI6MTc0MDU5NTM2NywiZXhwIjoxNzcyMTMxMzY3LCJhdWQiOiJyb2FyLmVkdWNhdGlvbiIsInN1YiI6InRlc3RUb2tlblN0dWRlbnQiLCJyb2xlIjoic3R1ZGVudCJ9.MpD5OOc7ekmPPOWSoWNW2X0MKuiftX8osSdGpgTT00Y'; const MOCK_PLATFORM_ADMIN_TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJSUE1fVGVzdF9Ub2tlbiIsImlhdCI6MTc0MDU5NTg5MywiZXhwIjoxNzcyMTMxOTAzLCJhdWQiOiJyb2FyLmVkdWNhdGlvbiIsInN1YiI6InRlc3RUb2tlblBsYXRmb3JtQWRtaW4iLCJyb2xlIjoicGxhdGZvcm1fYWRtaW4ifQ.64xpaXChNVicuDrJzqXqiBrf3Xx03129DJ5S7US7vk0'; const MOCK_SUPER_ADMIN_TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJSUE1fVGVzdF9Ub2tlbiIsImlhdCI6MTc0MDU5NTg5MywiZXhwIjoxNzcyMTMxOTAzLCJhdWQiOiJyb2FyLmVkdWNhdGlvbiIsInN1YiI6InRlc3RUb2tlblN1cGVyQWRtaW4iLCJyb2xlIjoic3VwZXJfYWRtaW4ifQ.K0crV-sD5twhTrrsq4HnRgEZRlKMuTftmJmRRvS7SN4'; const NO_ROLE_TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJST0FSIFBlcm1pc3Npb25zIE1hbmFnZXIiLCJpYXQiOjE3NDE5ODI1OTAsImV4cCI6MTc3MzUxODU5MCwiYXVkIjoicm9hci5lZHVjYXRpb24iLCJzdWIiOiJUb2tlbiBmb3IgUlBNIHVuaXQgdGVzdHMifQ.-sKjiDioIfIpVYSZvM7wWXLmIwKb_NUUfG83IOSwNhI'; describe('canUser', () => { it('Students can only take actions in their permissions set', () => { const permissions = roles_1.roles[user_roles_1.UserRoles.STUDENT].permissions.map((permission) => { return { action: permission, expected: true }; }); permissions.push({ action: permissions_1.Permissions.Users.UPDATE, expected: false }, { action: 'test.fake.permission', expected: false }); for (const action of permissions) { const canTakeAction = permissions_service_1.PermissionsService.canUser(MOCK_STUDENT_TOKEN, action.action); expect(canTakeAction).toBe(action.expected); } }); it('Admins can only take actions in their permission set', () => { const permissions = roles_1.roles[user_roles_1.UserRoles.ADMIN].permissions.map((permission) => { return { action: permission, expected: true }; }); permissions.push({ action: permissions_1.Permissions.Users.CREATE, expected: false }, { action: 'test.fake.permission', expected: false }); for (const action of permissions) { const canTakeAction = permissions_service_1.PermissionsService.canUser(MOCK_ADMIN_TOKEN, action.action); expect(canTakeAction).toBe(action.expected); } }); it('Platform admins can take actions in their permission set', () => { const permissions = roles_1.roles[user_roles_1.UserRoles.PLATFORM_ADMIN].permissions.map((permission) => { return { action: permission, expected: true }; }); permissions.push({ action: 'test.fake.permission', expected: false }); for (const action of permissions) { const canTakeAction = permissions_service_1.PermissionsService.canUser(MOCK_PLATFORM_ADMIN_TOKEN, action.action); expect(canTakeAction).toBe(action.expected); } }); it('Super admins can take all actions', () => { const permissions = roles_1.roles[user_roles_1.UserRoles.SUPER_ADMIN].permissions.map((permission) => { return { action: permission, expected: true }; }); // super_admins are also subject to permissions that do not exist. // This ensures that invalid permissions are not introduced. permissions.push({ action: 'test.fake.permission', expected: false }); for (const action of permissions) { const canTakeAction = permissions_service_1.PermissionsService.canUser(MOCK_SUPER_ADMIN_TOKEN, action.action); expect(canTakeAction).toBe(action.expected); } }); it('Returns false for invalid permissions', () => { const permissions = [ { action: 'test.fake.permission', expected: false }, { action: 'users.false', expected: false }, ]; for (const action of permissions) { const canTakeAction = permissions_service_1.PermissionsService.canUser(MOCK_ADMIN_TOKEN, action.action); expect(canTakeAction).toBe(action.expected); } }); it('Handles any case of permissions properly', () => { const permissions = [ { action: 'users.LIST', expected: false }, { action: 'uSERs.list', expected: false }, { action: 'users.liST', expected: false }, { action: 'USERS.LIST', expected: false }, ]; for (const action of permissions) { const canTakeAction = permissions_service_1.PermissionsService.canUser(MOCK_ADMIN_TOKEN, action.action); expect(canTakeAction).toBe(action.expected); } }); it('Handles invalid tokens properly', () => { // In the case of an invalid token, the function should assume the GUEST role. const permissions = [ { action: permissions_1.Permissions.Users.LIST, expected: false }, { action: permissions_1.Permissions.Administrations.LIST, expected: false }, ]; for (const action of permissions) { const canTakeAction = permissions_service_1.PermissionsService.canUser('invalid_token', action.action); expect(canTakeAction).toBe(action.expected); } }); it('Handles tokens with no role property', () => { // In the case of an invalid token, the function should assume the GUEST role. const permissions = [ { action: permissions_1.Permissions.Users.LIST, expected: false }, { action: permissions_1.Permissions.Administrations.LIST, expected: false }, ]; for (const action of permissions) { const canTakeAction = permissions_service_1.PermissionsService.canUser(NO_ROLE_TOKEN, action.action); expect(canTakeAction).toBe(action.expected); } }); });