You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by di...@apache.org on 2022/09/02 16:55:17 UTC

[superset] 04/05: Improve cleanup samples data

This is an automated email from the ASF dual-hosted git repository.

diegopucci pushed a commit to branch chore/cypress-runtime-enhancements
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 3ea671e4c343e7741cd63df7465a052bec4fa6a3
Author: geido <di...@gmail.com>
AuthorDate: Fri Sep 2 19:10:35 2022 +0300

    Improve cleanup samples data
---
 .../cypress/integration/chart_list/filter.test.ts  |   1 -
 .../cypress/integration/chart_list/list.test.ts    |   4 -
 .../cypress/integration/dashboard/editsave.test.ts |  28 +++---
 .../cypress/integration/dashboard/utils.ts         |   4 +
 .../integration/dashboard_list/filter.test.ts      |   1 -
 .../integration/dashboard_list/list.test.ts        |   4 -
 .../cypress-base/cypress/support/index.d.ts        |   6 +-
 .../cypress-base/cypress/support/index.ts          | 100 ++++++++++++++++-----
 8 files changed, 101 insertions(+), 47 deletions(-)

diff --git a/superset-frontend/cypress-base/cypress/integration/chart_list/filter.test.ts b/superset-frontend/cypress-base/cypress/integration/chart_list/filter.test.ts
index c5308a87f9..0418afd3ff 100644
--- a/superset-frontend/cypress-base/cypress/integration/chart_list/filter.test.ts
+++ b/superset-frontend/cypress-base/cypress/integration/chart_list/filter.test.ts
@@ -22,7 +22,6 @@
 
  describe('Charts filters', () => {
   before(() => {
-    cy.login();
     cy.visit(CHART_LIST);
   });
 
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 966725e921..e3837445d9 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
@@ -44,10 +44,6 @@ function confirmDelete() {
 }
 
 describe('Charts list', () => {
-  before(() => {
-    cy.login();
-  });
-
   beforeEach(() => {
     cy.preserveLogin();
   });
diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/editsave.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard/editsave.test.ts
index f456d9473a..1fd94413c6 100644
--- a/superset-frontend/cypress-base/cypress/integration/dashboard/editsave.test.ts
+++ b/superset-frontend/cypress-base/cypress/integration/dashboard/editsave.test.ts
@@ -19,6 +19,7 @@
 import { SAMPLE_DASHBOARD_1 } from 'cypress/utils/urls';
 import { drag } from 'cypress/utils';
 import {
+  interceptGet,
   interceptUpdate,
 } from './utils';
 import * as ace from 'brace';
@@ -64,9 +65,13 @@ function discardChanges() {
 
 function visitEdit() {
   interceptCharts();
+  interceptGet();
+
   cy.visit(SAMPLE_DASHBOARD_1);
+  cy.wait('@get');
   editDashboard();
   cy.wait('@filtering');
+  cy.wait(500);
 }
 
 function selectColorScheme(color: string) {
@@ -98,7 +103,8 @@ function assertMetadata(text: string) {
     });
 }
 function clearAll(input: string) {
-  return cy.get(input).type('{selectall}{backspace}');
+  cy.get(input).type('{selectall}{backspace}');
+  return cy.wait(500);
 }
 
 describe('Dashboard edit', () => {
@@ -133,6 +139,13 @@ describe('Dashboard edit', () => {
       cy.getBySel('dashboard-charts-filter-search-input').clear();
     });
 
+    it('should disable the Save button when undoing', () => {
+      dragChart();
+      cy.getBySel('header-save-button').should('be.enabled');
+      discardChanges();
+      cy.getBySel('header-save-button').should('be.disabled');
+    });
+
   });
 
   describe('Components', () => {
@@ -245,22 +258,11 @@ describe('Dashboard edit', () => {
   });
 
   describe('Save', () => {
-    before(() => {
+    beforeEach(() => {
       cy.createSampleDashboards();
       visitEdit();
     });
 
-    beforeEach(() => {
-      discardChanges();
-    })
-
-    it('should disable saving when undoing', () => {
-      dragChart();
-      cy.getBySel('header-save-button').should('be.enabled');
-      discardChanges();
-      cy.getBySel('header-save-button').should('be.disabled');
-    });
-
     it('should save', () => {
       dragChart();
       cy.getBySel('header-save-button').should('be.enabled');
diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/utils.ts b/superset-frontend/cypress-base/cypress/integration/dashboard/utils.ts
index b4d2dd3100..072a190314 100644
--- a/superset-frontend/cypress-base/cypress/integration/dashboard/utils.ts
+++ b/superset-frontend/cypress-base/cypress/integration/dashboard/utils.ts
@@ -30,6 +30,10 @@
     { name: 'Box plot', viz: 'box_plot' },
   ] as const;
 
+export function interceptGet() {
+cy.intercept('/api/v1/dashboard/*').as('get');
+}
+
 export function interceptFiltering() {
   cy.intercept('GET', `/api/v1/dashboard/?q=*`).as('filtering');
 }
diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard_list/filter.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard_list/filter.test.ts
index c33a8fe948..8c70ff7a88 100644
--- a/superset-frontend/cypress-base/cypress/integration/dashboard_list/filter.test.ts
+++ b/superset-frontend/cypress-base/cypress/integration/dashboard_list/filter.test.ts
@@ -22,7 +22,6 @@ import { setFilter } from '../dashboard/utils';
 
 describe('Dashboards filters', () => {
   before(() => {
-    cy.login();
     cy.visit(DASHBOARD_LIST);
   });
 
diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard_list/list.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard_list/list.test.ts
index adfb0ea13d..da9d7a4bfc 100644
--- a/superset-frontend/cypress-base/cypress/integration/dashboard_list/list.test.ts
+++ b/superset-frontend/cypress-base/cypress/integration/dashboard_list/list.test.ts
@@ -44,10 +44,6 @@ function confirmDelete() {
 }
 
 describe('Dashboards list', () => {
-  before(() => {
-    cy.login();
-  });
-
   beforeEach(() => {
     cy.preserveLogin();
   });
diff --git a/superset-frontend/cypress-base/cypress/support/index.d.ts b/superset-frontend/cypress-base/cypress/support/index.d.ts
index a5011090ee..a7e0f6836a 100644
--- a/superset-frontend/cypress-base/cypress/support/index.d.ts
+++ b/superset-frontend/cypress-base/cypress/support/index.d.ts
@@ -39,8 +39,10 @@ declare namespace Cypress {
     getBySel(selector: string): cy;
     getBySelLike(selector: string): cy;
     getSampleData(): void;
-    cleanCharts(): void;
-    cleanDashboards(): void;
+    cleanCharts(): cy;
+    cleanDashboards(): cy;
+    loadChartFixtures(): cy;
+    loadDashboardFixtures(): cy;
 
     visitChartByParams(params: string | Record<string, unknown>): cy;
     visitChartByName(name: string): cy;
diff --git a/superset-frontend/cypress-base/cypress/support/index.ts b/superset-frontend/cypress-base/cypress/support/index.ts
index 3c24d167c3..6116feef9c 100644
--- a/superset-frontend/cypress-base/cypress/support/index.ts
+++ b/superset-frontend/cypress-base/cypress/support/index.ts
@@ -25,37 +25,91 @@ const BASE_EXPLORE_URL = '/explore/?form_data=';
 const TokenName = Cypress.env('TOKEN_NAME');
 let SAMPLE_DASHBOARDS: Record<string, any>[] = [];
 let SAMPLE_CHARTS: Record<string, any>[] = [];
+let DASHBOARD_FIXTURES: Record<string, any>[] = [];
+let CHART_FIXTURES: Record<string, any>[] = [];
 
-Cypress.Commands.add('getSampleData', () =>
-  cy.getCharts().then((slices: any) => {
-    SAMPLE_CHARTS = slices;
-    cy.getDashboards().then((dashboards: any) => {
-      SAMPLE_DASHBOARDS = dashboards;
-    });
+Cypress.Commands.add('loadChartFixtures', () =>
+  cy.fixture('charts.json').then(charts => {
+    CHART_FIXTURES = charts
   })
 );
 
-Cypress.Commands.add('cleanDashboards', () =>
+Cypress.Commands.add('loadDashboardFixtures', () =>
   cy.fixture('dashboards.json').then(dashboards => {
-    for (let i = 0; i < dashboards.length; i += 1) {
-      cy.deleteDashboardByName(dashboards[i].dashboard_title, false)
-    }
-  })
-);
-
-Cypress.Commands.add('cleanCharts', () =>
-  cy.fixture('charts.json').then(charts => {
-    for (let i = 0; i < charts.length; i += 1) {
-      cy.deleteChartByName(charts[i].slice_name, false)
-    }
+    DASHBOARD_FIXTURES = dashboards
   })
 );
 
 before(() => {
   cy.login();
+  cy.loadChartFixtures();
+  cy.loadDashboardFixtures();
+  cy.getSampleData();
   cy.cleanDashboards();
   cy.cleanCharts();
-  cy.getSampleData();
+});
+
+Cypress.Commands.add('getSampleData', () => {
+  cy.getCharts().then((slices: any) => {
+    SAMPLE_CHARTS = slices;
+  });
+  cy.getDashboards().then((dashboards: any) => {
+    SAMPLE_DASHBOARDS = dashboards;
+  });
+});
+
+Cypress.Commands.add('cleanDashboards', () =>
+{
+  const deletableDashboards = [];
+  for (let i = 0; i < DASHBOARD_FIXTURES.length; i += 1) {
+    const isInDb = SAMPLE_DASHBOARDS.find(d => d.dashboard_title === DASHBOARD_FIXTURES[i].dashboard_title);
+    if (isInDb) {
+      deletableDashboards.push(isInDb.id);
+    }
+  }
+  return cy
+    .request({
+      failOnStatusCode: false,
+      method: 'DELETE',
+      url: `api/v1/dashboard/?q=!(${deletableDashboards.join(',')})`,
+      headers: {
+        Cookie: `csrf_access_token=${window.localStorage.getItem(
+          'access_token',
+        )}`,
+        'Content-Type': 'application/json',
+        Authorization: `Bearer ${TokenName}`,
+        'X-CSRFToken': `${window.localStorage.getItem('access_token')}`,
+        Referer: `${Cypress.config().baseUrl}/`,
+      },
+    })
+    .then(resp => resp)
+});
+
+Cypress.Commands.add('cleanCharts', () =>
+{
+  const deletableCharts = [];
+  for (let i = 0; i < CHART_FIXTURES.length; i += 1) {
+    const isInDb = SAMPLE_CHARTS.find(c => c.slice_name === CHART_FIXTURES[i].slice_name);
+    if (isInDb) {
+      deletableCharts.push(isInDb.id);
+    }
+  }
+  return cy
+    .request({
+      failOnStatusCode: false,
+      method: 'DELETE',
+      url: `api/v1/chart/?q=!(${deletableCharts.join(',')})`,
+      headers: {
+        Cookie: `csrf_access_token=${window.localStorage.getItem(
+          'access_token',
+        )}`,
+        'Content-Type': 'application/json',
+        Authorization: `Bearer ${TokenName}`,
+        'X-CSRFToken': `${window.localStorage.getItem('access_token')}`,
+        Referer: `${Cypress.config().baseUrl}/`,
+      },
+    })
+    .then(resp => resp)
 });
 
 Cypress.Commands.add('getBySel', (selector, ...args) =>
@@ -197,6 +251,7 @@ Cypress.Commands.add('createSampleDashboards', () => {
           method: 'POST',
           url: `/api/v1/dashboard/`,
           body: dashboards[i],
+          failOnStatusCode: false,
           headers: {
             Cookie: `csrf_access_token=${window.localStorage.getItem(
               'access_token',
@@ -214,8 +269,8 @@ Cypress.Commands.add('createSampleDashboards', () => {
 });
 
 Cypress.Commands.add('createSampleCharts', () => {
-  cy.cleanCharts();
   const requests: any = [];
+  cy.cleanCharts();
   return cy.fixture('charts.json').then(charts => {
     for (let i = 0; i < charts.length; i += 1) {
       requests.push(
@@ -223,6 +278,7 @@ Cypress.Commands.add('createSampleCharts', () => {
           method: 'POST',
           url: `/api/v1/chart/`,
           body: charts[i],
+          failOnStatusCode: false,
           headers: {
             Cookie: `csrf_access_token=${window.localStorage.getItem(
               'access_token',
@@ -251,7 +307,7 @@ Cypress.Commands.add(
   },
 );
 
-Cypress.Commands.add('deleteDashboard', (id: number, failOnStatusCode = true) =>
+Cypress.Commands.add('deleteDashboard', (id: number, failOnStatusCode = false) =>
   cy
     .request({
       failOnStatusCode,
@@ -283,7 +339,7 @@ Cypress.Commands.add('getDashboards', () =>
     .then(resp => resp.body.result),
 );
 
-Cypress.Commands.add('deleteChart', (id: number, failOnStatusCode = true) =>
+Cypress.Commands.add('deleteChart', (id: number, failOnStatusCode = false) =>
   cy
     .request({
       failOnStatusCode,