Skip to content

Commit

Permalink
add back button test for large dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
Dosant committed Apr 3, 2020
1 parent bb9e5bb commit c0f82fd
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 216 deletions.
226 changes: 10 additions & 216 deletions test/functional/apps/dashboard/dashboard_back_button.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,236 +18,30 @@
*/

import expect from '@kbn/expect';
import { FtrProviderContext } from '../../ftr_provider_context';

export default function({ getService, getPageObjects }) {
const queryBar = getService('queryBar');
export default function({ getService, getPageObjects }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
const kibanaServer = getService('kibanaServer');
const dashboardAddPanel = getService('dashboardAddPanel');
const PageObjects = getPageObjects(['dashboard', 'header', 'common', 'visualize', 'timePicker']);
const dashboardName = 'dashboard with filter';
const filterBar = getService('filterBar');
const browser = getService('browser');

describe('dashboard view edit mode', function viewEditModeTests() {
describe('dashboard back button', () => {
before(async () => {
await esArchiver.load('dashboard/current/kibana');
await esArchiver.loadIfNeeded('dashboard/current/kibana');
await kibanaServer.uiSettings.replace({
defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c',
});
await PageObjects.common.navigateToApp('dashboard');
await PageObjects.dashboard.preserveCrossAppState();
});

it('create new dashboard opens in edit mode', async function() {
it('after navigation from listing page to dashboard back button works', async () => {
await PageObjects.dashboard.gotoDashboardLandingPage();
await PageObjects.dashboard.clickNewDashboard();
await PageObjects.dashboard.clickCancelOutOfEditMode();
});

it('existing dashboard opens in view mode', async function() {
await PageObjects.dashboard.gotoDashboardLandingPage();
await PageObjects.dashboard.loadSavedDashboard(dashboardName);
const inViewMode = await PageObjects.dashboard.getIsInViewMode();

expect(inViewMode).to.equal(true);
});

describe('save', function() {
it('auto exits out of edit mode', async function() {
await PageObjects.dashboard.gotoDashboardEditMode(dashboardName);
await PageObjects.dashboard.saveDashboard(dashboardName);
const isViewMode = await PageObjects.dashboard.getIsInViewMode();
expect(isViewMode).to.equal(true);
});
});

describe('shows lose changes warning', function() {
describe('and loses changes on confirmation', function() {
beforeEach(async function() {
await PageObjects.dashboard.gotoDashboardEditMode(dashboardName);
});

it('when time changed is stored with dashboard', async function() {
await PageObjects.timePicker.setDefaultDataRange();

const originalTime = await PageObjects.timePicker.getTimeConfig();

await PageObjects.dashboard.saveDashboard(dashboardName, {
storeTimeWithDashboard: true,
});

await PageObjects.dashboard.switchToEditMode();
await PageObjects.timePicker.setAbsoluteRange(
'Sep 19, 2013 @ 06:31:44.000',
'Sep 19, 2013 @ 06:31:44.000'
);
await PageObjects.dashboard.clickCancelOutOfEditMode();

// confirm lose changes
await PageObjects.common.clickConfirmOnModal();

const newTime = await PageObjects.timePicker.getTimeConfig();

expect(newTime.start).to.equal(originalTime.start);
expect(newTime.end).to.equal(originalTime.end);
});

it('when the query is edited and applied', async function() {
const originalQuery = await queryBar.getQueryString();
await queryBar.setQuery(`${originalQuery}and extra stuff`);
await queryBar.submitQuery();

await PageObjects.dashboard.clickCancelOutOfEditMode();

// confirm lose changes
await PageObjects.common.clickConfirmOnModal();

const query = await queryBar.getQueryString();
expect(query).to.equal(originalQuery);
});

it('when a filter is deleted', async function() {
// This may seem like a pointless line but there was a bug that only arose when the dashboard
// was loaded initially
await PageObjects.dashboard.loadSavedDashboard(dashboardName);
await PageObjects.dashboard.switchToEditMode();

let hasFilter = await filterBar.hasFilter('animal', 'dog');
expect(hasFilter).to.be(true);

await filterBar.removeFilter('animal');

hasFilter = await filterBar.hasFilter('animal', 'dog');
expect(hasFilter).to.be(false);

await PageObjects.dashboard.clickCancelOutOfEditMode();

// confirm lose changes
await PageObjects.common.clickConfirmOnModal();

hasFilter = await filterBar.hasFilter('animal', 'dog');
expect(hasFilter).to.be(true);
});

it('when a new vis is added', async function() {
const originalPanelCount = await PageObjects.dashboard.getPanelCount();

await dashboardAddPanel.ensureAddPanelIsShowing();
await dashboardAddPanel.clickAddNewEmbeddableLink('visualization');
await PageObjects.visualize.clickAreaChart();
await PageObjects.visualize.clickNewSearch();
await PageObjects.visualize.saveVisualizationExpectSuccess('new viz panel');

await PageObjects.dashboard.clickCancelOutOfEditMode();
// for this sleep see https://github.com/elastic/kibana/issues/22299
await PageObjects.common.sleep(500);

// confirm lose changes
await PageObjects.common.clickConfirmOnModal();

const panelCount = await PageObjects.dashboard.getPanelCount();
expect(panelCount).to.eql(originalPanelCount);
});

it('when an existing vis is added', async function() {
const originalPanelCount = await PageObjects.dashboard.getPanelCount();

await dashboardAddPanel.addVisualization('new viz panel');
await PageObjects.dashboard.clickCancelOutOfEditMode();

// confirm lose changes
await PageObjects.common.clickConfirmOnModal();

const panelCount = await PageObjects.dashboard.getPanelCount();
expect(panelCount).to.eql(originalPanelCount);
});
});

describe('and preserves edits on cancel', function() {
it('when time changed is stored with dashboard', async function() {
await PageObjects.dashboard.gotoDashboardEditMode(dashboardName);
await PageObjects.timePicker.setAbsoluteRange(
'Sep 19, 2013 @ 06:31:44.000',
'Sep 19, 2013 @ 06:31:44.000'
);
await PageObjects.dashboard.saveDashboard(dashboardName, true);
await PageObjects.dashboard.switchToEditMode();
await PageObjects.timePicker.setAbsoluteRange(
'Sep 19, 2015 @ 06:31:44.000',
'Sep 19, 2015 @ 06:31:44.000'
);
await PageObjects.dashboard.clickCancelOutOfEditMode();

await PageObjects.common.clickCancelOnModal();
await PageObjects.dashboard.saveDashboard(dashboardName, {
storeTimeWithDashboard: true,
});

await PageObjects.dashboard.loadSavedDashboard(dashboardName);

const time = await PageObjects.timePicker.getTimeConfig();

expect(time.start).to.equal('Sep 19, 2015 @ 06:31:44.000');
expect(time.end).to.equal('Sep 19, 2015 @ 06:31:44.000');
});
});
});

describe('and preserves edits on cancel', function() {
it('when time changed is stored with dashboard', async function() {
await PageObjects.dashboard.gotoDashboardEditMode(dashboardName);
await PageObjects.timePicker.setDefaultDataRange();
await PageObjects.dashboard.saveDashboard(dashboardName, true);
await PageObjects.dashboard.switchToEditMode();
await PageObjects.timePicker.setAbsoluteRange(
'Sep 19, 2013 @ 06:31:44.000',
'Sep 19, 2013 @ 06:31:44.000'
);
const newTime = await PageObjects.timePicker.getTimeConfig();

await PageObjects.dashboard.clickCancelOutOfEditMode();

await PageObjects.common.clickCancelOnModal();
await PageObjects.dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: true });

await PageObjects.dashboard.loadSavedDashboard(dashboardName);

const time = await PageObjects.timePicker.getTimeConfig();

expect(time.start).to.equal(newTime.start);
expect(time.end).to.equal(newTime.end);
});
});

describe('Does not show lose changes warning', function() {
it('when time changed is not stored with dashboard', async function() {
await PageObjects.dashboard.gotoDashboardEditMode(dashboardName);
await PageObjects.dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: false });
await PageObjects.dashboard.switchToEditMode();
await PageObjects.timePicker.setAbsoluteRange(
'Oct 19, 2014 @ 06:31:44.000',
'Dec 19, 2014 @ 06:31:44.000'
);
await PageObjects.dashboard.clickCancelOutOfEditMode();

await PageObjects.common.expectConfirmModalOpenState(false);
});

// See https://github.com/elastic/kibana/issues/10110 - this is intentional.
it('when the query is edited but not applied', async function() {
await PageObjects.dashboard.gotoDashboardEditMode(dashboardName);

const originalQuery = await queryBar.getQueryString();
await queryBar.setQuery(`${originalQuery}extra stuff`);

await PageObjects.dashboard.clickCancelOutOfEditMode();

await PageObjects.common.expectConfirmModalOpenState(false);

await PageObjects.dashboard.loadSavedDashboard(dashboardName);
const query = await queryBar.getQueryString();
expect(query).to.equal(originalQuery);
});
await PageObjects.dashboard.loadSavedDashboard('dashboard with everything');
await PageObjects.dashboard.waitForRenderComplete();
await browser.goBack();
expect(await PageObjects.dashboard.onDashboardLandingPage()).to.be(true);
});
});
}
1 change: 1 addition & 0 deletions test/functional/apps/dashboard/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ export default function({ getService, loadTestFile }) {
loadTestFile(require.resolve('./dashboard_options'));
loadTestFile(require.resolve('./data_shared_attributes'));
loadTestFile(require.resolve('./embed_mode'));
loadTestFile(require.resolve('./dashboard_back_button'));

// Note: This one must be last because it unloads some data for one of its tests!
// No, this isn't ideal, but loading/unloading takes so much time and these are all bunched
Expand Down

0 comments on commit c0f82fd

Please sign in to comment.