Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Functional tests for the Getting Started page #11850

Merged
Merged
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
<div class="kuiViewContent gettingStartedContent" data-test-subj="gettingStartedContainer">
<div
class="kuiViewContent gettingStartedContent"
data-test-subj="gettingStartedContainer"
>

<div
ng-if="!gettingStarted.hasOptedOut()"
Expand Down
78 changes: 78 additions & 0 deletions test/functional/apps/management/_getting_started.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import expect from 'expect.js';

export default ({ getService, getPageObjects }) => {
const kibanaServer = getService('kibanaServer');
const esArchiver = getService('esArchiver');
const remote = getService('remote');
const log = getService('log');

const PageObjects = getPageObjects(['common', 'gettingStarted']);

describe('Getting Started page', () => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we have a test that ensures the navigation is displayed properly when the user manually navigates to the Getting Starting page from the Management page?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added this as part of 5351e61.

describe('when no index patterns exist', () => {
beforeEach(async () => {
// delete .kibana index and then wait for Kibana to re-create it
await esArchiver.unload('logstash_functional');
await esArchiver.load('empty_kibana');
});

describe('when user has not opted out of Getting Started page', () => {
beforeEach(async () => {
// First, we navigate to *somewhere* in Kibana so the browser loads up Kibana. This allows us...
await PageObjects.common.navigateToUrl('discover', '');

// ... to remove the Getting Started page opt-out flag from local storage for the Kibana domain
await remote.deleteLocalStorageItem('kibana.isGettingStartedOptedOut');
});

it('redirects to the Getting Started page', async () => {
await PageObjects.common.navigateToUrl('discover', '');
await PageObjects.common.waitUntilUrlIncludes('getting_started');
const isLoaded = await PageObjects.gettingStarted.doesContainerExist();
expect(isLoaded).to.be(true);
});
});

describe('when user has opted out of Getting Started page', () => {
beforeEach(async () => {
await PageObjects.gettingStarted.optOut();
});

it('does not redirect to the Getting Started page', async () => {
await PageObjects.common.navigateToUrl('discover', '');
const isLoaded = await PageObjects.gettingStarted.doesContainerExist();
expect(isLoaded).to.be(false);
});
});

});

describe('when index patterns exist', () => {
beforeEach(async () => {
log.debug('load kibana index with default index pattern');
await esArchiver.load('discover');
await kibanaServer.uiSettings.replace({
'dateFormat:tz':'UTC',
'defaultIndex':'logstash-*'
});
});

it('does not redirect to the Getting Started page', async () => {
await PageObjects.common.navigateToUrl('discover', '');
const isLoaded = await PageObjects.gettingStarted.doesContainerExist();
expect(isLoaded).to.be(false);
});

describe('when a user directly navigates to the Getting Started page', () => {
beforeEach(async () => {
await PageObjects.gettingStarted.navigateTo();
});

it('the kibana chrome (which contains the global nav) is visible', async () => {
const isChromeVisible = await PageObjects.common.isChromeVisible();
expect(isChromeVisible).to.be(true);
});
});
});
});
};
1 change: 1 addition & 0 deletions test/functional/apps/management/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export default function ({ getService, loadTestFile }) {
loadTestFile(require.resolve('./_scripted_fields'));
loadTestFile(require.resolve('./_index_pattern_filter'));
loadTestFile(require.resolve('./_scripted_fields_filter'));
loadTestFile(require.resolve('./_getting_started'));
});

}
4 changes: 4 additions & 0 deletions test/functional/page_objects/common_page.js
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,10 @@ export function CommonPageProvider({ getService, getPageObjects, getPageObject }
log.debug(`exists? ${exists}`);
return exists;
}

async isChromeVisible() {
return await testSubjects.exists('kibanaChrome');
}
}

return new CommonPage();
Expand Down
9 changes: 8 additions & 1 deletion test/functional/page_objects/getting_started_page.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
export function GettingStartedPageProvider({ getService }) {
export function GettingStartedPageProvider({ getService, getPageObjects }) {

const log = getService('log');
const retry = getService('retry');
const testSubjects = getService('testSubjects');

const PageObjects = getPageObjects(['common']);

class GettingStartedPage {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this even an instantiated class? I'm not seeing any local state or anything. All the methods just call static methods, or instance methods off already instantiated objects.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure TBH. I was following the pattern already established with other page objects. If we want to change this pattern I suggest we open a new issue for doing it across the board for all page objects and then fix it there.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

async doesContainerExist() {
return await testSubjects.exists('gettingStartedContainer');
Expand All @@ -18,6 +20,11 @@ export function GettingStartedPageProvider({ getService }) {
}
});
}

async navigateTo() {
log.debug('Navigating directly to Getting Started page');
await PageObjects.common.navigateToUrl('settings', 'kibana/getting_started');
}
}

return new GettingStartedPage();
Expand Down