From a5407cc3bdb23b34f888bd0aeee41d1dfc46940f Mon Sep 17 00:00:00 2001 From: geido Date: Tue, 25 Oct 2022 18:21:55 +0300 Subject: [PATCH 1/2] Fix high frequency flaky tests --- .../cypress/integration/chart_list/list.test.ts | 3 +-- .../integration/dashboard/editmode.test.ts | 15 ++++++++++----- .../explore/advanced_analytics.test.ts | 9 +++++++-- .../cypress/integration/explore/control.test.ts | 15 ++++----------- .../cypress/integration/explore/utils.ts | 17 +++++++++++++++-- .../cypress/integration/sqllab/tabs.test.ts | 4 ++-- 6 files changed, 39 insertions(+), 24 deletions(-) diff --git a/superset-frontend/cypress-base/cypress/integration/chart_list/list.test.ts b/superset-frontend/cypress-base/cypress/integration/chart_list/list.test.ts index faaf00ddf51eb..c64effd411493 100644 --- a/superset-frontend/cypress-base/cypress/integration/chart_list/list.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/chart_list/list.test.ts @@ -88,7 +88,6 @@ describe('Charts list', () => { saveChartToDashboard('1 - Sample dashboard'); saveChartToDashboard('2 - Sample dashboard'); saveChartToDashboard('3 - Sample dashboard'); - saveChartToDashboard('4 - Sample dashboard'); visitChartList(); cy.getBySel('count-crosslinks').should('be.visible'); cy.getBySel('crosslinks') @@ -96,7 +95,7 @@ describe('Charts list', () => { .trigger('mouseover') .then(() => { cy.get('.ant-tooltip') - .contains('4 - Sample dashboard') + .contains('3 - Sample dashboard') .invoke('removeAttr', 'target') .click(); cy.wait('@get'); diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/editmode.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard/editmode.test.ts index 9f05f2fc290b2..f4cc44acc81f5 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/editmode.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/editmode.test.ts @@ -148,16 +148,21 @@ function assertMetadata(text: string) { }); } function clearMetadata() { - cy.wait(500); cy.get('#json_metadata').then($jsonmetadata => { - cy.wrap($jsonmetadata).type('{selectall} {backspace}'); + cy.wrap($jsonmetadata).find('.ace_content').click(); + cy.wrap($jsonmetadata) + .find('.ace_text-input') + .type('{selectall} {backspace}'); }); } function writeMetadata(metadata: string) { - cy.get('#json_metadata').then($jsonmetadata => { - cy.wrap($jsonmetadata).type(metadata, { parseSpecialCharSequences: false }); - }); + cy.get('#json_metadata').then($jsonmetadata => + cy + .wrap($jsonmetadata) + .find('.ace_text-input') + .type(metadata, { parseSpecialCharSequences: false }), + ); } function openExplore(chartName: string) { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/advanced_analytics.test.ts b/superset-frontend/cypress-base/cypress/integration/explore/advanced_analytics.test.ts index f43076bbbfba9..f38fdbd3a92d1 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/advanced_analytics.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/explore/advanced_analytics.test.ts @@ -29,7 +29,9 @@ describe('Advanced analytics', () => { cy.visitChartByName('Num Births Trend'); cy.verifySliceSuccess({ waitAlias: '@postJson' }); - cy.get('.ant-collapse-header').contains('Advanced Analytics').click(); + cy.get('.ant-collapse-header') + .contains('Advanced Analytics') + .click({ force: true }); cy.get('[data-test=time_compare]').find('.ant-select').click(); cy.get('[data-test=time_compare]') @@ -43,13 +45,16 @@ describe('Advanced analytics', () => { cy.get('button[data-test="run-query-button"]').click(); cy.wait('@postJson'); cy.wait('@putExplore'); + cy.reload(); cy.verifySliceSuccess({ waitAlias: '@postJson', chartSelector: 'svg', }); cy.wait('@getExplore'); - cy.get('.ant-collapse-header').contains('Advanced Analytics').click(); + cy.get('.ant-collapse-header') + .contains('Advanced Analytics') + .click({ force: true }); cy.get('[data-test=time_compare]') .find('.ant-select-selector') .contains('28 days'); diff --git a/superset-frontend/cypress-base/cypress/integration/explore/control.test.ts b/superset-frontend/cypress-base/cypress/integration/explore/control.test.ts index 5686ad43f88cf..98bb95f000abc 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/control.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/explore/control.test.ts @@ -23,12 +23,13 @@ import { interceptChart } from 'cypress/utils'; import { FORM_DATA_DEFAULTS, NUM_METRIC } from './visualizations/shared.helper'; describe('Datasource control', () => { + beforeEach(() => { + cy.preserveLogin(); + }); + const newMetricName = `abc${Date.now()}`; it('should allow edit dataset', () => { - let numScripts = 0; - - cy.login(); interceptChart({ legacy: true }).as('chartData'); cy.visitChartByName('Num Births Trend'); @@ -36,16 +37,8 @@ describe('Datasource control', () => { cy.get('[data-test="datasource-menu-trigger"]').click(); - cy.get('script').then(nodes => { - numScripts = nodes.length; - }); - cy.get('[data-test="edit-dataset"]').click(); - // should load additional scripts for the modal - cy.get('script').then(nodes => { - expect(nodes.length).to.greaterThan(numScripts); - }); cy.get('[data-test="edit-dataset-tabs"]').within(() => { cy.contains('Metrics').click(); }); diff --git a/superset-frontend/cypress-base/cypress/integration/explore/utils.ts b/superset-frontend/cypress-base/cypress/integration/explore/utils.ts index 83e391acc0f59..eb8631c753ee6 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/utils.ts +++ b/superset-frontend/cypress-base/cypress/integration/explore/utils.ts @@ -17,6 +17,8 @@ * under the License. */ +import { interceptGet as interceptDashboardGet } from '../dashboard/utils'; + export function interceptFiltering() { cy.intercept('GET', `/api/v1/chart/?q=*`).as('filtering'); } @@ -41,6 +43,10 @@ export function interceptExploreJson() { cy.intercept('POST', `/superset/explore_json/**`).as('getJson'); } +export function interceptExploreGet() { + cy.intercept('GET', `/api/v1/explore/?slice_id=**`).as('getExplore'); +} + export function setFilter(filter: string, option: string) { interceptFiltering(); @@ -51,6 +57,10 @@ export function setFilter(filter: string, option: string) { } export function saveChartToDashboard(dashboardName: string) { + interceptDashboardGet(); + interceptUpdate(); + interceptExploreGet(); + cy.getBySel('query-save-button').click(); cy.get( '[data-test="save-chart-modal-select-dashboard-form"] [aria-label="Select a dashboard"]', @@ -59,13 +69,16 @@ export function saveChartToDashboard(dashboardName: string) { .click(); cy.get( '.ant-select-selection-search-input[aria-label="Select a dashboard"]', - ).type(dashboardName); + ).type(dashboardName.slice(0, 3)); cy.get(`.ant-select-item-option[title="${dashboardName}"]`).click(); cy.getBySel('btn-modal-save').click(); + + cy.wait('@update'); + cy.wait('@get'); + cy.wait('@getExplore'); } export function visitSampleChartFromList(chartName: string) { cy.getBySel('table-row').contains(chartName).click(); cy.intercept('POST', '/superset/explore_json/**').as('getJson'); - cy.wait(500); } diff --git a/superset-frontend/cypress-base/cypress/integration/sqllab/tabs.test.ts b/superset-frontend/cypress-base/cypress/integration/sqllab/tabs.test.ts index c7f1a23e47d2a..0f08593022a6d 100644 --- a/superset-frontend/cypress-base/cypress/integration/sqllab/tabs.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/sqllab/tabs.test.ts @@ -39,11 +39,11 @@ describe('SqlLab query tabs', () => { ); // add two new tabs - cy.get('[data-test="add-tab-icon"]:visible:last').click(); + cy.get('[data-test="add-tab-icon"]:visible:last').click({ force: true }); cy.contains('[role="tab"]', `Untitled Query ${initialUntitledCount + 1}`); cy.get(tabSelector).should('have.length', initialTabCount + 1); - cy.get('[data-test="add-tab-icon"]:visible:last').click(); + cy.get('[data-test="add-tab-icon"]:visible:last').click({ force: true }); cy.contains('[role="tab"]', `Untitled Query ${initialUntitledCount + 2}`); cy.get(tabSelector).should('have.length', initialTabCount + 2); From 098279d4271b0d9d5deeb43d6c29e38d7d4db68e Mon Sep 17 00:00:00 2001 From: geido Date: Wed, 26 Oct 2022 17:21:41 +0300 Subject: [PATCH 2/2] Fix lower frequency flaky tests --- .../cypress/integration/dashboard/editmode.test.ts | 1 + .../integration/dashboard/nativeFilters.test.ts | 14 +++++++------- .../cypress/integration/explore/control.test.ts | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/editmode.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard/editmode.test.ts index f4cc44acc81f5..794dc9744f436 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/editmode.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/editmode.test.ts @@ -62,6 +62,7 @@ function dragComponent( cy.getBySel('dashboard-charts-filter-search-input').type(component); cy.wait('@filtering'); } + cy.wait(500); drag(`[data-test="${target}"]`, component).to( '[data-test="grid-content"] [data-test="dragdroppable-object"]', ); diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/nativeFilters.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard/nativeFilters.test.ts index 3a869000356d2..3d9f92962d041 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/nativeFilters.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/nativeFilters.test.ts @@ -593,13 +593,13 @@ describe('Native filters', () => { }); it('User can cancel changes in native filter', () => { - visitDashboard(); - enterNativeFilterEditModal(false); - fillNativeFilterForm( - testItems.filterType.value, - 'suffix', - testItems.datasetForNativeFilter, - ); + prepareDashboardFilters([ + { name: 'country_name', column: 'country_name', datasetId: 2 }, + ]); + enterNativeFilterEditModal(); + cy.getBySel('filters-config-modal__name-input').type('|EDITED', { + force: true, + }); cancelNativeFilterSettings(); enterNativeFilterEditModal(); cy.get(nativeFilters.filtersList.removeIcon).first().click(); diff --git a/superset-frontend/cypress-base/cypress/integration/explore/control.test.ts b/superset-frontend/cypress-base/cypress/integration/explore/control.test.ts index 98bb95f000abc..28354b256d786 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/control.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/explore/control.test.ts @@ -198,6 +198,7 @@ describe('Time range filter', () => { cy.get('input[value="now"]'); }); cy.get('[data-test=cancel-button]').click(); + cy.wait(500); cy.get('.ant-popover').should('not.be.visible'); }); });