mirror of
https://github.com/strapi/strapi.git
synced 2025-08-07 00:09:23 +00:00

* Add a domain layer for the permission, rework the engine handling of the permissions Signed-off-by: Convly <jean-sebastien.herbaux@epitech.eu> * Add permissions-fields-to-properties migration for the admin Signed-off-by: Convly <jean-sebastien.herbaux@epitech.eu> * Removes useless console.log Signed-off-by: Convly <jean-sebastien.herbaux@epitech.eu> * Remove debug logLevel from provider-login.test.e2e.js Signed-off-by: Convly <jean-sebastien.herbaux@epitech.eu> * Adds the new layout for the GET permissions, allow to subscribe to actionRegistered events, adds i18n handlers Signed-off-by: Convly <jean-sebastien.herbaux@epitech.eu> * Fix typo Signed-off-by: Convly <jean-sebastien.herbaux@epitech.eu> * Update permissions validators Signed-off-by: Convly <jean-sebastien.herbaux@epitech.eu> * Update unit tests Signed-off-by: Convly <jean-sebastien.herbaux@epitech.eu> * Update integrations test + fix some validation issues Signed-off-by: Convly <jean-sebastien.herbaux@epitech.eu> * Change plugins & settings section format for the permissions layout * only return locales property to localized subjects for the permission's layout * Do not send the locales property to the permission's layout when there is no locales created * Add the 'locales' property to publish & delete routes * Fix unwanted mutation of the sections builder states on multiple builds * Fix units tests with (new engine) * Fix admin-role e2e test - Add locales property to the update payload * fix e2e testsé * Update e2e snapshots * Fix unit test for i18n bootstrap * Add mocks for i18n/bootstrap test * Fix has-locale condition & updatePermission validator * Avoid mutation in migration, always authorize super admin for has-locales condition * Rework rbac domain objects, add a hook module and a provider factory * Remove old providers * Update the admin services & tests for the new rbac domain & providers * Fix tests, bootstrap functions & services following rbac domain rework * Update migration runner * PR comments Signed-off-by: Convly <jean-sebastien.herbaux@epitech.eu> * Remove useless console.log * Fix sanitizeCondition bug * Section builder rework * Add test for the section-builder section & add jsdoc for the permission domain * pr comments (without the migrations) * fix fields-to-properties migration * Add jsdoc for the sections-builder * Moves createBoundAbstractDomain from permission domain to the engine service * Remove debug logLevel for admin role test (e2e) * Fix core-store * Fix hooks & move business logic from i18n bootstrap to dedicated services * add route get-non-localized-fields * use write and read permission * refacto * add input validator * add route doc * handle ST Co-authored-by: Pierre Noël <petersg83@gmail.com> Co-authored-by: Alexandre BODIN <alexandrebodin@users.noreply.github.com>
211 lines
5.3 KiB
JavaScript
211 lines
5.3 KiB
JavaScript
'use strict';
|
|
|
|
const createContext = require('../../../../test/helpers/create-context');
|
|
const roleController = require('../role');
|
|
|
|
describe('Role controller', () => {
|
|
describe('getPermissions', () => {
|
|
test('Fails if role does not exist', async () => {
|
|
const findOne = jest.fn(() => Promise.resolve());
|
|
const notFound = jest.fn();
|
|
|
|
const ctx = createContext(
|
|
{
|
|
params: { id: 1 },
|
|
},
|
|
{
|
|
notFound,
|
|
}
|
|
);
|
|
|
|
global.strapi = {
|
|
admin: {
|
|
services: {
|
|
role: {
|
|
findOne,
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
await roleController.getPermissions(ctx);
|
|
|
|
expect(findOne).toHaveBeenCalledWith({ id: ctx.params.id });
|
|
expect(notFound).toHaveBeenCalled();
|
|
});
|
|
|
|
test('Finds permissions correctly', async () => {
|
|
const permissions = [
|
|
{
|
|
action: 'test1',
|
|
},
|
|
{
|
|
action: 'test2',
|
|
subject: 'model1',
|
|
},
|
|
];
|
|
|
|
const findOneRole = jest.fn(() => Promise.resolve({ id: 1 }));
|
|
const findPermissions = jest.fn(() => Promise.resolve(permissions));
|
|
const sanitizePermission = jest.fn(perms => perms);
|
|
|
|
const ctx = createContext({
|
|
params: { id: 1 },
|
|
});
|
|
|
|
global.strapi = {
|
|
admin: {
|
|
services: {
|
|
role: {
|
|
findOne: findOneRole,
|
|
},
|
|
permission: {
|
|
find: findPermissions,
|
|
sanitizePermission,
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
await roleController.getPermissions(ctx);
|
|
|
|
expect(findOneRole).toHaveBeenCalledWith({ id: ctx.params.id });
|
|
expect(findPermissions).toHaveBeenCalledWith({ role: ctx.params.id, _limit: -1 });
|
|
expect(ctx.body).toEqual({
|
|
data: permissions,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('updatePermissions', () => {
|
|
test('Fails on missing permissions input', async () => {
|
|
const badRequest = jest.fn();
|
|
const findOne = jest.fn(() => Promise.resolve({ id: 1 }));
|
|
|
|
const ctx = createContext(
|
|
{
|
|
params: { id: 1 },
|
|
body: {},
|
|
},
|
|
{ badRequest }
|
|
);
|
|
|
|
global.strapi = {
|
|
admin: {
|
|
services: {
|
|
permission: {
|
|
sanitizePermission: jest.fn(p => p),
|
|
},
|
|
role: {
|
|
findOne,
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
await roleController.updatePermissions(ctx);
|
|
|
|
expect(badRequest).toHaveBeenCalledWith(
|
|
'ValidationError',
|
|
expect.objectContaining({
|
|
permissions: expect.arrayContaining([]),
|
|
})
|
|
);
|
|
});
|
|
|
|
test('Fails on missing action permission', async () => {
|
|
const badRequest = jest.fn();
|
|
const findOne = jest.fn(() => Promise.resolve({ id: 1 }));
|
|
|
|
const ctx = createContext(
|
|
{
|
|
params: { id: 1 },
|
|
body: {
|
|
permissions: [{}],
|
|
},
|
|
},
|
|
{ badRequest }
|
|
);
|
|
global.strapi = {
|
|
admin: {
|
|
services: {
|
|
role: { findOne },
|
|
permission: {
|
|
sanitizePermission: jest.fn(p => p),
|
|
actionProvider: { get: jest.fn() },
|
|
conditionProvider: { values: jest.fn(() => []) },
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
await roleController.updatePermissions(ctx);
|
|
|
|
expect(badRequest).toHaveBeenCalledWith(
|
|
'ValidationError',
|
|
expect.objectContaining({
|
|
'permissions[0].action': expect.arrayContaining([
|
|
'permissions[0].action is a required field',
|
|
]),
|
|
})
|
|
);
|
|
});
|
|
|
|
test('Assign permissions if input is valid', async () => {
|
|
const roleID = 1;
|
|
const findOneRole = jest.fn(() => Promise.resolve({ id: roleID }));
|
|
const assignPermissions = jest.fn((roleID, permissions) => Promise.resolve(permissions));
|
|
const inputPermissions = [
|
|
{
|
|
action: 'test',
|
|
subject: 'model1',
|
|
properties: { fields: ['title'] },
|
|
conditions: ['admin::is-creator'],
|
|
},
|
|
];
|
|
|
|
const ctx = createContext({
|
|
params: { id: roleID },
|
|
body: {
|
|
permissions: inputPermissions,
|
|
},
|
|
});
|
|
|
|
global.strapi = {
|
|
admin: {
|
|
services: {
|
|
role: {
|
|
assignPermissions,
|
|
findOne: findOneRole,
|
|
getSuperAdmin: jest.fn(() => undefined),
|
|
},
|
|
permission: {
|
|
sanitizePermission: jest.fn(permissions => permissions),
|
|
conditionProvider: {
|
|
values: jest.fn(() => [{ id: 'admin::is-creator' }]),
|
|
},
|
|
actionProvider: {
|
|
values: jest.fn(() => [{ actionId: 'test', subjects: ['model1'] }]),
|
|
get: jest.fn(() => ({
|
|
actionId: 'test',
|
|
subjects: ['model1'],
|
|
options: { applyToProperties: ['fields'] },
|
|
})),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
await roleController.updatePermissions(ctx);
|
|
|
|
expect(findOneRole).toHaveBeenCalledWith({ id: roleID });
|
|
expect(assignPermissions).toHaveBeenCalledWith(roleID, inputPermissions);
|
|
|
|
expect(ctx.body).toEqual({
|
|
data: inputPermissions,
|
|
});
|
|
});
|
|
});
|
|
});
|