Skip to content

Commit

Permalink
Add functional tests
Browse files Browse the repository at this point in the history
  • Loading branch information
sebelga committed Sep 20, 2024
1 parent ab9237f commit 1af2486
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,31 +19,43 @@ interface Props {
}

const IndicesLink: FC<{ coreStart: CoreStart }> = ({ coreStart }) => (
<EuiLink href={coreStart.application.getUrlForApp('management/data/index_management')}>
<EuiLink
href={coreStart.application.getUrlForApp('management', { path: 'data/index_management' })}
data-test-subj="managementLinkToIndices"
>
{i18n.translate('management.landing.subhead.indicesLink', {
defaultMessage: 'indices',
})}
</EuiLink>
);

const DataViewsLink: FC<{ coreStart: CoreStart }> = ({ coreStart }) => (
<EuiLink href={coreStart.application.getUrlForApp('management/kibana/dataViews')}>
<EuiLink
href={coreStart.application.getUrlForApp('management', { path: 'kibana/dataViews' })}
data-test-subj="managementLinkToDataViews"
>
{i18n.translate('management.landing.subhead.dataViewsLink', {
defaultMessage: 'data views',
})}
</EuiLink>
);

const IngestPipelinesLink: FC<{ coreStart: CoreStart }> = ({ coreStart }) => (
<EuiLink href={coreStart.application.getUrlForApp('management/ingest/ingest_pipelines')}>
<EuiLink
href={coreStart.application.getUrlForApp('management', { path: 'ingest/ingest_pipelines' })}
data-test-subj="managementLinkToIngestPipelines"
>
{i18n.translate('management.landing.subhead.ingestPipelinesLink', {
defaultMessage: 'ingest pipelines',
})}
</EuiLink>
);

const UsersLink: FC<{ coreStart: CoreStart }> = ({ coreStart }) => (
<EuiLink href={coreStart.application.getUrlForApp('management/security/users')}>
<EuiLink
href={coreStart.application.getUrlForApp('management', { path: 'security/users' })}
data-test-subj="managementLinkToUsers"
>
{i18n.translate('management.landing.subhead.usersLink', {
defaultMessage: 'users',
})}
Expand Down Expand Up @@ -86,6 +98,7 @@ export const SolutionEmptyPrompt: FC<Props> = ({ kibanaVersion, coreStart }) =>
onClick={() => {
coreStart.chrome.sideNav.setPanelSelectedNode('stack_management');
}}
data-test-subj="viewAllStackMngtPagesButton"
>
<FormattedMessage
id="management.landing.solution.viewAllPagesButton"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ export class UsersGridPage extends Component<Props, State> {
defaultMessage="Users"
/>
}
data-test-subj="securityUsersPageHeader"
rightSideItems={
this.props.readOnly
? undefined
Expand Down
7 changes: 7 additions & 0 deletions x-pack/test/functional/apps/management/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,12 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) {
return {
...functionalConfig.getAll(),
testFiles: [require.resolve('.')],
kbnTestServer: {
...functionalConfig.get('kbnTestServer'),
serverArgs: [
...functionalConfig.get('kbnTestServer.serverArgs'),
'--xpack.spaces.experimental.forceSolutionVisibility=true',
],
},
};
}
1 change: 1 addition & 0 deletions x-pack/test/functional/apps/management/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ export default function ({ loadTestFile }: FtrProviderContext) {
describe('management', function () {
loadTestFile(require.resolve('./create_index_pattern_wizard'));
loadTestFile(require.resolve('./feature_controls'));
loadTestFile(require.resolve('./landing_page'));
});
}
104 changes: 104 additions & 0 deletions x-pack/test/functional/apps/management/landing_page.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
/*
* 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 expect from '@kbn/expect';
import type { SolutionView } from '@kbn/spaces-plugin/common';
import { FtrProviderContext } from '../../ftr_provider_context';

export default function ({ getService, getPageObjects }: FtrProviderContext) {
const browser = getService('browser');
const testSubjects = getService('testSubjects');
const spaces = getService('spaces');
const PageObjects = getPageObjects(['settings', 'common', 'dashboard', 'timePicker', 'header']);

describe('landing page', function describeIndexTests() {
let cleanUp: () => Promise<unknown> = () => Promise.resolve();
let spaceCreated: { id: string } = { id: '' };

it('should render the "classic" prompt', async function () {
await PageObjects.common.navigateToApp('management');
await testSubjects.existOrFail('managementHome', { timeout: 3000 });
});

describe('solution empty prompt', () => {
const createSpaceWithSolutionAndNavigateToManagement = async (solution: SolutionView) => {
({ cleanUp, space: spaceCreated } = await spaces.create({ solution }));

await PageObjects.common.navigateToApp('management', { basePath: `/s/${spaceCreated.id}` });

return async () => {
await cleanUp();
cleanUp = () => Promise.resolve();
};
};

afterEach(async function afterEach() {
await cleanUp();
});

/** Test that the empty prompt has a button to open the stack managment panel */
const testStackManagmentPanel = async () => {
await testSubjects.missingOrFail('~sideNavPanel-id-stack_management', { timeout: 1000 });
await testSubjects.click('~viewAllStackMngtPagesButton'); // open the side nav
await testSubjects.existOrFail('~sideNavPanel-id-stack_management', { timeout: 3000 });
};

const testCorrectEmptyPrompt = async () => {
await testSubjects.missingOrFail('managementHome', { timeout: 3000 });
await testSubjects.existOrFail('managementHomeSolution', { timeout: 3000 });
};

it('should render the "solution" prompt when the space has a solution set', async function () {
{
const deleteSpace = await createSpaceWithSolutionAndNavigateToManagement('es');
await testCorrectEmptyPrompt();
await testStackManagmentPanel();
await deleteSpace();
}

{
const deleteSpace = await createSpaceWithSolutionAndNavigateToManagement('oblt');
await testCorrectEmptyPrompt();
await testStackManagmentPanel();
await deleteSpace();
}

{
const deleteSpace = await createSpaceWithSolutionAndNavigateToManagement('security');
await testCorrectEmptyPrompt();
await testStackManagmentPanel();
await deleteSpace();
}
});

it('should have links to pages in management', async function () {
await createSpaceWithSolutionAndNavigateToManagement('es');

await testSubjects.click('~managementLinkToIndices', 3000);
await testSubjects.existOrFail('~indexManagementHeaderContent', { timeout: 3000 });
await browser.goBack();
await testSubjects.existOrFail('managementHomeSolution', { timeout: 3000 });

await testSubjects.click('~managementLinkToDataViews', 3000);
await testSubjects.existOrFail('~indexPatternTable', { timeout: 3000 });
await browser.goBack();
await testSubjects.existOrFail('managementHomeSolution', { timeout: 3000 });

await testSubjects.click('~managementLinkToIngestPipelines', 3000);
const appTitle = await testSubjects.getVisibleText('appTitle');
expect(appTitle).to.be('Ingest Pipelines');
// Note: for some reason, browser.goBack() does not work from Ingest Pipelines
// so using navigateToApp instead;
await PageObjects.common.navigateToApp('management', { basePath: `/s/${spaceCreated.id}` });
await testSubjects.existOrFail('managementHomeSolution', { timeout: 3000 });

await testSubjects.click('~managementLinkToUsers', 3000);
await testSubjects.existOrFail('~securityUsersPageHeader', { timeout: 3000 });
});
});
});
}

0 comments on commit 1af2486

Please sign in to comment.