You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by su...@apache.org on 2021/03/23 23:11:23 UTC
[superset] 01/01: chore(cypress): make the load dashboard test
behavior driven
This is an automated email from the ASF dual-hosted git repository.
suddjian pushed a commit to branch behavior-driven-cypress
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 9791c34f8bb80966f224141b440450e3a1838efe
Author: David Aaron Suddjian <aa...@gmail.com>
AuthorDate: Tue Mar 23 16:08:42 2021 -0700
chore(cypress): make the load dashboard test behavior driven
---
.../integration/dashboard/dashboard.helper.ts | 13 +++++
.../cypress/integration/dashboard/load.test.ts | 55 +++++++---------------
.../dashboard/components/gridComponents/Chart.jsx | 7 ++-
3 files changed, 36 insertions(+), 39 deletions(-)
diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/dashboard.helper.ts b/superset-frontend/cypress-base/cypress/integration/dashboard/dashboard.helper.ts
index 1ad5136..8f08bce 100644
--- a/superset-frontend/cypress-base/cypress/integration/dashboard/dashboard.helper.ts
+++ b/superset-frontend/cypress-base/cypress/integration/dashboard/dashboard.helper.ts
@@ -22,6 +22,19 @@ export const TABBED_DASHBOARD = '/superset/dashboard/tabbed_dash/';
export const CHECK_DASHBOARD_FAVORITE_ENDPOINT =
'/superset/favstar/Dashboard/*/count';
+export const WORLD_HEALTH_CHARTS = [
+ { name: 'Region Filter', viz: 'filter_box' },
+ { name: '% Rural', viz: 'world_map' },
+ { name: 'Most Populated Countries', viz: 'table' },
+ { name: "World's Population", viz: 'big_number' },
+ { name: 'Growth Rate', viz: 'line' },
+ { name: 'Rural Breakdown', viz: 'sunburst' },
+ { name: "World's Pop Growth", viz: 'area' },
+ { name: 'Life Expectancy VS Rural %', viz: 'bubble' },
+ { name: 'Treemap', viz: 'treemap' },
+ { name: 'Box plot', viz: 'box_plot' },
+];
+
/**
* Drag an element and drop it to another element.
* Usage:
diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/load.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard/load.test.ts
index 0b38a83..4522494 100644
--- a/superset-frontend/cypress-base/cypress/integration/dashboard/load.test.ts
+++ b/superset-frontend/cypress-base/cypress/integration/dashboard/load.test.ts
@@ -17,53 +17,32 @@
* under the License.
*/
import {
- getChartAliases,
- isLegacyResponse,
- getSliceIdFromRequestUrl,
- JsonObject,
-} from '../../utils/vizPlugins';
-import { WORLD_HEALTH_DASHBOARD } from './dashboard.helper';
+ WORLD_HEALTH_CHARTS,
+ WORLD_HEALTH_DASHBOARD,
+} from './dashboard.helper';
describe('Dashboard load', () => {
- let dashboard;
- let aliases: string[];
beforeEach(() => {
cy.login();
-
cy.visit(WORLD_HEALTH_DASHBOARD);
-
- cy.get('#app').then(nodes => {
- const bootstrapData = JSON.parse(nodes[0].dataset.bootstrap || '');
- dashboard = bootstrapData.dashboard_data;
- const { slices } = dashboard;
- // then define routes and create alias for each requests
- aliases = getChartAliases(slices);
- });
});
it('should load dashboard', () => {
// wait and verify one-by-one
- cy.wait(aliases).then(requests =>
- Promise.all(
- requests.map(async ({ response, request }) => {
- const responseBody = response?.body;
- let sliceId;
- if (isLegacyResponse(responseBody)) {
- expect(responseBody).to.have.property('errors');
- expect(responseBody.errors.length).to.eq(0);
- sliceId = responseBody.form_data.slice_id;
- } else {
- sliceId = getSliceIdFromRequestUrl(request.url);
- responseBody.result.forEach((element: JsonObject) => {
- expect(element).to.have.property('error', null);
- expect(element).to.have.property('status', 'success');
- });
- }
- cy.get('[data-test="grid-content"]')
- .find(`#chart-id-${sliceId}`)
+ WORLD_HEALTH_CHARTS.forEach(({ name, viz }) => {
+ // prettier-ignore
+ cy.get('[data-test="grid-content"] [data-test="editable-title"]').contains(name)
+ // use the chart title to find the chart grid component,
+ // which has the chart id and viz type info
+ .parentsUntil('[data-test="chart-grid-component"]').parent()
+ .should('have.attr', 'data-test-viz-type', viz)
+ .then(chartElement => {
+ const chartId = chartElement.attr('data-test-chart-id');
+ // the chart should load in under a minute
+ // (big timeout so that it works in CI)
+ cy.wrap(chartElement).find(`#chart-id-${chartId}`, { timeout: 30000 })
.should('be.visible');
- }),
- ),
- );
+ });
+ });
});
});
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Chart.jsx b/superset-frontend/src/dashboard/components/gridComponents/Chart.jsx
index cdc8ba9..6e8e350 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Chart.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Chart.jsx
@@ -288,7 +288,12 @@ export default class Chart extends React.Component {
})
: {};
return (
- <div className="chart-slice">
+ <div
+ className="chart-slice"
+ data-test="chart-grid-component"
+ data-test-chart-id={id}
+ data-test-viz-type={slice.viz_type}
+ >
<SliceHeader
innerRef={this.setHeaderRef}
slice={slice}