From 099178a7cab514344550962aad629b5b438d48e1 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Tue, 23 May 2017 07:09:04 -0700 Subject: [PATCH] Functional tests for the Getting Started page (#11850) * Adding some more functionality to the Getting Started page object * Using optOut method from Getting Started page object * Adding functional tests for Getting Started page This set of tests specifically tests the scenarios under which a user should or should not get redirected to the Getting Started page * Adding log.debug message * Conforming to HTML style guide * Using new GettingStarted page object methods + opting out * Adding test for nav being shown * Removing unnecessary line * Navigate to Discover expecting to be redirected to the Getting Started page * Trying beforeEach instead of before * Remove LS data index + load empty kibana index * Removing unnecessary line * Fixing order of operations --- .../getting_started/getting_started.html | 5 +- .../apps/management/_getting_started.js | 78 +++++++++++++++++++ test/functional/apps/management/index.js | 1 + test/functional/page_objects/common_page.js | 4 + .../page_objects/getting_started_page.js | 9 ++- 5 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 test/functional/apps/management/_getting_started.js diff --git a/src/core_plugins/getting_started/public/components/getting_started/getting_started.html b/src/core_plugins/getting_started/public/components/getting_started/getting_started.html index 963a2776a379c9..ee55b6728f5edc 100644 --- a/src/core_plugins/getting_started/public/components/getting_started/getting_started.html +++ b/src/core_plugins/getting_started/public/components/getting_started/getting_started.html @@ -1,4 +1,7 @@ -
+
{ + 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', () => { + 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); + }); + }); + }); + }); +}; \ No newline at end of file diff --git a/test/functional/apps/management/index.js b/test/functional/apps/management/index.js index afaea2d42cff78..a9c01555993ae9 100644 --- a/test/functional/apps/management/index.js +++ b/test/functional/apps/management/index.js @@ -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')); }); } diff --git a/test/functional/page_objects/common_page.js b/test/functional/page_objects/common_page.js index a25abfdd43a0fe..fdf7760556cdb0 100644 --- a/test/functional/page_objects/common_page.js +++ b/test/functional/page_objects/common_page.js @@ -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(); diff --git a/test/functional/page_objects/getting_started_page.js b/test/functional/page_objects/getting_started_page.js index f875a66ac2aa3d..aca06aac9d33c8 100644 --- a/test/functional/page_objects/getting_started_page.js +++ b/test/functional/page_objects/getting_started_page.js @@ -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 { async doesContainerExist() { return await testSubjects.exists('gettingStartedContainer'); @@ -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();