221 lines
7.2 KiB
TypeScript
221 lines
7.2 KiB
TypeScript
/*
|
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
* or more contributor license agreements. Licensed under the Elastic License
|
|
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
* 2.0.
|
|
*/
|
|
|
|
import { nextTick } from '@kbn/test/jest';
|
|
import { coreMock } from 'src/core/public/mocks';
|
|
import { homePluginMock } from 'src/plugins/home/public/mocks';
|
|
import { securityMock } from '../../security/public/mocks';
|
|
import { CloudPlugin } from './plugin';
|
|
|
|
describe('Cloud Plugin', () => {
|
|
describe('#start', () => {
|
|
function setupPlugin() {
|
|
const plugin = new CloudPlugin(
|
|
coreMock.createPluginInitializerContext({
|
|
id: 'cloudId',
|
|
base_url: 'https://cloud.elastic.co',
|
|
deployment_url: '/abc123',
|
|
profile_url: '/profile/alice',
|
|
organization_url: '/org/myOrg',
|
|
})
|
|
);
|
|
const coreSetup = coreMock.createSetup();
|
|
const homeSetup = homePluginMock.createSetupContract();
|
|
|
|
plugin.setup(coreSetup, { home: homeSetup });
|
|
|
|
return { coreSetup, plugin };
|
|
}
|
|
|
|
it('registers help support URL', async () => {
|
|
const { plugin } = setupPlugin();
|
|
|
|
const coreStart = coreMock.createStart();
|
|
const securityStart = securityMock.createStart();
|
|
plugin.start(coreStart, { security: securityStart });
|
|
|
|
expect(coreStart.chrome.setHelpSupportUrl).toHaveBeenCalledTimes(1);
|
|
expect(coreStart.chrome.setHelpSupportUrl.mock.calls[0]).toMatchInlineSnapshot(`
|
|
Array [
|
|
"https://support.elastic.co/",
|
|
]
|
|
`);
|
|
});
|
|
|
|
it('does not register custom nav links on anonymous pages', async () => {
|
|
const { plugin } = setupPlugin();
|
|
|
|
const coreStart = coreMock.createStart();
|
|
coreStart.http.anonymousPaths.isAnonymous.mockReturnValue(true);
|
|
|
|
const securityStart = securityMock.createStart();
|
|
securityStart.authc.getCurrentUser.mockResolvedValue(
|
|
securityMock.createMockAuthenticatedUser({
|
|
roles: ['superuser'],
|
|
})
|
|
);
|
|
|
|
plugin.start(coreStart, { security: securityStart });
|
|
|
|
await nextTick();
|
|
|
|
expect(coreStart.chrome.setCustomNavLink).not.toHaveBeenCalled();
|
|
expect(securityStart.authc.getCurrentUser).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('registers a custom nav link for superusers', async () => {
|
|
const { plugin } = setupPlugin();
|
|
|
|
const coreStart = coreMock.createStart();
|
|
const securityStart = securityMock.createStart();
|
|
securityStart.authc.getCurrentUser.mockResolvedValue(
|
|
securityMock.createMockAuthenticatedUser({
|
|
roles: ['superuser'],
|
|
})
|
|
);
|
|
plugin.start(coreStart, { security: securityStart });
|
|
|
|
await nextTick();
|
|
|
|
expect(coreStart.chrome.setCustomNavLink).toHaveBeenCalledTimes(1);
|
|
expect(coreStart.chrome.setCustomNavLink.mock.calls[0]).toMatchInlineSnapshot(`
|
|
Array [
|
|
Object {
|
|
"euiIconType": "arrowLeft",
|
|
"href": "https://cloud.elastic.co/abc123",
|
|
"title": "Manage this deployment",
|
|
},
|
|
]
|
|
`);
|
|
});
|
|
|
|
it('registers a custom nav link when there is an error retrieving the current user', async () => {
|
|
const { plugin } = setupPlugin();
|
|
|
|
const coreStart = coreMock.createStart();
|
|
const securityStart = securityMock.createStart();
|
|
securityStart.authc.getCurrentUser.mockRejectedValue(new Error('something happened'));
|
|
plugin.start(coreStart, { security: securityStart });
|
|
|
|
await nextTick();
|
|
|
|
expect(coreStart.chrome.setCustomNavLink).toHaveBeenCalledTimes(1);
|
|
expect(coreStart.chrome.setCustomNavLink.mock.calls[0]).toMatchInlineSnapshot(`
|
|
Array [
|
|
Object {
|
|
"euiIconType": "arrowLeft",
|
|
"href": "https://cloud.elastic.co/abc123",
|
|
"title": "Manage this deployment",
|
|
},
|
|
]
|
|
`);
|
|
});
|
|
|
|
it('does not register a custom nav link for non-superusers', async () => {
|
|
const { plugin } = setupPlugin();
|
|
|
|
const coreStart = coreMock.createStart();
|
|
const securityStart = securityMock.createStart();
|
|
securityStart.authc.getCurrentUser.mockResolvedValue(
|
|
securityMock.createMockAuthenticatedUser({
|
|
roles: ['not-a-superuser'],
|
|
})
|
|
);
|
|
plugin.start(coreStart, { security: securityStart });
|
|
|
|
await nextTick();
|
|
|
|
expect(coreStart.chrome.setCustomNavLink).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('registers user profile links for superusers', async () => {
|
|
const { plugin } = setupPlugin();
|
|
|
|
const coreStart = coreMock.createStart();
|
|
const securityStart = securityMock.createStart();
|
|
securityStart.authc.getCurrentUser.mockResolvedValue(
|
|
securityMock.createMockAuthenticatedUser({
|
|
roles: ['superuser'],
|
|
})
|
|
);
|
|
plugin.start(coreStart, { security: securityStart });
|
|
|
|
await nextTick();
|
|
|
|
expect(securityStart.navControlService.addUserMenuLinks).toHaveBeenCalledTimes(1);
|
|
expect(securityStart.navControlService.addUserMenuLinks.mock.calls[0]).toMatchInlineSnapshot(`
|
|
Array [
|
|
Array [
|
|
Object {
|
|
"href": "https://cloud.elastic.co/profile/alice",
|
|
"iconType": "user",
|
|
"label": "Profile",
|
|
"order": 100,
|
|
"setAsProfile": true,
|
|
},
|
|
Object {
|
|
"href": "https://cloud.elastic.co/org/myOrg",
|
|
"iconType": "gear",
|
|
"label": "Account & Billing",
|
|
"order": 200,
|
|
},
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it('registers profile links when there is an error retrieving the current user', async () => {
|
|
const { plugin } = setupPlugin();
|
|
|
|
const coreStart = coreMock.createStart();
|
|
const securityStart = securityMock.createStart();
|
|
securityStart.authc.getCurrentUser.mockRejectedValue(new Error('something happened'));
|
|
plugin.start(coreStart, { security: securityStart });
|
|
|
|
await nextTick();
|
|
|
|
expect(securityStart.navControlService.addUserMenuLinks).toHaveBeenCalledTimes(1);
|
|
expect(securityStart.navControlService.addUserMenuLinks.mock.calls[0]).toMatchInlineSnapshot(`
|
|
Array [
|
|
Array [
|
|
Object {
|
|
"href": "https://cloud.elastic.co/profile/alice",
|
|
"iconType": "user",
|
|
"label": "Profile",
|
|
"order": 100,
|
|
"setAsProfile": true,
|
|
},
|
|
Object {
|
|
"href": "https://cloud.elastic.co/org/myOrg",
|
|
"iconType": "gear",
|
|
"label": "Account & Billing",
|
|
"order": 200,
|
|
},
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it('does not register profile links for non-superusers', async () => {
|
|
const { plugin } = setupPlugin();
|
|
|
|
const coreStart = coreMock.createStart();
|
|
const securityStart = securityMock.createStart();
|
|
securityStart.authc.getCurrentUser.mockResolvedValue(
|
|
securityMock.createMockAuthenticatedUser({
|
|
roles: ['not-a-superuser'],
|
|
})
|
|
);
|
|
plugin.start(coreStart, { security: securityStart });
|
|
|
|
await nextTick();
|
|
|
|
expect(securityStart.navControlService.addUserMenuLinks).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
});
|