airbnb/caravel

View on GitHub
superset-frontend/cypress-base/cypress/e2e/explore/utils.ts

Summary

Maintainability
A
3 hrs
Test Coverage
/**
 * 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.
 */

import { interceptGet as interceptDashboardGet } from '../dashboard/utils';

export function interceptFiltering() {
  cy.intercept('GET', `/api/v1/chart/?q=*`).as('filtering');
}

export function interceptBulkDelete() {
  cy.intercept('DELETE', `/api/v1/chart/?q=*`).as('bulkDelete');
}

export function interceptDelete() {
  cy.intercept('DELETE', `/api/v1/chart/*`).as('delete');
}

export function interceptUpdate() {
  cy.intercept('PUT', `/api/v1/chart/*`).as('update');
}

export const interceptV1ChartData = (alias = 'v1Data') => {
  cy.intercept('/api/v1/chart/data*').as(alias);
};

export function interceptExploreJson(alias = 'getJson') {
  cy.intercept('POST', `/superset/explore_json/**`).as(alias);
}

export const interceptFormDataKey = () => {
  cy.intercept('POST', '/api/v1/explore/form_data').as('formDataKey');
};

export function interceptExploreGet() {
  cy.intercept({
    method: 'GET',
    url: /api\/v1\/explore\/\?(form_data_key|dashboard_page_id|slice_id)=.*/,
  }).as('getExplore');
}

export function setFilter(filter: string, option: string) {
  interceptFiltering();

  cy.get(`[aria-label="${filter}"]`).first().click();
  cy.get(`[aria-label="${filter}"] [title="${option}"]`).click();

  cy.wait('@filtering');
}

export function saveChartToDashboard(dashboardName: string) {
  interceptDashboardGet();
  interceptUpdate();
  interceptExploreGet();

  cy.getBySel('query-save-button').click();
  cy.getBySelLike('chart-modal').should('be.visible');
  cy.get(
    '[data-test="save-chart-modal-select-dashboard-form"] [aria-label="Select a dashboard"]',
  )
    .first()
    .click();
  cy.get(
    '.ant-select-selection-search-input[aria-label="Select a dashboard"]',
  ).type(dashboardName.slice(0, 3), { force: true });
  cy.get(`.ant-select-item-option[title="${dashboardName}"]`).click();
  cy.getBySel('btn-modal-save').click();

  cy.wait('@update');
  cy.wait('@get');
  cy.wait('@getExplore');
  cy.contains(`was added to dashboard [${dashboardName}]`);
}

export function visitSampleChartFromList(chartName: string) {
  cy.getBySel('table-row').contains(chartName).click();
  cy.intercept('POST', '/superset/explore_json/**').as('getJson');
}