Skip to content

Commit

Permalink
Add more trys and remove toast messages immediately
Browse files Browse the repository at this point in the history
  • Loading branch information
stacey-gammon committed Apr 4, 2017
1 parent fd496aa commit fe4b4a4
Show file tree
Hide file tree
Showing 6 changed files with 163 additions and 113 deletions.
76 changes: 42 additions & 34 deletions test/functional/apps/dashboard/_dashboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ bdd.describe('dashboard tab', function describeIndexTests() {
bdd.it('should save and load dashboard', async function saveAndLoadDashboard() {
const dashboardName = 'Dashboard Test 1';
await PageObjects.dashboard.saveDashboard(dashboardName);
await PageObjects.header.clickToastOK();
await PageObjects.dashboard.gotoDashboardLandingPage();

await PageObjects.common.try(function () {
Expand Down Expand Up @@ -80,47 +81,47 @@ bdd.describe('dashboard tab', function describeIndexTests() {
});
});
});
});

bdd.describe('filters', async function () {
bdd.it('are not selected by default', async function () {
const descriptions = await PageObjects.dashboard.getFilterDescriptions(1000);
expect(descriptions.length).to.equal(0);
bdd.describe('filters', async function () {
bdd.it('are not selected by default', async function () {
const descriptions = await PageObjects.dashboard.getFilterDescriptions(1000);
expect(descriptions.length).to.equal(0);
});

bdd.it('are added when a pie chart slice is clicked', async function () {
await PageObjects.dashboard.filterOnPieSlice();
const descriptions = await PageObjects.dashboard.getFilterDescriptions();
expect(descriptions.length).to.equal(1);
});
});

bdd.it('are added when a pie chart slice is clicked', async function () {
await PageObjects.dashboard.filterOnPieSlice();
const descriptions = await PageObjects.dashboard.getFilterDescriptions();
expect(descriptions.length).to.equal(1);
bdd.it('retains dark theme in state', async function () {
await PageObjects.dashboard.clickEdit();
await PageObjects.dashboard.useDarkTheme(true);
await PageObjects.header.clickVisualize();
await PageObjects.header.clickDashboard();
const isDarkThemeOn = await PageObjects.dashboard.isDarkThemeOn();
expect(isDarkThemeOn).to.equal(true);
});
});

bdd.it('retains dark theme in state', async function () {
await PageObjects.dashboard.clickEdit();
await PageObjects.dashboard.useDarkTheme(true);
await PageObjects.header.clickVisualize();
await PageObjects.header.clickDashboard();
const isDarkThemeOn = await PageObjects.dashboard.isDarkThemeOn();
expect(isDarkThemeOn).to.equal(true);
});
bdd.it('should have shared-items-count set to the number of visualizations', function checkSavedItemsCount() {
const visualizations = PageObjects.dashboard.getTestVisualizations();
return PageObjects.common.tryForTime(10000, () => PageObjects.dashboard.getSharedItemsCount())
.then(function (count) {
PageObjects.common.log('shared-items-count = ' + count);
expect(count).to.eql(visualizations.length);
});
});

bdd.it('should have shared-items-count set to the number of visualizations', function checkSavedItemsCount() {
const visualizations = PageObjects.dashboard.getTestVisualizations();
return PageObjects.common.tryForTime(10000, () => PageObjects.dashboard.getSharedItemsCount())
.then(function (count) {
PageObjects.common.log('shared-items-count = ' + count);
expect(count).to.eql(visualizations.length);
bdd.it('should have panels with expected shared-item title and description', function checkTitles() {
const visualizations = PageObjects.dashboard.getTestVisualizations();
return PageObjects.common.tryForTime(10000, function () {
return PageObjects.dashboard.getPanelSharedItemData()
.then(function (data) {
expect(data.map(item => item.title)).to.eql(visualizations.map(v => v.name));
expect(data.map(item => item.description)).to.eql(visualizations.map(v => v.description));
});
});
});

bdd.it('should have panels with expected shared-item title and description', function checkTitles() {
const visualizations = PageObjects.dashboard.getTestVisualizations();
return PageObjects.common.tryForTime(10000, function () {
return PageObjects.dashboard.getPanelSharedItemData()
.then(function (data) {
expect(data.map(item => item.title)).to.eql(visualizations.map(v => v.name));
expect(data.map(item => item.description)).to.eql(visualizations.map(v => v.description));
});
});

bdd.it('add new visualization link', async function checkTitles() {
Expand All @@ -129,6 +130,8 @@ bdd.it('should have panels with expected shared-item title and description', fun
await PageObjects.visualize.clickAreaChart();
await PageObjects.visualize.clickNewSearch();
await PageObjects.visualize.saveVisualization('visualization from add new link');
await PageObjects.header.clickToastOK();
await PageObjects.header.clickToastOK();

const visualizations = PageObjects.dashboard.getTestVisualizations();
return PageObjects.common.tryForTime(10000, async function () {
Expand All @@ -138,4 +141,9 @@ bdd.it('should have panels with expected shared-item title and description', fun
expect(panelTitles.length).to.eql(visualizations.length + 1);
});
});

// To avoid load errors in subsequent tests that refresh the index.
bdd.it('Finish each test on the landing page', async () => {
await PageObjects.dashboard.gotoDashboardLandingPage();
});
});
9 changes: 9 additions & 0 deletions test/functional/apps/dashboard/_dashboard_save.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ bdd.describe('dashboard save', function describeIndexTests() {
bdd.it('warns on duplicate name for new dashboard', async function() {
await PageObjects.dashboard.clickNewDashboard();
await PageObjects.dashboard.saveDashboard(dashboardName);
await PageObjects.header.clickToastOK();

let isConfirmOpen = await PageObjects.common.isConfirmModalOpen();
expect(isConfirmOpen).to.equal(false);
Expand All @@ -38,6 +39,7 @@ bdd.describe('dashboard save', function describeIndexTests() {
await PageObjects.dashboard.enterDashboardTitleAndClickSave(dashboardName);

await PageObjects.common.clickConfirmOnModal();
await PageObjects.header.clickToastOK();

// This is important since saving a new dashboard will cause a refresh of the page. We have to
// wait till it finishes reloading or it might reload the url after simulating the
Expand All @@ -54,6 +56,7 @@ bdd.describe('dashboard save', function describeIndexTests() {
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.dashboard.clickEdit();
await PageObjects.dashboard.saveDashboard(dashboardName);
await PageObjects.header.clickToastOK();

const isConfirmOpen = await PageObjects.common.isConfirmModalOpen();
expect(isConfirmOpen).to.equal(false);
Expand All @@ -72,6 +75,7 @@ bdd.describe('dashboard save', function describeIndexTests() {

bdd.it('Does not warn when only the prefix matches', async function() {
await PageObjects.dashboard.saveDashboard(dashboardName.split(' ')[0]);
await PageObjects.header.clickToastOK();

const isConfirmOpen = await PageObjects.common.isConfirmModalOpen();
expect(isConfirmOpen).to.equal(false);
Expand All @@ -86,4 +90,9 @@ bdd.describe('dashboard save', function describeIndexTests() {

await PageObjects.common.clickCancelOnModal();
});

// To avoid load errors in subsequent tests that refresh the index.
bdd.it('Finish each test on the landing page', async () => {
await PageObjects.dashboard.gotoDashboardLandingPage();
});
});
7 changes: 7 additions & 0 deletions test/functional/apps/dashboard/_dashboard_time.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ bdd.describe('dashboard time', function dashboardSaveWithTime() {
await PageObjects.dashboard.clickNewDashboard();
await PageObjects.dashboard.addVisualizations([PageObjects.dashboard.getTestVisualizationNames()[0]]);
await PageObjects.dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: false });
await PageObjects.header.clickToastOK();
});

bdd.it('Does not set the time picker on open', async function () {
Expand All @@ -41,6 +42,7 @@ bdd.describe('dashboard time', function dashboardSaveWithTime() {
await PageObjects.dashboard.clickEdit();
await PageObjects.header.setQuickTime('Today');
await PageObjects.dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: true });
await PageObjects.header.clickToastOK();
});

bdd.it('sets quick time on open', async function () {
Expand All @@ -56,6 +58,7 @@ bdd.describe('dashboard time', function dashboardSaveWithTime() {
await PageObjects.dashboard.clickEdit();
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
await PageObjects.dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: true });
await PageObjects.header.clickToastOK();
});

bdd.it('sets absolute time on open', async function () {
Expand Down Expand Up @@ -83,4 +86,8 @@ bdd.describe('dashboard time', function dashboardSaveWithTime() {
});
});

// To avoid load errors in subsequent tests that refresh the index.
bdd.it('Finish each test on the landing page', async () => {
await PageObjects.dashboard.gotoDashboardLandingPage();
});
});
16 changes: 16 additions & 0 deletions test/functional/apps/dashboard/_view_edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ bdd.describe('dashboard view edit mode', function viewEditModeTests() {
await PageObjects.dashboard.clickNewDashboard();
await PageObjects.dashboard.addVisualizations(PageObjects.dashboard.getTestVisualizationNames());
await PageObjects.dashboard.saveDashboard(dashboardName);
await PageObjects.header.clickToastOK();
});

bdd.it('existing dashboard opens in view mode', async function () {
Expand Down Expand Up @@ -66,6 +67,7 @@ bdd.describe('dashboard view edit mode', function viewEditModeTests() {
bdd.describe('on an expanded panel', function () {
bdd.it('are hidden in view mode', async function () {
await PageObjects.dashboard.saveDashboard(dashboardName);
await PageObjects.header.clickToastOK();
await PageObjects.dashboard.toggleExpandPanel();

const editLinkExists = await PageObjects.common.doesTestSubjectExist('dashboardPanelEditLink');
Expand Down Expand Up @@ -101,6 +103,7 @@ bdd.describe('dashboard view edit mode', function viewEditModeTests() {

bdd.it('save auto exits out of edit mode', async function () {
await PageObjects.dashboard.saveDashboard(dashboardName);
await PageObjects.header.clickToastOK();
const isViewMode = await PageObjects.dashboard.getIsInViewMode();

expect(isViewMode).to.equal(true);
Expand All @@ -114,6 +117,7 @@ bdd.describe('dashboard view edit mode', function viewEditModeTests() {
const originalToTime = '2015-09-19 06:31:44.000';
await PageObjects.header.setAbsoluteRange(originalFromTime, originalToTime);
await PageObjects.dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: true });
await PageObjects.header.clickToastOK();

await PageObjects.dashboard.clickEdit();
await PageObjects.header.setAbsoluteRange('2013-09-19 06:31:44.000', '2013-09-19 06:31:44.000');
Expand Down Expand Up @@ -150,6 +154,7 @@ bdd.describe('dashboard view edit mode', function viewEditModeTests() {
await PageObjects.dashboard.setTimepickerInDataRange();
await PageObjects.dashboard.filterOnPieSlice();
await PageObjects.dashboard.saveDashboard(dashboardName);
await PageObjects.header.clickToastOK();

// This may seem like a pointless line but there was a bug that only arose when the dashboard
// was loaded initially
Expand Down Expand Up @@ -187,6 +192,8 @@ bdd.describe('dashboard view edit mode', function viewEditModeTests() {
await PageObjects.visualize.clickAreaChart();
await PageObjects.visualize.clickNewSearch();
await PageObjects.visualize.saveVisualization('new viz panel');
await PageObjects.header.clickToastOK();
await PageObjects.header.clickToastOK();

await PageObjects.dashboard.clickCancelOutOfEditMode();

Expand Down Expand Up @@ -221,12 +228,14 @@ bdd.describe('dashboard view edit mode', function viewEditModeTests() {
const newToTime = '2015-09-19 06:31:44.000';
await PageObjects.header.setAbsoluteRange('2013-09-19 06:31:44.000', '2013-09-19 06:31:44.000');
await PageObjects.dashboard.saveDashboard(dashboardName, true);
await PageObjects.header.clickToastOK();
await PageObjects.dashboard.clickEdit();
await PageObjects.header.setAbsoluteRange(newToTime, newToTime);
await PageObjects.dashboard.clickCancelOutOfEditMode();

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

await PageObjects.dashboard.loadSavedDashboard(dashboardName);

Expand All @@ -243,6 +252,7 @@ bdd.describe('dashboard view edit mode', function viewEditModeTests() {
bdd.it('when time changed is not stored with dashboard', async function () {
await PageObjects.dashboard.clickEdit();
await PageObjects.dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: false });
await PageObjects.header.clickToastOK();
await PageObjects.dashboard.clickEdit();
await PageObjects.header.setAbsoluteRange('2013-10-19 06:31:44.000', '2013-12-19 06:31:44.000');
await PageObjects.dashboard.clickCancelOutOfEditMode();
Expand All @@ -256,6 +266,7 @@ bdd.describe('dashboard view edit mode', function viewEditModeTests() {
await PageObjects.dashboard.setTimepickerInDataRange();
await PageObjects.dashboard.filterOnPieSlice();
await PageObjects.dashboard.saveDashboard(dashboardName);
await PageObjects.header.clickToastOK();
await PageObjects.dashboard.clickEdit();
await PageObjects.dashboard.clickCancelOutOfEditMode();

Expand All @@ -280,4 +291,9 @@ bdd.describe('dashboard view edit mode', function viewEditModeTests() {
expect(query).to.equal(originalQuery);
});
});

// To avoid load errors in subsequent tests that refresh the index.
bdd.it('Finish each test on the landing page', async () => {
await PageObjects.dashboard.gotoDashboardLandingPage();
});
});
41 changes: 19 additions & 22 deletions test/support/page_objects/dashboard_page.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,22 @@ export default class DashboardPage {
* @returns {Promise<boolean>}
*/
async onDashboardLandingPage() {
PageObjects.common.debug(`onDashboardLandingPage`);
PageObjects.common.debug('onDashboardLandingPage');
const exists = await PageObjects.common.doesCssSelectorExist('a[href="#/dashboard"]');
return !exists;
}

async clickDashboardBreadcrumbLink() {
PageObjects.common.debug('clickDashboardBreadcrumbLink');
return PageObjects.common.try(() => PageObjects.common.findByCssSelector('a[href="#/dashboard"]').click());
}

async gotoDashboardLandingPage() {
PageObjects.common.debug('gotoDashboardLandingPage');
const onPage = await this.onDashboardLandingPage();
if (!onPage) {
await PageObjects.common.try(async () => {
const goToDashboardLink = await PageObjects.common.findByCssSelector('a[href="#/dashboard"]');
await goToDashboardLink.click();
await this.clickDashboardBreadcrumbLink();
// Once the searchFilter can be found, we know the page finished loading.
await PageObjects.common.findTestSubject('searchFilter');
});
Expand Down Expand Up @@ -139,29 +143,22 @@ export default class DashboardPage {
.click());
}

addVisualization(vizName) {
return this.clickAddVisualization()
.then(() => {
PageObjects.common.debug('filter visualization (' + vizName + ')');
return this.filterVizNames(vizName);
})
async addVisualization(vizName) {
await this.clickAddVisualization();
PageObjects.common.debug('filter visualization (' + vizName + ')');
await this.filterVizNames(vizName);
// this second wait is usually enough to avoid the
// 'stale element reference: element is not attached to the page document'
// on the next step
.then(() => {
return PageObjects.common.sleep(1000);
})
.then(() => {
// but wrap in a try loop since it can still happen
return PageObjects.common.try(() => {
PageObjects.common.debug('click visualization (' + vizName + ')');
return this.clickVizNameLink(vizName);
});
})
// this second click of 'Add' collapses the Add Visualization pane
.then(() => {
return this.clickAddVisualization();
await PageObjects.common.sleep(1000);
// but wrap in a try loop since it can still happen
await PageObjects.common.try(() => {
PageObjects.common.debug('click visualization (' + vizName + ')');
return this.clickVizNameLink(vizName);
});
await PageObjects.header.clickToastOK();
// this second click of 'Add' collapses the Add Visualization pane
await this.clickAddVisualization();
}

async renameDashboard(dashName) {
Expand Down

0 comments on commit fe4b4a4

Please sign in to comment.