diff --git a/superset-frontend/cypress-base/cypress/integration/chart_list/card_view.test.ts b/superset-frontend/cypress-base/cypress/integration/chart_list/card_view.test.ts index a294130f0a775fb78e9ca4e2a9d37f2b000ce1be..22da71912af1fa116793692432b2c5f6f9158c1d 100644 --- a/superset-frontend/cypress-base/cypress/integration/chart_list/card_view.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/chart_list/card_view.test.ts @@ -21,7 +21,6 @@ import { CHART_LIST } from './chart_list.helper'; describe('chart card view', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit(CHART_LIST); cy.get('[data-test="card-view"]').click(); }); 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 fd2bcb09d47a8a4ba2c62abfcd8e61ab5b5ababe..dd9b573ebaf94c3d2815f21f818b9e6209248b2a 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 @@ -21,7 +21,6 @@ import { CHART_LIST } from './chart_list.helper'; describe('chart card view filters', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit(CHART_LIST); cy.get('[data-test="card-view"]').click(); }); @@ -89,7 +88,6 @@ describe('chart card view filters', () => { describe('chart list view filters', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit(CHART_LIST); cy.get('[data-test="list-view"]').click(); }); diff --git a/superset-frontend/cypress-base/cypress/integration/chart_list/list_view.test.ts b/superset-frontend/cypress-base/cypress/integration/chart_list/list_view.test.ts index c9b7a5b0a049a57c491b1f01b7374d73cc9cb550..ad95a1089eb8e7861fbd01201a1897e275bab6a9 100644 --- a/superset-frontend/cypress-base/cypress/integration/chart_list/list_view.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/chart_list/list_view.test.ts @@ -21,7 +21,6 @@ import { CHART_LIST } from './chart_list.helper'; describe('chart list view', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit(CHART_LIST); cy.get('[data-test="list-view"]').click(); }); diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/controls.test.js b/superset-frontend/cypress-base/cypress/integration/dashboard/controls.test.ts similarity index 84% rename from superset-frontend/cypress-base/cypress/integration/dashboard/controls.test.js rename to superset-frontend/cypress-base/cypress/integration/dashboard/controls.test.ts index 9b80c4d9dcf82d52d173ab0556f6eeda7cf34834..1be8f518c7e81822443c839fda4a9b2ba097819b 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/controls.test.js +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/controls.test.ts @@ -17,7 +17,6 @@ * under the License. */ import { WORLD_HEALTH_DASHBOARD } from './dashboard.helper'; -import readResponseBlob from '../../utils/readResponseBlob'; import { getChartAliases, isLegacyResponse, @@ -25,19 +24,19 @@ import { } from '../../utils/vizPlugins'; describe('Dashboard top-level controls', () => { - let mapId; - let aliases; + let mapId: string; + let aliases: string[]; beforeEach(() => { - cy.server(); cy.login(); cy.visit(WORLD_HEALTH_DASHBOARD); cy.get('#app').then(data => { - const bootstrapData = JSON.parse(data[0].dataset.bootstrap); + const bootstrapData = JSON.parse(data[0].dataset.bootstrap || ''); const dashboard = bootstrapData.dashboard_data; mapId = dashboard.slices.find( - slice => slice.form_data.viz_type === 'world_map', + (slice: { form_data: { viz_type: string }; slice_id: number }) => + slice.form_data.viz_type === 'world_map', ).slice_id; aliases = getChartAliases(dashboard.slices); }); @@ -50,10 +49,11 @@ describe('Dashboard top-level controls', () => { cy.get(`#slice_${mapId}-controls`).click(); cy.get(`[data-test="slice_${mapId}-menu"]`) .find('[data-test="refresh-chart-menu-item"]') - .click({ force: true }) - .then($el => { - cy.get($el).should('have.class', 'ant-dropdown-menu-item-disabled'); - }); + .click({ force: true }); + cy.get('[data-test="refresh-chart-menu-item"]').should( + 'have.class', + 'ant-dropdown-menu-item-disabled', + ); cy.wait(`@${DASHBOARD_CHART_ALIAS_PREFIX}${mapId}`); cy.get('[data-test="refresh-chart-menu-item"]').should( @@ -63,7 +63,6 @@ describe('Dashboard top-level controls', () => { }); it('should allow dashboard level force refresh', () => { - // wait the all dash finish loading. cy.wait(aliases); // when charts are not start loading, for example, under a secondary tab, // should allow force refresh @@ -80,14 +79,14 @@ describe('Dashboard top-level controls', () => { ); // wait all charts force refreshed. - cy.wait(aliases, { responseTimeout: 15000 }).then(xhrs => { - xhrs.forEach(async xhr => { - const responseBody = await readResponseBlob(xhr.response.body); + cy.wait(aliases).then(xhrs => { + xhrs.forEach(async ({ response, request }) => { + const responseBody = response?.body; const isCached = isLegacyResponse(responseBody) ? responseBody.is_cached : responseBody.result[0].is_cached; // request url should indicate force-refresh operation - expect(xhr.url).to.have.string('force=true'); + expect(request.url).to.have.string('force=true'); // is_cached in response should be false expect(isCached).to.equal(false); }); diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/edit_mode.test.js b/superset-frontend/cypress-base/cypress/integration/dashboard/edit_mode.test.js index 8139e405a48a2271cf85e973f3eecb166bc405f6..62f40c6162f4d9ff60495ecfffc3581d0931572b 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/edit_mode.test.js +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/edit_mode.test.js @@ -20,7 +20,6 @@ import { WORLD_HEALTH_DASHBOARD, drag } from './dashboard.helper'; describe('Dashboard edit mode', () => { beforeEach(() => { - cy.server(); cy.login(); cy.visit(WORLD_HEALTH_DASHBOARD); cy.get('[data-test="dashboard-header"]') @@ -43,7 +42,7 @@ describe('Dashboard edit mode', () => { // box plot should be gone cy.get('[data-test="grid-container"]') .find('.box_plot') - .should('not.be.visible'); + .should('not.exist'); }); cy.get('[data-test="dashboard-builder-component-pane-tabs-navigation"]') @@ -78,7 +77,7 @@ describe('Dashboard edit mode', () => { // Box plot chart should be gone cy.get('[data-test="grid-container"]') .find('.box_plot') - .should('not.be.visible'); + .should('not.exist'); // undo second step and expect initial items count cy.get('[data-test="undo-action"]').click(); diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/edit_properties.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard/edit_properties.test.ts index 0fff9126960e75f0700348e8dc440cd86b20a0e8..42cde01dd5aeed37e9f17233d4f600867c561281 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/edit_properties.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/edit_properties.test.ts @@ -71,10 +71,9 @@ function openDashboardEditProperties() { describe('Dashboard edit action', () => { beforeEach(() => { - cy.server(); cy.login(); cy.visit(WORLD_HEALTH_DASHBOARD); - cy.route(`/api/v1/dashboard/1`).as('dashboardGet'); + cy.intercept(`/api/v1/dashboard/1`).as('dashboardGet'); cy.get('.dashboard-grid', { timeout: 50000 }) .should('be.visible') // wait for 50 secs to load dashboard .then(() => { diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/fav_star.test.js b/superset-frontend/cypress-base/cypress/integration/dashboard/fav_star.test.js index 3a6ffcd332a2898dd1ede5f04134e62cd961b6b6..812a3c9e785188787263b926da434bd330500f58 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/fav_star.test.js +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/fav_star.test.js @@ -25,10 +25,9 @@ describe('Dashboard add to favorite', () => { let isFavoriteDashboard = false; beforeEach(() => { - cy.server(); cy.login(); - cy.route(CHECK_DASHBOARD_FAVORITE_ENDPOINT).as('countFavStar'); + cy.intercept(CHECK_DASHBOARD_FAVORITE_ENDPOINT).as('countFavStar'); cy.visit(WORLD_HEALTH_DASHBOARD); cy.wait('@countFavStar').then(xhr => { diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/filter.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard/filter.test.ts index 709b6af7bb53526994e86b154627cde7a3d6a54c..dd378f1606415b74c98205a6a23259cc8b834385 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/filter.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/filter.test.ts @@ -16,13 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -import { WORLD_HEALTH_DASHBOARD } from './dashboard.helper'; import { getChartAliases, DASHBOARD_CHART_ALIAS_PREFIX, isLegacyResponse, -} from '../../utils/vizPlugins'; -import readResponseBlob from '../../utils/readResponseBlob'; + parsePostForm, +} from 'cypress/utils'; +import { WORLD_HEALTH_DASHBOARD } from './dashboard.helper'; interface Slice { slice_id: number; @@ -43,7 +43,6 @@ describe('Dashboard filter', () => { const getAlias = (id: number) => `@${DASHBOARD_CHART_ALIAS_PREFIX}${id}`; beforeEach(() => { - cy.server(); cy.login(); cy.visit(WORLD_HEALTH_DASHBOARD); @@ -87,18 +86,17 @@ describe('Dashboard filter', () => { cy.get('.filter_box button').click({ force: true }); cy.wait(aliases.filter(x => x !== getAlias(filterId))).then(requests => Promise.all( - requests.map(async xhr => { - expect(xhr.status).to.eq(200); - const responseBody = await readResponseBlob(xhr.response.body); + requests.map(async ({ response, request }) => { + const responseBody = response?.body; let requestFilter; if (isLegacyResponse(responseBody)) { - const requestFormData = xhr.request.body as FormData; + const requestFormData = parsePostForm(request.body); const requestParams = JSON.parse( - requestFormData.get('form_data') as string, + requestFormData.form_data as string, ); requestFilter = requestParams.extra_filters[0]; } else { - requestFilter = xhr.request.body.queries[0].filters[0]; + requestFilter = request.body.queries[0].filters[0]; } expect(requestFilter).deep.eq({ col: 'region', diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/load.test.js b/superset-frontend/cypress-base/cypress/integration/dashboard/load.test.js index 14734334dad00e1c1016990bfd2dda25723df7d6..7e79fa47a58a7f10d040b41018966e21a20b849f 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/load.test.js +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/load.test.js @@ -16,7 +16,6 @@ * specific language governing permissions and limitations * under the License. */ -import readResponseBlob from '../../utils/readResponseBlob'; import { getChartAliases, isLegacyResponse, @@ -28,7 +27,6 @@ describe('Dashboard load', () => { let dashboard; let aliases; beforeEach(() => { - cy.server(); cy.login(); cy.visit(WORLD_HEALTH_DASHBOARD); @@ -46,16 +44,15 @@ describe('Dashboard load', () => { // wait and verify one-by-one cy.wait(aliases).then(requests => Promise.all( - requests.map(async xhr => { - expect(xhr.status).to.eq(200); - const responseBody = await readResponseBlob(xhr.response.body); + 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(xhr.url); + sliceId = getSliceIdFromRequestUrl(request.url); responseBody.result.forEach(element => { expect(element).to.have.property('error', null); expect(element).to.have.property('status', 'success'); diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/markdown.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard/markdown.test.ts index 612e11837a397ea2bcf0d99e8cd0c64ffdf79d57..a13a1c91460aa52dafae49e512d3c3e469f96aca 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/markdown.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/markdown.test.ts @@ -20,7 +20,6 @@ import { TABBED_DASHBOARD, drag, resize } from './dashboard.helper'; describe('Dashboard edit markdown', () => { beforeEach(() => { - cy.server(); cy.login(); cy.visit(TABBED_DASHBOARD); }); @@ -85,6 +84,6 @@ describe('Dashboard edit markdown', () => { cy.get('@component-background-first').click('right'); cy.get('[data-test="dashboard-component-chart-holder"]') .find('.ace_content') - .should('not.be.visible'); + .should('not.exist'); }); }); 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 11c81ac32edc9a036e30b34a13e471b7c4fee344..af70104de17458b737acc4b5f00d4fb5fab99b13 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/nativeFilters.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/nativeFilters.test.ts @@ -21,7 +21,6 @@ import { TABBED_DASHBOARD } from './dashboard.helper'; describe('Nativefilters', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit(TABBED_DASHBOARD); }); it('should show filter bar and allow user to create filters ', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/save.test.js b/superset-frontend/cypress-base/cypress/integration/dashboard/save.test.js index 08220818390e9099e8c89e2ea0c3826c651d2b86..b0909ce1b36230c7395e509001e93b477f10c428 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/save.test.js +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/save.test.js @@ -28,14 +28,15 @@ function openDashboardEditProperties() { describe('Dashboard save action', () => { beforeEach(() => { - cy.server(); cy.login(); cy.visit(WORLD_HEALTH_DASHBOARD); cy.get('#app').then(data => { const bootstrapData = JSON.parse(data[0].dataset.bootstrap); const dashboard = bootstrapData.dashboard_data; const dashboardId = dashboard.id; - cy.route('POST', `/superset/copy_dash/${dashboardId}/`).as('copyRequest'); + cy.intercept('POST', `/superset/copy_dash/${dashboardId}/`).as( + 'copyRequest', + ); cy.get('[data-test="more-horiz"]').trigger('click', { force: true }); cy.get('[data-test="save-as-menu-item"]').trigger('click', { @@ -56,35 +57,37 @@ describe('Dashboard save action', () => { }); it('should save/overwrite dashboard', () => { - cy.get('[data-test="grid-row-background--transparent"]').within(() => { - cy.get('.box_plot', { timeout: 10000 }).should('be.visible'); - }); // should load chart - cy.get('.dashboard-grid', { timeout: 50000 }); // wait for 50 secs + cy.get('.dashboard-grid', { timeout: 30000 }); + cy.get('.box_plot').should('be.visible'); // remove box_plot chart from dashboard cy.get('[data-test="edit-alt"]').click({ timeout: 5000 }); cy.get('[data-test="dashboard-delete-component-button"]') - .should('be.visible', { timeout: 10000 }) .last() - .trigger('click'); + .trigger('moustenter') + .click(); + cy.get('[data-test="grid-container"]') .find('.box_plot') - .should('not.be.visible'); + .should('not.exist'); - cy.route('POST', '/superset/save_dash/**/').as('saveRequest'); + cy.intercept('POST', '/superset/save_dash/**/').as('saveRequest'); cy.get('[data-test="dashboard-header"]') .find('[data-test="header-save-button"]') .contains('Save') - .trigger('click', { force: true }); + .click(); + // go back to view mode cy.wait('@saveRequest'); cy.get('[data-test="dashboard-header"]') .find('[data-test="edit-alt"]') .click(); + + // deleted boxplot should still not exist cy.get('[data-test="grid-container"]') .find('.box_plot', { timeout: 20000 }) - .should('not.be.visible'); + .should('not.exist'); }); // TODO: Fix broken test diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/tabs.test.js b/superset-frontend/cypress-base/cypress/integration/dashboard/tabs.test.js index 2e75d6c723e3f0be96c5bc184d0a947ebf674e25..fbe3499d00d519f866db3ad5ddc7f4395e929b27 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/tabs.test.js +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/tabs.test.js @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ +import { interceptChart, parsePostForm } from 'cypress/utils'; import { TABBED_DASHBOARD } from './dashboard.helper'; describe('Dashboard tabs', () => { @@ -23,7 +24,6 @@ describe('Dashboard tabs', () => { let treemapId; let linechartId; let boxplotId; - let dashboardId; // cypress can not handle window.scrollTo // https://github.com/cypress-io/cypress/issues/2761 @@ -35,7 +35,6 @@ describe('Dashboard tabs', () => { }; beforeEach(() => { - cy.server(); cy.login(); cy.visit(TABBED_DASHBOARD); @@ -43,7 +42,6 @@ describe('Dashboard tabs', () => { cy.get('#app').then(data => { const bootstrapData = JSON.parse(data[0].dataset.bootstrap); const dashboard = bootstrapData.dashboard_data; - dashboardId = dashboard.id; filterId = dashboard.slices.find( slice => slice.form_data.viz_type === 'filter_box', ).slice_id; @@ -56,38 +54,10 @@ describe('Dashboard tabs', () => { linechartId = dashboard.slices.find( slice => slice.form_data.viz_type === 'line', ).slice_id; - - const filterFormdata = { - slice_id: filterId, - }; - const filterRequest = `/superset/explore_json/?form_data=${JSON.stringify( - filterFormdata, - )}&dashboard_id=${dashboardId}`; - cy.route('POST', filterRequest).as('filterRequest'); - - const treemapFormdata = { - slice_id: treemapId, - }; - const treemapRequest = `/superset/explore_json/?form_data=${JSON.stringify( - treemapFormdata, - )}&dashboard_id=${dashboardId}`; - cy.route('POST', treemapRequest).as('treemapRequest'); - - const linechartFormdata = { - slice_id: linechartId, - }; - const linechartRequest = `/superset/explore_json/?form_data=${JSON.stringify( - linechartFormdata, - )}&dashboard_id=${dashboardId}`; - cy.route('POST', linechartRequest).as('linechartRequest'); - - const boxplotFormdata = { - slice_id: boxplotId, - }; - const boxplotRequest = `/superset/explore_json/?form_data=${JSON.stringify( - boxplotFormdata, - )}&dashboard_id=${dashboardId}`; - cy.route('POST', boxplotRequest).as('boxplotRequest'); + interceptChart(filterId).as('filterRequest'); + interceptChart(treemapId).as('treemapRequest'); + interceptChart(linechartId).as('linechartRequest'); + interceptChart(boxplotId, false).as('boxplotRequest'); }); }); @@ -129,10 +99,8 @@ describe('Dashboard tabs', () => { .should('be.visible'); cy.get('[data-test="grid-container"]') .find('.box_plot') - .should('not.be.visible'); - cy.get('[data-test="grid-container"]') - .find('.line') - .should('not.be.visible'); + .should('not.exist'); + cy.get('[data-test="grid-container"]').find('.line').should('not.exist'); // click row level tab, see 1 more chart cy.get('[data-test="dashboard-component-tabs"]') @@ -164,67 +132,54 @@ describe('Dashboard tabs', () => { cy.wait('@treemapRequest'); // apply filter - cy.get('.Select__control').first().should('be.visible'); - cy.get('.Select__control').first().click({ force: true }); - cy.get('.Select__control input[type=text]') - .first() - .should('be.visible') - .type('South Asia{enter}', { force: true }); + cy.get('.Select__control').first().should('be.visible').click(); + cy.get('.Select__control input[type=text]').first().focus().type('South'); + cy.get('.Select__option').contains('South Asia').click(); + cy.get('.filter_box button:not(:disabled)').contains('Apply').click(); // send new query from same tab - cy.wait('@treemapRequest').then(xhr => { - const requestFormData = xhr.request.body; - const requestParams = JSON.parse(requestFormData.get('form_data')); + cy.wait('@treemapRequest').then(({ request }) => { + const requestBody = parsePostForm(request.body); + const requestParams = JSON.parse(requestBody.form_data); expect(requestParams.extra_filters[0]).deep.eq({ col: 'region', - op: 'IN', - val: ['South Asia'], + op: '==', + val: 'South Asia', }); }); // click row level tab, send 1 more query - cy.get('[data-test="dashboard-component-tabs"]') - .last() - .find('[data-test="nav-list"]') - .children() - .as('row-level-tabs'); - cy.get('@row-level-tabs').last().click(); + cy.get('.ant-tabs-tab').contains('row tab 2').click(); - cy.wait('@linechartRequest').then(xhr => { - const requestFormData = xhr.request.body; - const requestParams = JSON.parse(requestFormData.get('form_data')); + cy.wait('@linechartRequest').then(({ request }) => { + const requestBody = parsePostForm(request.body); + const requestParams = JSON.parse(requestBody.form_data); expect(requestParams.extra_filters[0]).deep.eq({ col: 'region', - op: 'IN', - val: ['South Asia'], + op: '==', + val: 'South Asia', }); }); // click top level tab, send 1 more query - cy.get('[data-test="dashboard-component-tabs"]') - .first() - .find('[data-test="nav-list"]') - .children() - .as('top-level-tabs'); + cy.get('.ant-tabs-tab').contains('Tab B').click(); - cy.get('@top-level-tabs').last().click(); - - cy.wait('@boxplotRequest').then(xhr => { - const requestFormData = xhr.request.body; - const requestParams = JSON.parse(requestFormData.get('form_data')); - expect(requestParams.extra_filters[0]).deep.eq({ + cy.wait('@boxplotRequest').then(({ request }) => { + const requestBody = request.body; + const requestParams = requestBody.queries[0]; + expect(requestParams.filters[0]).deep.eq({ col: 'region', - op: 'IN', - val: ['South Asia'], + op: '==', + val: 'South Asia', }); }); // navigate to filter and clear filter - cy.get('@top-level-tabs').first().click(); - - cy.get('@top-level-tabs').first().click(); + cy.get('.ant-tabs-tab').contains('Tab A').click(); + cy.get('.ant-tabs-tab').contains('row tab 1').click(); cy.get('.Select__clear-indicator').click(); + cy.get('.filter_box button:not(:disabled)').contains('Apply').click(); // trigger 1 new query cy.wait('@treemapRequest'); diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/url_params.test.js b/superset-frontend/cypress-base/cypress/integration/dashboard/url_params.test.js index 43eb02226f07b090b13020635de0a62c586935d2..0ff138755d59dad4e068b4530c8cf186f716f9dc 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/url_params.test.js +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/url_params.test.js @@ -16,16 +16,18 @@ * specific language governing permissions and limitations * under the License. */ +import { + isLegacyResponse, + getChartAliases, + parsePostForm, +} from 'cypress/utils'; import { WORLD_HEALTH_DASHBOARD } from './dashboard.helper'; -import { isLegacyResponse, getChartAliases } from '../../utils/vizPlugins'; -import readResponseBlob from '../../utils/readResponseBlob'; describe('Dashboard form data', () => { const urlParams = { param1: '123', param2: 'abc' }; let dashboard; beforeEach(() => { - cy.server(); cy.login(); cy.visit(WORLD_HEALTH_DASHBOARD, { qs: urlParams }); @@ -41,16 +43,15 @@ describe('Dashboard form data', () => { // wait and verify one-by-one cy.wait(aliases, { timeout: 18000 }).then(requests => Promise.all( - requests.map(async xhr => { - expect(xhr.status).to.eq(200); - const responseBody = await readResponseBlob(xhr.response.body); - + requests.map(async ({ response, request }) => { + const responseBody = response?.body; if (isLegacyResponse(responseBody)) { - const requestFormData = xhr.request.body; - const requestParams = JSON.parse(requestFormData.get('form_data')); + const requestParams = JSON.parse( + parsePostForm(request.body).form_data, + ); expect(requestParams.url_params).deep.eq(urlParams); } else { - xhr.request.body.queries.forEach(query => { + request.body.queries.forEach(query => { expect(query.url_params).deep.eq(urlParams); }); } diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard_list/card_view.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard_list/card_view.test.ts index baa15604adcff2ee56c57a7bf804f137d67bf882..841fb560b127e7b39bbf0760c372527959484424 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard_list/card_view.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/dashboard_list/card_view.test.ts @@ -21,7 +21,6 @@ import { DASHBOARD_LIST } from './dashboard_list.helper'; describe('Dashboard card view', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit(DASHBOARD_LIST); cy.get('[data-test="card-view"]').click(); }); 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 2306de56f4e904255adba8fee9a7084d31ea9b07..61bdd7c6d9260097de4e833686fc43e7c58e33f7 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 @@ -21,7 +21,6 @@ import { DASHBOARD_LIST } from './dashboard_list.helper'; describe('dashboard filters card view', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit(DASHBOARD_LIST); cy.get('[data-test="card-view"]').click(); }); @@ -74,7 +73,6 @@ describe('dashboard filters card view', () => { describe('dashboard filters list view', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit(DASHBOARD_LIST); cy.get('[data-test="list-view"]').click(); }); diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard_list/list_view.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard_list/list_view.test.ts index 9cc15c74d3c9592053dbb68349c3e8549cb0441b..54475eb359f77125c1a10a99e23396c4f516908b 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard_list/list_view.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/dashboard_list/list_view.test.ts @@ -21,7 +21,6 @@ import { DASHBOARD_LIST } from './dashboard_list.helper'; describe('dashboard list view', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit(DASHBOARD_LIST); cy.get('[data-test="list-view"]').click(); }); diff --git a/superset-frontend/cypress-base/cypress/integration/database/modal.test.ts b/superset-frontend/cypress-base/cypress/integration/database/modal.test.ts index 0e999793bcaae5458f7ee1c861d7bdff72617cba..8157dba2ad5e337e06fa09871125e9403a8cf9e5 100644 --- a/superset-frontend/cypress-base/cypress/integration/database/modal.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/database/modal.test.ts @@ -20,7 +20,6 @@ import { DATABASE_LIST } from './helper'; describe('Add database', () => { beforeEach(() => { - cy.server(); cy.login(); }); diff --git a/superset-frontend/cypress-base/cypress/integration/explore/AdhocFilters.test.ts b/superset-frontend/cypress-base/cypress/integration/explore/AdhocFilters.test.ts index a2976d601fe4154231e945985a826467f4159e3a..b3b2883aa420a564235f6162cf6ae4fd1612277a 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/AdhocFilters.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/explore/AdhocFilters.test.ts @@ -19,10 +19,9 @@ describe('AdhocFilters', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('GET', '/superset/explore_json/**').as('getJson'); - cy.route('POST', '/superset/explore_json/**').as('postJson'); - cy.route('GET', '/superset/filter/table/*/name').as('filterValues'); + cy.intercept('GET', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('postJson'); + cy.intercept('GET', '/superset/filter/table/*/name').as('filterValues'); cy.visitChartByName('Boys'); // a table chart cy.verifySliceSuccess({ waitAlias: '@postJson' }); }); diff --git a/superset-frontend/cypress-base/cypress/integration/explore/AdhocMetrics.test.ts b/superset-frontend/cypress-base/cypress/integration/explore/AdhocMetrics.test.ts index 2f145de2b07716b9605b62177482ec1059cdadc6..d8d06862e45c86ff7319d46179028cb55e054ad4 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/AdhocMetrics.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/explore/AdhocMetrics.test.ts @@ -19,9 +19,8 @@ describe('AdhocMetrics', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('GET', '/superset/explore_json/**').as('getJson'); - cy.route('POST', '/superset/explore_json/**').as('postJson'); + cy.intercept('GET', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('postJson'); cy.visitChartByName('Num Births Trend'); cy.verifySliceSuccess({ waitAlias: '@postJson' }); }); diff --git a/superset-frontend/cypress-base/cypress/integration/explore/advanced.test.ts b/superset-frontend/cypress-base/cypress/integration/explore/advanced.test.ts index 7a50b6e934a6ee999f9f1aabadb86dc39fa94faa..066ae868a1954e2098272d504b6820198292f9b3 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/advanced.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/explore/advanced.test.ts @@ -19,9 +19,8 @@ describe('Advanced analytics', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('GET', '/superset/explore_json/**').as('getJson'); - cy.route('POST', '/superset/explore_json/**').as('postJson'); + cy.intercept('GET', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('postJson'); }); it('Create custom time compare', () => { @@ -60,9 +59,8 @@ describe('Advanced analytics', () => { describe('Annotations', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('GET', '/superset/explore_json/**').as('getJson'); - cy.route('POST', '/superset/explore_json/**').as('postJson'); + cy.intercept('GET', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('postJson'); }); it('Create formula annotation y-axis goal line', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/chart.test.js b/superset-frontend/cypress-base/cypress/integration/explore/chart.test.js index 593a08daff1f2c15f0bbd2df74e124a433761d84..acb83264f7a81c1713669ef08ee227718bc0cdfa 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/chart.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/chart.test.js @@ -21,8 +21,7 @@ import { FORM_DATA_DEFAULTS, NUM_METRIC } from './visualizations/shared.helper'; describe('No Results', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('No results message shows up', () => { @@ -43,9 +42,7 @@ describe('No Results', () => { }; cy.visitChartByParams(JSON.stringify(formData)); - cy.wait('@getJson').then(async xhr => { - expect(xhr.status).to.eq(200); - }); + cy.wait('@getJson').its('response.statusCode').should('eq', 200); cy.get('div.chart-container').contains('No Results'); }); }); 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 6ab462f32b63cf894f71880e58ed57ffdabc4c16..b99cd7b7c4bf5bf03c990cd8ac1e4b21655974a6 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/control.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/explore/control.test.ts @@ -29,9 +29,8 @@ describe('Datasource control', () => { let numScripts = 0; cy.login(); - cy.server(); - cy.route('GET', '/superset/explore_json/**').as('getJson'); - cy.route('POST', '/superset/explore_json/**').as('postJson'); + cy.intercept('GET', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('postJson'); cy.visitChartByName('Num Births Trend'); cy.verifySliceSuccess({ waitAlias: '@postJson' }); @@ -91,9 +90,8 @@ describe('Datasource control', () => { describe('VizType control', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('GET', '/superset/explore_json/**').as('getJson'); - cy.route('POST', '/superset/explore_json/**').as('postJson'); + cy.intercept('GET', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('postJson'); }); it('Can change vizType', () => { @@ -123,9 +121,8 @@ describe('VizType control', () => { describe('Time range filter', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('GET', '/superset/explore_json/**').as('getJson'); - cy.route('POST', '/superset/explore_json/**').as('postJson'); + cy.intercept('GET', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('postJson'); }); it('Advanced time_range params', () => { @@ -237,10 +234,9 @@ describe('Time range filter', () => { describe('Groupby control', () => { it('Set groupby', () => { - cy.server(); cy.login(); - cy.route('GET', '/superset/explore_json/**').as('getJson'); - cy.route('POST', '/superset/explore_json/**').as('postJson'); + cy.intercept('GET', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('postJson'); cy.visitChartByName('Num Births Trend'); cy.verifySliceSuccess({ waitAlias: '@postJson' }); diff --git a/superset-frontend/cypress-base/cypress/integration/explore/filter_box.test.js b/superset-frontend/cypress-base/cypress/integration/explore/filter_box.test.js index 4be0a45347f851c0802f4f52f58408bbfd43de71..921377c45fa4b55d490ccf98229fda4166b05437 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/filter_box.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/filter_box.test.js @@ -27,9 +27,8 @@ describe('Edit FilterBox Chart', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work with default date filter', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/link.test.js b/superset-frontend/cypress-base/cypress/integration/explore/link.test.js index 28c804d2a80d0bd53f5b8e0a7fd57d352b8a1e95..90628441a5797b6733566791eaa4a0416f5d6c5d 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/link.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/link.test.js @@ -30,9 +30,8 @@ const apiURL = (endpoint, queryObject) => describe('Test explore links', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('GET', '/superset/explore_json/**').as('getJson'); - cy.route('POST', '/superset/explore_json/**').as('postJson'); + cy.intercept('GET', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('postJson'); }); it('Open and close view query modal', () => { @@ -50,7 +49,7 @@ describe('Test explore links', () => { }); it('Visit short link', () => { - cy.route('POST', 'r/shortner/').as('getShortUrl'); + cy.intercept('POST', 'r/shortner/').as('getShortUrl'); cy.visitChartByName('Growth Rate'); cy.verifySliceSuccess({ waitAlias: '@postJson' }); diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/area.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/area.test.js index a88ae23a023d0a9ca2ce385c7ec8c39b54419489..86b5a789c2474a34262460a8cab12789f72e513b 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/area.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/area.test.js @@ -16,8 +16,6 @@ * specific language governing permissions and limitations * under the License. */ -import readResponseBlob from '../../../utils/readResponseBlob'; - describe('Visualization > Area', () => { const AREA_FORM_DATA = { datasource: '2__table', @@ -58,9 +56,8 @@ describe('Visualization > Area', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work without groupby', () => { @@ -96,11 +93,8 @@ describe('Visualization > Area', () => { }), ); - cy.wait('@getJson').then(async xhr => { - cy.verifyResponseCodes(xhr); - - const responseBody = await readResponseBlob(xhr.response.body); - + cy.wait('@getJson').then(async ({ response }) => { + const responseBody = response?.body; // Make sure data is sorted correctly const firstRow = responseBody.data[0].values; const secondRow = responseBody.data[1].values; diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/big_number.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/big_number.test.js index fb7f15cd6d41126dc8dbd16f7030e3dc8eeb7f0e..9e8ca246258f4d2b7c98bb75a83151b7e0c46376 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/big_number.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/big_number.test.js @@ -49,8 +49,7 @@ describe('Visualization > Big Number with Trendline', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/big_number_total.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/big_number_total.test.js index 30845eaa62419c80f8f3d3d232cd784cb3a7f82d..b6794c42b741bd389c1cbd603cf74ef29c3e60f9 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/big_number_total.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/big_number_total.test.js @@ -17,9 +17,6 @@ * under the License. */ import { FORM_DATA_DEFAULTS, NUM_METRIC } from './shared.helper'; -import readResponseBlob from '../../../utils/readResponseBlob'; - -// Big Number Total describe('Visualization > Big Number Total', () => { const BIG_NUMBER_DEFAULTS = { @@ -29,8 +26,7 @@ describe('Visualization > Big Number Total', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('Test big number chart with adhoc metric', () => { @@ -74,11 +70,9 @@ describe('Visualization > Big Number Total', () => { }; cy.visitChartByParams(JSON.stringify(formData)); - cy.wait(['@getJson']).then(async xhr => { - cy.verifyResponseCodes(xhr); + cy.wait(['@getJson']).then(async ({ response }) => { cy.verifySliceContainer(); - - const responseBody = await readResponseBlob(xhr.response.body); + const responseBody = response?.body; expect(responseBody.query).not.contains(formData.groupby[0]); }); }); diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/box_plot.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/box_plot.test.js index d7023c54d31605c7c5ee702c630819045f4cfcf1..432815b8692c1adbdc0de5507c5c0b8a0eaee814 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/box_plot.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/box_plot.test.js @@ -38,9 +38,8 @@ describe('Visualization > Box Plot', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/api/v1/chart/data*').as('getJson'); + cy.intercept('POST', '/api/v1/chart/data*').as('getJson'); }); it('should work', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/bubble.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/bubble.test.js index 7b6466b9784053a3cec472fc4f0ce5c97250e1cf..7ed17b1a4d8e704de61d2a979036af6303df71ca 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/bubble.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/bubble.test.js @@ -52,9 +52,8 @@ describe('Visualization > Bubble', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); // Number of circles are pretty unstable when there are a lot of circles diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/compare.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/compare.test.js index 6b538f65a18e45b6ec039b13fc997371b4240225..83b37f889f77c50939c6db4ca0c137e1e76c1a7a 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/compare.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/compare.test.js @@ -52,9 +52,8 @@ describe('Visualization > Compare', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work without groupby', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/dist_bar.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/dist_bar.test.js index b2a711445131dd096acbb8980ea2ec9e9ba6fa1c..bec718367ef927974b01871416644e30a84e3d19 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/dist_bar.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/dist_bar.test.js @@ -23,8 +23,7 @@ describe('Visualization > Distribution bar chart', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work with adhoc metric', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/dual_line.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/dual_line.test.js index bfe8660440fe7e9fa4b62dc28d75616d615ab7f9..641b2925d77ec252b9439b5bdafd69566e33d6a7 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/dual_line.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/dual_line.test.js @@ -40,9 +40,8 @@ describe('Visualization > Dual Line', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/histogram.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/histogram.test.js index 78ec06e7c50c540d0c85829c69cdbd341635f9ff..3246ca309cec82ec7403598501186bf4be2e2a32 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/histogram.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/histogram.test.js @@ -42,9 +42,8 @@ describe('Visualization > Histogram', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work without groupby', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/line.test.ts b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/line.test.ts index dd92585e9b91c3823afe8ea8b60272cd3acec82e..64bb8fdb62a68c184f1a8d047ecbf992dfad12e9 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/line.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/line.test.ts @@ -23,8 +23,7 @@ describe('Visualization > Line', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should show validator error when no metric', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/pie.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/pie.test.js index 11bff2b9c837663bb350311d789d657b95ddfedc..fb083de615e9a4da218f95d815a41d79e3bae299 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/pie.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/pie.test.js @@ -42,9 +42,8 @@ describe('Visualization > Pie', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/api/v1/chart/data*').as('getJson'); + cy.intercept('POST', '/api/v1/chart/data*').as('getJson'); }); it('should work with ad-hoc metric', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/pivot_table.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/pivot_table.test.js index a67cabd6643552c65c084d931a8143810beb0a96..1346b89bebef2b61b6492a0217c4c41771dce03e 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/pivot_table.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/pivot_table.test.js @@ -59,9 +59,8 @@ describe('Visualization > Pivot Table', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work with single groupby', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/sankey.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/sankey.test.js index dc113df2e5b9ad0aa27c503aec4003e46cd6064e..257ec00c1f05d09f4d8172f435317b368821984c 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/sankey.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/sankey.test.js @@ -38,9 +38,8 @@ describe('Visualization > Sankey', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/sunburst.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/sunburst.test.js index 5c205eb70946c5f203c77a46471a893d6242b113..99cbb1e407e4cf5b803fc0a87ff2993bedde9eca 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/sunburst.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/sunburst.test.js @@ -37,9 +37,8 @@ describe('Visualization > Sunburst', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work without secondary metric', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/table.test.ts b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/table.test.ts index 178c953a9cf0c5637e21f263805178b61c4b894c..91a0367e580476f9ff027dc67853e41f793fdef4 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/table.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/table.test.ts @@ -23,11 +23,14 @@ import { MAX_STATE, SIMPLE_FILTER, } from './shared.helper'; -import readResponseBlob from '../../../utils/readResponseBlob'; // Table describe('Visualization > Table', () => { - const VIZ_DEFAULTS = { ...FORM_DATA_DEFAULTS, viz_type: 'table' }; + const VIZ_DEFAULTS = { + ...FORM_DATA_DEFAULTS, + viz_type: 'table', + row_limit: 1000, + }; const PERCENT_METRIC = { expressionType: 'SQL', @@ -41,8 +44,7 @@ describe('Visualization > Table', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('Use default time column', () => { @@ -98,7 +100,7 @@ describe('Visualization > Table', () => { }); cy.verifySliceSuccess({ waitAlias: '@getJson', - querySubstring: /groupby.*name/, + querySubstring: /group by.*name/i, chartSelector: 'table', }); }); @@ -114,37 +116,34 @@ describe('Visualization > Table', () => { }); cy.verifySliceSuccess({ waitAlias: '@getJson', - querySubstring: /groupby.*name/, + querySubstring: /group by.*name/i, chartSelector: 'table', }); - }); - it('Handle sorting correctly', () => { + // should handle sorting correctly cy.get('.chart-container th').contains('name').click(); - cy.get('.chart-container td:nth-child(2):eq(0)').contains('Aaron'); + cy.get('.chart-container td:nth-child(2):eq(0)').contains('Abigail'); cy.get('.chart-container th').contains('Time').click().click(); cy.get('.chart-container td:nth-child(1):eq(0)').contains('2008'); }); it('Test table with percent metrics and groupby', () => { - const formData = { + cy.visitChartByParams({ ...VIZ_DEFAULTS, percent_metrics: PERCENT_METRIC, metrics: [], groupby: ['name'], - }; - cy.visitChartByParams(JSON.stringify(formData)); + }); cy.verifySliceSuccess({ waitAlias: '@getJson', chartSelector: 'table' }); }); it('Test table with groupby order desc', () => { - const formData = { + cy.visitChartByParams({ ...VIZ_DEFAULTS, metrics: NUM_METRIC, groupby: ['name'], order_desc: true, - }; - cy.visitChartByParams(JSON.stringify(formData)); + }); cy.verifySliceSuccess({ waitAlias: '@getJson', chartSelector: 'table' }); }); @@ -157,37 +156,34 @@ describe('Visualization > Table', () => { row_limit: limit, }; cy.visitChartByParams(JSON.stringify(formData)); - cy.wait('@getJson').then(async xhr => { - cy.verifyResponseCodes(xhr); + cy.wait('@getJson').then(({ response }) => { cy.verifySliceContainer('table'); - const responseBody = await readResponseBlob(xhr.response.body); - expect(responseBody.data.records.length).to.eq(limit); + expect(response?.body.data.records.length).to.eq(limit); }); cy.get('span.label-danger').contains('10 rows'); }); it('Test table with columns and row limit', () => { - const formData = { + cy.visitChartByParams({ ...VIZ_DEFAULTS, // should still work when query_mode is not-set/invalid query_mode: undefined, all_columns: ['name'], metrics: [], row_limit: 10, - }; - cy.visitChartByParams(JSON.stringify(formData)); + }); // should display in raw records mode cy.get('div[data-test="query_mode"] .btn.active').contains('Raw Records'); cy.get('div[data-test="all_columns"]').should('be.visible'); - cy.get('div[data-test="groupby"]').should('not.be.visible'); + cy.get('div[data-test="groupby"]').should('not.exist'); cy.verifySliceSuccess({ waitAlias: '@getJson', chartSelector: 'table' }); // should allow switch to aggregate mode cy.get('div[data-test="query_mode"] .btn').contains('Aggregate').click(); cy.get('div[data-test="query_mode"] .btn.active').contains('Aggregate'); - cy.get('div[data-test="all_columns"]').should('not.be.visible'); + cy.get('div[data-test="all_columns"]').should('not.exist'); cy.get('div[data-test="groupby"]').should('be.visible'); }); @@ -204,10 +200,9 @@ describe('Visualization > Table', () => { }; cy.visitChartByParams(JSON.stringify(formData)); - cy.wait('@getJson').then(async xhr => { - cy.verifyResponseCodes(xhr); + cy.wait('@getJson').then(({ response }) => { cy.verifySliceContainer('table'); - const responseBody = await readResponseBlob(xhr.response.body); + const responseBody = response?.body; const { records } = responseBody.data; expect(records[0].num).greaterThan(records[records.length - 1].num); }); @@ -233,7 +228,7 @@ describe('Visualization > Table', () => { cy.visitChartByParams(JSON.stringify(formData)); cy.verifySliceSuccess({ waitAlias: '@getJson', - querySubstring: formData.groupby[0], + querySubstring: /group by.*state/i, chartSelector: 'table', }); cy.get('td').contains(/\d*%/); diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/time_table.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/time_table.js index 1ccbc1bcec8bf7928b85567b646d376214f680bb..ea1353bec8dbab832589a052dc48206cc0ec18a4 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/time_table.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/time_table.js @@ -23,8 +23,7 @@ describe('Visualization > Time TableViz', () => { beforeEach(() => { cy.login(); - cy.server(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('Test time series table multiple metrics last year total', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/treemap.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/treemap.test.js index 654c7c7e851fe2b64862526d9c0ef5e8e8be600b..6ebe06274fbd5f24504742a976dd88bf6cdb4d1a 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/treemap.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/treemap.test.js @@ -43,9 +43,8 @@ describe('Visualization > Treemap', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/world_map.test.js b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/world_map.test.js index 2b44c2e8902a3ad57b7c9713f0f6e80215a4b56f..ed9d3e421498789f2de416ad3f040485d8cdde01 100644 --- a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/world_map.test.js +++ b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/world_map.test.js @@ -40,9 +40,8 @@ describe('Visualization > World Map', () => { } beforeEach(() => { - cy.server(); cy.login(); - cy.route('POST', '/superset/explore_json/**').as('getJson'); + cy.intercept('POST', '/superset/explore_json/**').as('getJson'); }); it('should work with ad-hoc metric', () => { diff --git a/superset-frontend/cypress-base/cypress/integration/sqllab/query.test.ts b/superset-frontend/cypress-base/cypress/integration/sqllab/query.test.ts index c642401253a3068bbea1d60ad7a01852651c46ad..df05a530cb354f61fdf243331c9c91f802ebd180 100644 --- a/superset-frontend/cypress-base/cypress/integration/sqllab/query.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/sqllab/query.test.ts @@ -26,7 +26,6 @@ function parseClockStr(node: JQuery) { describe('SqlLab query panel', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit('/superset/sqllab'); }); @@ -43,7 +42,7 @@ describe('SqlLab query panel', () => { expanded_columns: [], }; - cy.route({ + cy.intercept({ method: 'POST', url: '/superset/sql_json/', delay: 1000, @@ -93,8 +92,8 @@ describe('SqlLab query panel', () => { }); it.skip('successfully saves a query', () => { - cy.route('savedqueryviewapi/**').as('getSavedQuery'); - cy.route('superset/tables/**').as('getTables'); + cy.intercept('savedqueryviewapi/**').as('getSavedQuery'); + cy.intercept('superset/tables/**').as('getTables'); const query = 'SELECT ds, gender, name, num FROM main.birth_names ORDER BY name LIMIT 3'; diff --git a/superset-frontend/cypress-base/cypress/integration/sqllab/sourcePanel.index.test.js b/superset-frontend/cypress-base/cypress/integration/sqllab/sourcePanel.index.test.js index ac0f5da5cd6836bb1603b27bd799d77073191aed..ec0db332afd94941d924802497562b7c54a02304 100644 --- a/superset-frontend/cypress-base/cypress/integration/sqllab/sourcePanel.index.test.js +++ b/superset-frontend/cypress-base/cypress/integration/sqllab/sourcePanel.index.test.js @@ -21,14 +21,13 @@ import { selectResultsTab } from './sqllab.helper'; describe('SqlLab datasource panel', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit('/superset/sqllab'); }); // TODO the test bellow is flaky, and has been disabled for the time being // (notice the `it.skip`) it.skip('creates a table preview when a database, schema, and table are selected', () => { - cy.route('/superset/table/**').as('tableMetadata'); + cy.intercept('/superset/table/**').as('tableMetadata'); // it should have dropdowns to select database, schema, and table cy.get('.sql-toolbar .Select').should('have.length', 3); diff --git a/superset-frontend/cypress-base/cypress/integration/sqllab/tabs.test.js b/superset-frontend/cypress-base/cypress/integration/sqllab/tabs.test.js index 9a0e8f4df6a46dd3a083f11b0f053e5682e27a84..b7544ed8bf52f22ca1f96008f0ed16435f583719 100644 --- a/superset-frontend/cypress-base/cypress/integration/sqllab/tabs.test.js +++ b/superset-frontend/cypress-base/cypress/integration/sqllab/tabs.test.js @@ -19,7 +19,6 @@ describe('SqlLab query tabs', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit('/superset/sqllab'); }); diff --git a/superset-frontend/cypress-base/cypress/support/index.d.ts b/superset-frontend/cypress-base/cypress/support/index.d.ts index 7efca600f0a54df69c4213ca74cce5ed3959f147..fdacf3232ba153cfdd788935665600c5bb0691f7 100644 --- a/superset-frontend/cypress-base/cypress/support/index.d.ts +++ b/superset-frontend/cypress-base/cypress/support/index.d.ts @@ -34,14 +34,6 @@ declare namespace Cypress { visitChartByName(name: string): cy; visitChartById(id: number): cy; - /** - * Verify a waitXHR response and parse response JSON. - */ - verifyResponseCodes( - xhr: WaitXHR, - callback?: (result: JSONValue) => void, - ): cy; - /** * Verify slice container renders. */ diff --git a/superset-frontend/cypress-base/cypress/support/index.ts b/superset-frontend/cypress-base/cypress/support/index.ts index 4ab77d998005b373b13f90a55af7961f54094009..e2c80b873b7df0eca57d245f7689e640c7299c71 100644 --- a/superset-frontend/cypress-base/cypress/support/index.ts +++ b/superset-frontend/cypress-base/cypress/support/index.ts @@ -17,7 +17,6 @@ * under the License. */ import '@cypress/code-coverage/support'; -import readResponseBlob from '../utils/readResponseBlob'; const BASE_EXPLORE_URL = '/superset/explore/?form_data='; @@ -55,19 +54,8 @@ Cypress.Commands.add('visitChartById', chartId => Cypress.Commands.add('visitChartByParams', params => { const queryString = typeof params === 'string' ? params : JSON.stringify(params); - return cy.visit(`${BASE_EXPLORE_URL}${queryString}`); -}); - -Cypress.Commands.add('verifyResponseCodes', (xhr: XMLHttpRequest, callback) => { - // After a wait response check for valid response - expect(xhr.status).to.eq(200); - readResponseBlob(xhr.response.body).then(res => { - expect(res).to.not.be.instanceOf(Error); - if (callback) { - callback(res); - } - }); - return cy; + const url = `${BASE_EXPLORE_URL}${queryString}`; + return cy.visit(url); }); Cypress.Commands.add('verifySliceContainer', chartSelector => { @@ -98,20 +86,19 @@ Cypress.Commands.add( chartSelector: JQuery.Selector; querySubstring?: string | RegExp; }) => { - cy.wait(waitAlias).then(xhr => { + cy.wait(waitAlias).then(({ response }) => { cy.verifySliceContainer(chartSelector); - cy.verifyResponseCodes(xhr, responseBody => { - if (querySubstring) { - const query = responseBody - ? (responseBody as { query: string }).query - : ''; - if (querySubstring instanceof RegExp) { - expect(query).to.match(querySubstring); - } else { - expect(query).to.contain(querySubstring); - } + const responseBody = response?.body; + if (querySubstring) { + const query = responseBody + ? (responseBody as { query: string }).query + : ''; + if (querySubstring instanceof RegExp) { + expect(query).to.match(querySubstring); + } else { + expect(query).to.contain(querySubstring); } - }); + } }); return cy; }, diff --git a/superset-frontend/cypress-base/cypress/utils/readResponseBlob.ts b/superset-frontend/cypress-base/cypress/utils/index.ts similarity index 66% rename from superset-frontend/cypress-base/cypress/utils/readResponseBlob.ts rename to superset-frontend/cypress-base/cypress/utils/index.ts index 560a5c55d54b6f425cb12dadb68ddf8fe9f49b71..ea0bbdcf437b3d36f2365464a2d77ef8674332e3 100644 --- a/superset-frontend/cypress-base/cypress/utils/readResponseBlob.ts +++ b/superset-frontend/cypress-base/cypress/utils/index.ts @@ -16,17 +16,5 @@ * specific language governing permissions and limitations * under the License. */ -/** - * Read XHR response and parse it as JSON. - */ -export default function readResponseBlob(blob: Blob | JSONValue) { - return new Promise>(resolve => { - if (blob instanceof Blob) { - const reader = new FileReader(); - reader.onload = () => resolve(JSON.parse(String(reader.result || ''))); - reader.readAsText(blob); - } else { - resolve(blob); - } - }); -} +export * from './vizPlugins'; +export { default as parsePostForm } from './parsePostForm'; diff --git a/superset-frontend/cypress-base/cypress/utils/parsePostForm.ts b/superset-frontend/cypress-base/cypress/utils/parsePostForm.ts new file mode 100644 index 0000000000000000000000000000000000000000..7bd0c018ceda444da844b1f79998a8967a45ce43 --- /dev/null +++ b/superset-frontend/cypress-base/cypress/utils/parsePostForm.ts @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +/** + * Parse multipart form data sent via POST requests. + */ +export default function parsePostForm(requestBody: ArrayBuffer) { + type ParsedFields = Record; + if (requestBody.constructor.name !== 'ArrayBuffer') { + return (requestBody as unknown) as ParsedFields; + } + const lines = new TextDecoder('utf-8').decode(requestBody).split('\n'); + const fields: ParsedFields = {}; + let key = ''; + let value: string[] = []; + + function addField(key: string, value: string) { + if (key in fields) { + if (Array.isArray(fields[key])) { + (fields[key] as string[]).push(value); + } else { + fields[key] = [fields[key] as string, value]; + } + } else { + fields[key] = value; + } + } + + lines.forEach(line => { + const nameMatch = line.match(/Content-Disposition: form-data; name="(.*)"/); + if (nameMatch) { + if (key) { + addField(key, value.join('\n')); + } + key = nameMatch[1]; + value = []; + } else if (!/----.*FormBoundary/.test(line)) { + value.push(line); + } + }); + if (key && value) { + addField(key, value.join('\n')); + } + return fields; +} diff --git a/superset-frontend/cypress-base/cypress/utils/vizPlugins.ts b/superset-frontend/cypress-base/cypress/utils/vizPlugins.ts index e597bb7f5c0d242725b396b5b8fb04875092c6b0..4a60ef08a8d66b6b79bf16b6b5ce8d345c7f0c9e 100644 --- a/superset-frontend/cypress-base/cypress/utils/vizPlugins.ts +++ b/superset-frontend/cypress-base/cypress/utils/vizPlugins.ts @@ -23,30 +23,42 @@ export const DASHBOARD_CHART_ALIAS_PREFIX = 'getJson_'; export function isLegacyChart(vizType: string): boolean { return !V1_PLUGINS.includes(vizType); } + export function isLegacyResponse(response: any): boolean { return !response.result; } -export function getSliceIdFromRequestUrl(url: string): string { + +export function getSliceIdFromRequestUrl(url: string) { const address = new URL(url); const query = address.searchParams.get('form_data'); - return query?.match(/\d+/)[0]; + return query?.match(/\d+/)?.[0]; } + export function getChartAliases(slices: any[]): string[] { const aliases: string[] = []; Array.from(slices).forEach(slice => { const vizType = slice.form_data.viz_type; const isLegacy = isLegacyChart(vizType); const alias = `${DASHBOARD_CHART_ALIAS_PREFIX}${slice.slice_id}`; - const formData = `{"slice_id":${slice.slice_id}}`; + const formData = encodeURIComponent(`{"slice_id":${slice.slice_id}}`); if (isLegacy) { const route = `/superset/explore_json/?*${formData}*`; - cy.route('POST', `${route}`).as(alias); + cy.intercept('POST', `${route}`).as(alias); aliases.push(`@${alias}`); } else { const route = `/api/v1/chart/data?*${formData}*`; - cy.route('POST', `${route}`).as(alias); + cy.intercept('POST', `${route}`).as(alias); aliases.push(`@${alias}`); } }); return aliases; } + +export function interceptChart(sliceId: number, isLegacy = true) { + const formData = { slice_id: sliceId }; + const encodedFormData = encodeURIComponent(JSON.stringify(formData)); + const url = isLegacy + ? `**/superset/explore_json/?form_data=${encodedFormData}*` + : `**/api/v1/chart/data?form_data=${encodedFormData}*`; + return cy.intercept('POST', url); +} diff --git a/superset-frontend/cypress-base/package-lock.json b/superset-frontend/cypress-base/package-lock.json index 299785391a2aba90a25cb7915efccfecc727a897..82c9dfd615c8517210d45123a9b13e59bcddb4b6 100644 --- a/superset-frontend/cypress-base/package-lock.json +++ b/superset-frontend/cypress-base/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "requires": { "@babel/highlight": "^7.10.4" } @@ -34,21 +34,21 @@ } }, "@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", "requires": { - "@babel/types": "^7.12.5", + "@babel/types": "^7.12.11", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", + "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -60,25 +60,6 @@ "@babel/types": "^7.10.4" } }, - "@babel/helper-builder-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", - "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx-experimental": { - "version": "7.12.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz", - "integrity": "sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-module-imports": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, "@babel/helper-create-class-features-plugin": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", @@ -92,12 +73,11 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", - "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", + "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", "regexpu-core": "^4.7.1" } }, @@ -120,21 +100,21 @@ } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-hoist-variables": { @@ -146,11 +126,11 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.12.7" } }, "@babel/helper-module-imports": { @@ -178,11 +158,11 @@ } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-plugin-utils": { @@ -190,14 +170,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "requires": { - "lodash": "^4.17.19" - } - }, "@babel/helper-remap-async-to-generator": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", @@ -209,14 +181,14 @@ } }, "@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" } }, "@babel/helper-simple-access": { @@ -236,17 +208,17 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.11" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" }, "@babel/helper-wrap-function": { "version": "7.12.3", @@ -280,14 +252,14 @@ } }, "@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==" + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", + "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-remap-async-to-generator": "^7.12.1", @@ -406,9 +378,9 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", + "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -595,14 +567,15 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.5.tgz", - "integrity": "sha512-2xkcPqqrYiOQgSlM/iwto1paPijjsDbUynN13tI6bosDz/jOW3CRzYguIE8wKX32h+msbBM22Dv5fwrFkUOZjQ==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.12.tgz", + "integrity": "sha512-JDWGuzGNWscYcq8oJVCtSE61a5+XAOos+V0HrxnDieUus4UMnBEosDnY1VJqU5iZ4pA04QY7l0+JvHL1hZEfsw==", "requires": { - "@babel/helper-builder-react-jsx": "^7.10.4", - "@babel/helper-builder-react-jsx-experimental": "^7.12.1", + "@babel/helper-annotate-as-pure": "^7.12.10", + "@babel/helper-module-imports": "^7.12.5", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.12.1" + "@babel/plugin-syntax-jsx": "^7.12.1", + "@babel/types": "^7.12.12" } }, "@babel/plugin-transform-react-jsx-self": { @@ -666,12 +639,11 @@ } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", - "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", + "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { @@ -683,9 +655,9 @@ } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", + "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -794,37 +766,37 @@ } }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", "requires": { "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" } }, "@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", - "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "requires": { + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.12.11", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } @@ -859,6 +831,14 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, "fs-extra": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", @@ -873,27 +853,17 @@ } }, "@cypress/code-coverage": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/@cypress/code-coverage/-/code-coverage-3.8.3.tgz", - "integrity": "sha512-4R9bDS4CivckXaJudL5lKxXtB99LkO2RWE4a5M/P7VXGrXynQQDYbP07O9Jyjw/VjELWBV+xC3AOfYaU+wCHNQ==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@cypress/code-coverage/-/code-coverage-3.9.2.tgz", + "integrity": "sha512-YnzkRBxdsY/Ek/68nr+MowqW59UJsd28j10mFOerW/wrSkuxGrWvOldMs8Y4tU70L4fgd4wDPqGGMer3+UzbwA==", "requires": { "@cypress/browserify-preprocessor": "3.0.1", - "debug": "4.2.0", + "debug": "4.3.1", "execa": "4.1.0", - "globby": "11.0.1", + "globby": "11.0.2", "istanbul-lib-coverage": "3.0.0", - "js-yaml": "3.14.0", + "js-yaml": "3.14.1", "nyc": "15.1.0" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "requires": { - "ms": "2.1.2" - } - } } }, "@cypress/listr-verbose-renderer": { @@ -968,9 +938,9 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -996,25 +966,25 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" }, "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", "requires": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.4", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" }, "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", "requires": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.4", "fastq": "^1.6.0" } }, @@ -1629,15 +1599,15 @@ } }, "browserslist": { - "version": "4.14.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", - "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", + "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", "requires": { - "caniuse-lite": "^1.0.30001157", + "caniuse-lite": "^1.0.30001173", "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.591", + "electron-to-chromium": "^1.3.634", "escalade": "^3.1.1", - "node-releases": "^1.1.66" + "node-releases": "^1.1.69" } }, "buffer": { @@ -1709,12 +1679,12 @@ } }, "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "get-intrinsic": "^1.0.2" } }, "camelcase": { @@ -1723,9 +1693,9 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { - "version": "1.0.30001157", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001157.tgz", - "integrity": "sha512-gOerH9Wz2IRZ2ZPdMfBvyOi3cjaz4O4dgNwPGzx8EhqAs4+2IL/O+fJsbt+znSigujoZG8bVcIAUM/I/E5K3MA==" + "version": "1.0.30001178", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001178.tgz", + "integrity": "sha512-VtdZLC0vsXykKni8Uztx45xynytOi71Ufx9T8kHptSw9AL4dpqailUJJHavttuzUe1KYuBYtChiWv+BAb7mPmQ==" }, "caseless": { "version": "0.12.0", @@ -2009,9 +1979,9 @@ } }, "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true }, "common-tags": { @@ -2070,11 +2040,11 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js-compat": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz", - "integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.2.tgz", + "integrity": "sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ==", "requires": { - "browserslist": "^4.14.6", + "browserslist": "^4.16.0", "semver": "7.0.0" }, "dependencies": { @@ -2160,9 +2130,9 @@ } }, "cypress": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-5.5.0.tgz", - "integrity": "sha512-UHEiTca8AUTevbT2pWkHQlxoHtXmbq+h6Eiu/Mz8DqpNkF98zjTBLv/HFiKJUU5rQzp9EwSWtms33p5TWCJ8tQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-6.3.0.tgz", + "integrity": "sha512-Ec6TAFOxdSB2HPINNJ1f7z75pENXcfCaQkz+A9j0eGSvusFJ2NNErq650DexCbNJAnCQkPqXB4XPH9kXnSQnUA==", "dev": true, "requires": { "@cypress/listr-verbose-renderer": "^0.4.1", @@ -2177,7 +2147,7 @@ "chalk": "^4.1.0", "check-more-types": "^2.24.0", "cli-table3": "~0.6.0", - "commander": "^4.1.1", + "commander": "^5.1.0", "common-tags": "^1.8.0", "debug": "^4.1.1", "eventemitter2": "^6.4.2", @@ -2277,11 +2247,11 @@ "dev": true }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "decamelize": { @@ -2437,9 +2407,9 @@ } }, "electron-to-chromium": { - "version": "1.3.595", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.595.tgz", - "integrity": "sha512-JpaBIhdBkF9FLG7x06ONfe0f5bxPrxRcq0X+Sc8vsCt+OPWIzxOD+qM71NEHLGbDfN9Q6hbtHRv4/dnvcOxo6g==" + "version": "1.3.641", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.641.tgz", + "integrity": "sha512-b0DLhsHSHESC1I+Nx6n4w4Lr61chMd3m/av1rZQhS2IXTzaS5BMM5N+ldWdMIlni9CITMRM09m8He4+YV/92TA==" }, "elegant-spinner": { "version": "1.0.1", @@ -2497,9 +2467,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint-plugin-cypress": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.11.1.tgz", - "integrity": "sha512-MxMYoReSO5+IZMGgpBZHHSx64zYPSPTpXDwsgW7ChlJTF/sA+obqRbHplxD6sBStE+g4Mi0LCLkG4t9liu//mQ==", + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.11.2.tgz", + "integrity": "sha512-1SergF1sGbVhsf7MYfOLiBhdOg6wqyeV9pXUAIDIffYTGMN3dTBQS9nFAzhLsHhO+Bn0GaVM1Ecm71XUidQ7VA==", "dev": true, "requires": { "globals": "^11.12.0" @@ -2742,9 +2712,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -2814,9 +2784,9 @@ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, "fastq": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", - "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", + "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", "requires": { "reusify": "^1.0.4" } @@ -2931,15 +2901,23 @@ "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==" }, "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "fs.realpath": { @@ -2978,9 +2956,9 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", + "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -3056,12 +3034,12 @@ } }, "global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", "dev": true, "requires": { - "ini": "^1.3.5" + "ini": "1.3.7" } }, "globals": { @@ -3070,9 +3048,9 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -3281,9 +3259,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", "dev": true }, "inline-source-map": { @@ -3360,9 +3338,9 @@ } }, "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "requires": { "has": "^1.0.3" } @@ -3543,24 +3521,23 @@ }, "dependencies": { "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", + "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", + "@babel/generator": "^7.12.10", "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", - "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, @@ -3665,9 +3642,9 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3719,12 +3696,19 @@ } }, "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "jsonify": { @@ -4137,18 +4121,18 @@ } }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", "dev": true }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "dev": true, "requires": { - "mime-db": "1.44.0" + "mime-db": "1.45.0" } }, "mimic-fn": { @@ -4287,9 +4271,9 @@ } }, "node-releases": { - "version": "1.1.66", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.66.tgz", - "integrity": "sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg==" + "version": "1.1.69", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.69.tgz", + "integrity": "sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA==" }, "normalize-path": { "version": "3.0.0", @@ -4615,9 +4599,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "pretty-bytes": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.4.1.tgz", - "integrity": "sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.5.0.tgz", + "integrity": "sha512-p+T744ZyjjiaFlMUZZv6YPC5JrkNj8maRmPaQCWFJFplUAzpIUTRaTcS+7wmZtUoFXHtESJb23ISliaWyz3SHA==", "dev": true }, "process": { @@ -4814,9 +4798,9 @@ "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.6.tgz", + "integrity": "sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ==", "requires": { "jsesc": "~0.5.0" }, @@ -5636,9 +5620,9 @@ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -5803,9 +5787,9 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" }, "yargs": { "version": "15.4.1", diff --git a/superset-frontend/cypress-base/package.json b/superset-frontend/cypress-base/package.json index 24d185d90d1ab79532ca1f401da0c81a07f9594c..b637830cc6a4044de1047829f61304d1f0b7ea9d 100644 --- a/superset-frontend/cypress-base/package.json +++ b/superset-frontend/cypress-base/package.json @@ -10,13 +10,13 @@ "author": "Apcahe", "license": "Apache-2.0", "dependencies": { - "@cypress/code-coverage": "^3.8.3", + "@cypress/code-coverage": "^3.9.2", "rison": "^0.1.1", "shortid": "^2.2.15" }, "devDependencies": { - "cypress": "^5.5.0", - "eslint-plugin-cypress": "^2.11.1" + "cypress": "^6.3.0", + "eslint-plugin-cypress": "^2.11.2" }, "nyc": { "reporter": [ diff --git a/superset-frontend/cypress-base/tsconfig.json b/superset-frontend/cypress-base/tsconfig.json index efd5643e95e6bc6d919c4ba435574d7f64a97753..d047e2640fad7fc746dea9b16bbe504cf52ba81c 100644 --- a/superset-frontend/cypress-base/tsconfig.json +++ b/superset-frontend/cypress-base/tsconfig.json @@ -1,9 +1,11 @@ { "compilerOptions": { + "baseUrl": ".", "allowSyntheticDefaultImports": true, + "moduleResolution": "Node", "strict": true, - "target": "ES5", - "lib": ["ES5", "ES2015", "DOM"], + "target": "es2019", + "lib": ["es2019", "DOM"], "types": ["cypress"], "allowJs": true, "noEmit": true,