Skip to content

Commit

Permalink
[application_deep_links] Unify / improve navigation between apps (ela…
Browse files Browse the repository at this point in the history
…stic#170228)

## Summary

Attempt at fixing elastic#166893

PR [elastic#168741](elastic#168741) forgot to
update one of the tests to **exclusively** use `navigateToAppLinks`.
Thus, the impacted test had a duplicated navigation logic.

This PR:
* removes that unintended call (this should hopefully fix flakiness).
* simplifies and unifies test logic, improving readability.

Flaky test runner pipeline - 100x 🟢  
https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3840
  • Loading branch information
gsoldevila authored Nov 2, 2023
1 parent ca90574 commit 8315d8c
Showing 1 changed file with 27 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,24 @@

import url from 'url';
import expect from '@kbn/expect';
import { PluginFunctionalProviderContext } from '../../services';
import type { PluginFunctionalProviderContext } from '../../services';

export default function ({ getService, getPageObjects }: PluginFunctionalProviderContext) {
const PageObjects = getPageObjects(['common']);

const browser = getService('browser');
const appsMenu = getService('appsMenu');
const testSubjects = getService('testSubjects');
const retry = getService('retry');
const esArchiver = getService('esArchiver');
const log = getService('log');

const loadingScreenNotShown = async () =>
expect(await testSubjects.exists('kbnLoadingMessage')).to.be(false);
const clickAppLink = async (app: string) => {
const appLink = `dlNav${app}`;
if (!(await testSubjects.exists(appLink))) {
log.debug(`App ${app} not found on side nav`);
}
await testSubjects.click(appLink);
};

const getKibanaUrl = (pathname?: string, search?: string) =>
url.format({
Expand All @@ -42,65 +46,64 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide
});
};

const navigateToAppLinks = async (subject: string) => {
if (!(await testSubjects.exists(subject))) {
log.debug(`side nav in app not in DOM`);
}
await testSubjects.click(subject);
const loadingScreenNotShown = async () =>
expect(await testSubjects.exists('kbnLoadingMessage')).to.be(false);

const checkAppVisible = async (app: string) => {
const appContainer = `dlApp${app}`;
await testSubjects.existOrFail(appContainer);
};

// FLAKY: https://github.com/elastic/kibana/issues/166893
describe.skip('application deep links navigation', function describeDeepLinksTests() {
describe('application deep links navigation', function describeDeepLinksTests() {
before(async () => {
await esArchiver.emptyKibanaIndex();
await PageObjects.common.navigateToApp('dl');
});

it('should start on home page', async () => {
await testSubjects.existOrFail('dlAppHome');
await checkAppVisible('Home');
});

it('should navigate to page A when navlink is clicked', async () => {
await navigateToAppLinks('dlNavPageA');
await clickAppLink('PageA');
await waitForUrlToBe('/app/dl/page-a');
await loadingScreenNotShown();
await testSubjects.existOrFail('dlNavPageA');
await checkAppVisible('PageA');
});

it('should be able to use the back button to navigate back to previous deep link', async () => {
await browser.goBack();
await waitForUrlToBe('/app/dl/home');
await loadingScreenNotShown();
await testSubjects.existOrFail('dlNavHome');
await checkAppVisible('Home');
});

it('should navigate to nested page B when navlink is clicked', async () => {
await navigateToAppLinks('dlNavDeepPageB');
await clickAppLink('DeepPageB');
await waitForUrlToBe('/app/dl/page-b');
await loadingScreenNotShown();
await testSubjects.existOrFail('dlNavDeepPageB');
await checkAppVisible('PageB');
});

it('should navigate to Home when navlink is clicked inside the defined category group', async () => {
await appsMenu.clickLink('DL Home', { category: 'securitySolution' });
await navigateToAppLinks('dlAppHome');
await clickAppLink('Home');
await waitForUrlToBe('/app/dl/home');
await loadingScreenNotShown();
await testSubjects.existOrFail('dlAppHome');
await checkAppVisible('Home');
});

it('should navigate to nested page B using navigateToApp path', async () => {
await testSubjects.click('dlNavDeepPageB');
await clickAppLink('DeepPageB');
await waitForUrlToBe('/app/dl/page-b');
await loadingScreenNotShown();
await testSubjects.existOrFail('dlNavDeepPageB');
await checkAppVisible('PageB');
});

it('should navigate to nested page A using navigateToApp deepLinkId', async () => {
await testSubjects.click('dlNavDeepPageAById');
await clickAppLink('DeepPageAById');
await waitForUrlToBe('/app/dl/page-a');
await loadingScreenNotShown();
await testSubjects.existOrFail('dlNavPageA');
await checkAppVisible('PageA');
});

it('should not display hidden deep links', async () => {
Expand Down

0 comments on commit 8315d8c

Please sign in to comment.