mirror of
https://github.com/strapi/strapi.git
synced 2025-11-15 09:39:15 +00:00
384 lines
12 KiB
JavaScript
384 lines
12 KiB
JavaScript
import { SETTINGS_BASE_URL } from '../../../config';
|
|
import init from '../init';
|
|
|
|
describe('ADMIN | LeftMenu | init', () => {
|
|
it('should return the initialState if the plugins are empty', () => {
|
|
const initialState = {
|
|
ok: true,
|
|
generalSectionLinks: [],
|
|
};
|
|
|
|
expect(init(initialState)).toEqual({ ok: true, generalSectionLinks: [] });
|
|
});
|
|
|
|
it('should create the pluginsSectionLinks correctly', () => {
|
|
const plugins = {
|
|
documentation: {
|
|
menu: {
|
|
pluginsSectionLinks: [
|
|
{
|
|
destination: '/plugins/documentation',
|
|
icon: 'doc',
|
|
label: {
|
|
id: 'documentation.plugin.name',
|
|
defaultMessage: 'Documentation',
|
|
},
|
|
name: 'documentation',
|
|
permissions: [{ action: 'plugins::documentation.read', subject: null }],
|
|
},
|
|
{
|
|
destination: '/plugins/documentation/test',
|
|
icon: 'doc',
|
|
label: {
|
|
id: 'documentation.plugin.name.test',
|
|
defaultMessage: 'Documentation Test',
|
|
},
|
|
name: 'documentation test',
|
|
permissions: [],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
test: {},
|
|
'content-type-builder': {
|
|
menu: {
|
|
pluginsSectionLinks: [
|
|
{
|
|
destination: '/plugins/content-type-builder',
|
|
icon: 'plug',
|
|
label: {
|
|
id: 'content-type-builder.plugin.name',
|
|
defaultMessage: 'content-type-builder',
|
|
},
|
|
name: 'content-type-builder',
|
|
permissions: [{ action: 'plugins::content-type-builder.read', subject: null }],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
};
|
|
const initialState = {
|
|
generalSectionLinks: [],
|
|
pluginsSectionLinks: [],
|
|
isLoading: true,
|
|
};
|
|
const expected = {
|
|
generalSectionLinks: [],
|
|
pluginsSectionLinks: [
|
|
{
|
|
destination: '/plugins/content-type-builder',
|
|
icon: 'plug',
|
|
label: {
|
|
id: 'content-type-builder.plugin.name',
|
|
defaultMessage: 'content-type-builder',
|
|
},
|
|
isDisplayed: false,
|
|
permissions: [{ action: 'plugins::content-type-builder.read', subject: null }],
|
|
},
|
|
{
|
|
destination: '/plugins/documentation',
|
|
icon: 'doc',
|
|
label: {
|
|
id: 'documentation.plugin.name',
|
|
defaultMessage: 'Documentation',
|
|
},
|
|
isDisplayed: false,
|
|
permissions: [{ action: 'plugins::documentation.read', subject: null }],
|
|
},
|
|
{
|
|
destination: '/plugins/documentation/test',
|
|
icon: 'doc',
|
|
label: {
|
|
id: 'documentation.plugin.name.test',
|
|
defaultMessage: 'Documentation Test',
|
|
},
|
|
isDisplayed: false,
|
|
permissions: [],
|
|
},
|
|
],
|
|
isLoading: true,
|
|
};
|
|
|
|
expect(init(initialState, plugins)).toEqual(expected);
|
|
});
|
|
|
|
it('should set the permissions in the settings link correctly for the plugins', () => {
|
|
const menu = [
|
|
{
|
|
id: 'global',
|
|
title: { id: 'Settings.global' },
|
|
links: [
|
|
{
|
|
title: 'Settings.webhooks.title',
|
|
to: '/settings/webhooks',
|
|
name: 'webhooks',
|
|
|
|
permissions: [
|
|
{ action: 'admin::webhook.create', subject: null },
|
|
{ action: 'admin::webhook.read', subject: null },
|
|
{ action: 'admin::webhook.update', subject: null },
|
|
{ action: 'admin::webhook.delete', subject: null },
|
|
],
|
|
},
|
|
{
|
|
name: 'media-library',
|
|
permissions: [
|
|
{
|
|
action: 'plugins::upload.settings.read',
|
|
subject: null,
|
|
},
|
|
],
|
|
title: { id: 'upload.plugin.name', defaultMessage: 'Media Library' },
|
|
to: '/settings/media-library',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'permissions',
|
|
title: 'Settings.permissions',
|
|
links: [
|
|
{
|
|
title: 'roles',
|
|
to: '/settings/roles',
|
|
name: 'roles',
|
|
permissions: [
|
|
{ action: 'admin::roles.create', subject: null },
|
|
{ action: 'admin::roles.update', subject: null },
|
|
{ action: 'admin::roles.read', subject: null },
|
|
{ action: 'admin::roles.delete', subject: null },
|
|
],
|
|
},
|
|
{
|
|
title: 'users',
|
|
|
|
to: '/settings/users?pageSize=10&page=1&_sort=firstname%3AASC',
|
|
name: 'users',
|
|
permissions: [
|
|
{ action: 'admin::users.create', subject: null },
|
|
{ action: 'admin::users.read', subject: null },
|
|
{ action: 'admin::users.update', subject: null },
|
|
{ action: 'admin::users.delete', subject: null },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
const initialState = {
|
|
generalSectionLinks: [
|
|
{
|
|
icon: 'list',
|
|
label: 'app.components.LeftMenuLinkContainer.listPlugins',
|
|
destination: '/list-plugins',
|
|
isDisplayed: false,
|
|
permissions: [
|
|
{ action: 'admin::marketplace.read', subject: null },
|
|
{ action: 'admin::marketplace.plugins.uninstall', subject: null },
|
|
],
|
|
},
|
|
{
|
|
icon: 'shopping-basket',
|
|
label: 'app.components.LeftMenuLinkContainer.installNewPlugin',
|
|
destination: '/marketplace',
|
|
isDisplayed: false,
|
|
permissions: [
|
|
{ action: 'admin::marketplace.read', subject: null },
|
|
{ action: 'admin::marketplace.plugins.install', subject: null },
|
|
],
|
|
},
|
|
{
|
|
icon: 'cog',
|
|
label: 'app.components.LeftMenuLinkContainer.settings',
|
|
isDisplayed: false,
|
|
destination: SETTINGS_BASE_URL,
|
|
permissions: [],
|
|
},
|
|
],
|
|
pluginsSectionLinks: [],
|
|
isLoading: true,
|
|
};
|
|
const plugins = {};
|
|
const expected = {
|
|
generalSectionLinks: [
|
|
{
|
|
icon: 'list',
|
|
label: 'app.components.LeftMenuLinkContainer.listPlugins',
|
|
destination: '/list-plugins',
|
|
isDisplayed: false,
|
|
permissions: [
|
|
{ action: 'admin::marketplace.read', subject: null },
|
|
{ action: 'admin::marketplace.plugins.uninstall', subject: null },
|
|
],
|
|
},
|
|
{
|
|
icon: 'shopping-basket',
|
|
label: 'app.components.LeftMenuLinkContainer.installNewPlugin',
|
|
destination: '/marketplace',
|
|
isDisplayed: false,
|
|
permissions: [
|
|
{ action: 'admin::marketplace.read', subject: null },
|
|
{ action: 'admin::marketplace.plugins.install', subject: null },
|
|
],
|
|
},
|
|
{
|
|
icon: 'cog',
|
|
label: 'app.components.LeftMenuLinkContainer.settings',
|
|
isDisplayed: false,
|
|
destination: SETTINGS_BASE_URL,
|
|
notificationsCount: 0,
|
|
permissions: [
|
|
// webhooks
|
|
{ action: 'admin::webhook.create', subject: null },
|
|
{ action: 'admin::webhook.read', subject: null },
|
|
{ action: 'admin::webhook.update', subject: null },
|
|
{ action: 'admin::webhook.delete', subject: null },
|
|
{
|
|
action: 'plugins::upload.settings.read',
|
|
subject: null,
|
|
},
|
|
{ action: 'admin::roles.create', subject: null },
|
|
{ action: 'admin::roles.update', subject: null },
|
|
{ action: 'admin::roles.read', subject: null },
|
|
{ action: 'admin::roles.delete', subject: null },
|
|
// users
|
|
{ action: 'admin::users.create', subject: null },
|
|
{ action: 'admin::users.read', subject: null },
|
|
{ action: 'admin::users.update', subject: null },
|
|
{ action: 'admin::users.delete', subject: null },
|
|
// roles
|
|
],
|
|
},
|
|
],
|
|
pluginsSectionLinks: [],
|
|
isLoading: true,
|
|
};
|
|
|
|
expect(init(initialState, plugins, menu)).toEqual(expected);
|
|
});
|
|
|
|
it('should set the permissions in the settings link to an empty array if at least one link of the settings menu has no permissions', () => {
|
|
const menu = [
|
|
{
|
|
id: 'global',
|
|
title: { id: 'Settings.global' },
|
|
links: [
|
|
{
|
|
title: 'Settings.webhooks.title',
|
|
to: '/settings/webhooks',
|
|
name: 'webhooks',
|
|
permissions: [
|
|
{ action: 'admin::webhook.create', subject: null },
|
|
{ action: 'admin::webhook.read', subject: null },
|
|
{ action: 'admin::webhook.update', subject: null },
|
|
{ action: 'admin::webhook.delete', subject: null },
|
|
],
|
|
},
|
|
{
|
|
name: 'media-library',
|
|
permissions: [],
|
|
title: { id: 'upload.plugin.name', defaultMessage: 'Media Library' },
|
|
to: '/settings/media-library',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'permissions',
|
|
title: 'Settings.permissions',
|
|
links: [
|
|
{
|
|
title: 'roles',
|
|
to: '/settings/roles',
|
|
name: 'roles',
|
|
permissions: [
|
|
{ action: 'admin::roles.create', subject: null },
|
|
{ action: 'admin::roles.update', subject: null },
|
|
{ action: 'admin::roles.read', subject: null },
|
|
{ action: 'admin::roles.delete', subject: null },
|
|
],
|
|
},
|
|
{
|
|
title: 'users',
|
|
|
|
to: '/settings/users?pageSize=10&page=1&_sort=firstname%3AASC',
|
|
name: 'users',
|
|
permissions: [
|
|
{ action: 'admin::users.create', subject: null },
|
|
{ action: 'admin::users.read', subject: null },
|
|
{ action: 'admin::users.update', subject: null },
|
|
{ action: 'admin::users.delete', subject: null },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
const initialState = {
|
|
generalSectionLinks: [
|
|
{
|
|
icon: 'list',
|
|
label: 'app.components.LeftMenuLinkContainer.listPlugins',
|
|
destination: '/list-plugins',
|
|
isDisplayed: false,
|
|
permissions: [
|
|
{ action: 'admin::marketplace.read', subject: null },
|
|
{ action: 'admin::marketplace.plugins.uninstall', subject: null },
|
|
],
|
|
},
|
|
{
|
|
icon: 'shopping-basket',
|
|
label: 'app.components.LeftMenuLinkContainer.installNewPlugin',
|
|
destination: '/marketplace',
|
|
isDisplayed: false,
|
|
permissions: [
|
|
{ action: 'admin::marketplace.read', subject: null },
|
|
{ action: 'admin::marketplace.plugins.install', subject: null },
|
|
],
|
|
},
|
|
{
|
|
icon: 'cog',
|
|
label: 'app.components.LeftMenuLinkContainer.settings',
|
|
isDisplayed: false,
|
|
destination: SETTINGS_BASE_URL,
|
|
permissions: [],
|
|
},
|
|
],
|
|
pluginsSectionLinks: [],
|
|
isLoading: true,
|
|
};
|
|
const plugins = {};
|
|
const expected = {
|
|
generalSectionLinks: [
|
|
{
|
|
icon: 'list',
|
|
label: 'app.components.LeftMenuLinkContainer.listPlugins',
|
|
destination: '/list-plugins',
|
|
isDisplayed: false,
|
|
permissions: [
|
|
{ action: 'admin::marketplace.read', subject: null },
|
|
{ action: 'admin::marketplace.plugins.uninstall', subject: null },
|
|
],
|
|
},
|
|
{
|
|
icon: 'shopping-basket',
|
|
label: 'app.components.LeftMenuLinkContainer.installNewPlugin',
|
|
destination: '/marketplace',
|
|
isDisplayed: false,
|
|
permissions: [
|
|
{ action: 'admin::marketplace.read', subject: null },
|
|
{ action: 'admin::marketplace.plugins.install', subject: null },
|
|
],
|
|
},
|
|
{
|
|
icon: 'cog',
|
|
label: 'app.components.LeftMenuLinkContainer.settings',
|
|
isDisplayed: false,
|
|
destination: SETTINGS_BASE_URL,
|
|
permissions: [],
|
|
},
|
|
],
|
|
pluginsSectionLinks: [],
|
|
isLoading: true,
|
|
};
|
|
|
|
expect(init(initialState, plugins, menu)).toEqual(expected);
|
|
});
|
|
});
|