[application_deep_links] Unify / improve navigation between apps (#170228)

## Summary

Attempt at fixing https://github.com/elastic/kibana/issues/166893

PR [#168741](https://github.com/elastic/kibana/pull/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
This commit is contained in:
Gerard Soldevila 2023-11-02 10:04:51 +01:00 committed by GitHub
parent ca90574ff7
commit 8315d8c3fb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -8,11 +8,10 @@
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');
@ -20,8 +19,13 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide
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({
@ -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 () => {