fix tests

Signed-off-by: Pierre Noël <petersg83@gmail.com>
This commit is contained in:
Pierre Noël 2020-10-19 14:48:03 +02:00
parent afa67add2b
commit 1bc8ae4d0f
4 changed files with 24 additions and 22 deletions

View File

@ -22,12 +22,20 @@ describe('Permission Service', () => {
describe('Assign permissions', () => {
test('Delete previous permissions', async () => {
const createMany = jest.fn(() => Promise.resolve([]));
const getSuperAdmin = jest.fn(() => Promise.resolve({ id: 0 }));
const sendDidUpdateRolePermissions = jest.fn();
const find = jest.fn(() => Promise.resolve([{ id: 3 }]));
const deleteFn = jest.fn();
const getAll = jest.fn(() => []);
global.strapi = {
admin: { services: { permission: { actionProvider: { getAll } } } },
admin: {
services: {
metrics: { sendDidUpdateRolePermissions },
permission: { actionProvider: { getAll } },
role: { getSuperAdmin },
}
},
query() {
return { delete: deleteFn, createMany, find };
},
@ -45,6 +53,8 @@ describe('Permission Service', () => {
const deleteFn = jest.fn(() => Promise.resolve([]));
const createMany = jest.fn(() => Promise.resolve([]));
const getSuperAdmin = jest.fn(() => Promise.resolve({ id: 0 }));
const sendDidUpdateRolePermissions = jest.fn();
const find = jest.fn(() => Promise.resolve([]));
const getAll = jest.fn(() => permissions.map(perm => ({ actionId: perm.action })));
const removeUnkownConditionIds = jest.fn(conds => _.intersection(conds, ['cond']));
@ -52,6 +62,8 @@ describe('Permission Service', () => {
global.strapi = {
admin: {
services: {
metrics: { sendDidUpdateRolePermissions },
role: { getSuperAdmin },
permission: {
actionProvider: { getAll },
conditionProvider: {

View File

@ -368,7 +368,7 @@ describe('Role', () => {
let id = 1;
const create = jest.fn(role => ({ ...role, id: id++ }));
const getAll = jest.fn(() => actions);
const assign = jest.fn();
const createMany = jest.fn();
const assignARoleToAll = jest.fn();
const getPermissionsWithNestedFields = jest.fn(() => [...permissions]); // cloned, otherwise it is modified inside createRolesIfNoneExist()
@ -376,7 +376,7 @@ describe('Role', () => {
query: () => ({ count, create }),
admin: {
services: {
permission: { actionProvider: { getAll }, assign },
permission: { actionProvider: { getAll }, createMany },
'content-type': { getPermissionsWithNestedFields },
user: { assignARoleToAll },
},
@ -404,8 +404,8 @@ describe('Role', () => {
expect(getPermissionsWithNestedFields).toHaveBeenCalledWith(actions, {
restrictedSubjects: ['plugins::users-permissions.user'],
});
expect(assign).toHaveBeenCalledTimes(2);
expect(assign).toHaveBeenNthCalledWith(1, 2, [
expect(createMany).toHaveBeenCalledTimes(2);
expect(createMany).toHaveBeenNthCalledWith(1, 2, [
...permissions,
...defaultPermissions.map(d => ({
...d,
@ -413,7 +413,7 @@ describe('Role', () => {
})),
]);
expect(assign).toHaveBeenNthCalledWith(2, 3, [
expect(createMany).toHaveBeenNthCalledWith(2, 3, [
{ ...permissions[0], conditions: ['admin::is-creator'] },
...defaultPermissions,
]);

View File

@ -62,12 +62,8 @@ const deleteByIds = ids => {
* @param permissions
* @returns {Promise<*[]|*>}
*/
const createMany = async permissions => {
try {
await validatePermissionsExist(permissions);
} catch (err) {
throw strapi.errors.badRequest('ValidationError', err);
}
const createMany = async (roleId, permissions) => {
permissions.forEach(p => p.role = roleId);
return strapi.query('permission', 'admin').createMany(permissions);
};
@ -131,7 +127,7 @@ const assign = async (roleId, permissions = []) => {
await deleteByIds(permissionsToDelete.map(p => p.id));
}
if (permissionsToAdd.length > 0) {
const createdPermissions = await createMany(permissionsToAdd);
const createdPermissions = await createMany(roleId, permissionsToAdd);
permissionsToReturn.push(...createdPermissions.map(p => ({ ...p, role: p.role.id })));
}
@ -254,7 +250,7 @@ const ensureBoundPermissionsInDatabase = async () => {
fields: BOUND_ACTIONS_FOR_FIELDS.includes(action) ? fields : null,
})
);
await createMany(permissions);
await createMany(editorRole.id, permissions);
}
}
};

View File

@ -233,14 +233,8 @@ const createRolesIfNoneExist = async ({ createPermissionsForAdmin = false } = {}
authorPermissions.push(...getDefaultPluginPermissions({ isAuthor: true }));
// assign permissions to roles
editorPermissions.forEach(p => {
p.role = editorRole.id;
});
authorPermissions.forEach(p => {
p.role = authorRole.id;
});
await strapi.admin.services.permission.createMany(editorPermissions);
await strapi.admin.services.permission.createMany(authorPermissions);
await strapi.admin.services.permission.createMany(editorRole.id, editorPermissions);
await strapi.admin.services.permission.createMany(authorRole.id, authorPermissions);
if (createPermissionsForAdmin) {
await strapi.admin.services.permission.resetSuperAdminPermissions();