airbnb/caravel

View on GitHub
superset-frontend/cypress-base/cypress/e2e/dashboard/_skip.controls.test.ts

Summary

Maintainability
A
0 mins
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 {
  waitForChartLoad,
  ChartSpec,
  getChartAliasesBySpec,
} from 'cypress/utils';
import { WORLD_HEALTH_DASHBOARD } from 'cypress/utils/urls';
import { WORLD_HEALTH_CHARTS } from './utils';
import { isLegacyResponse } from '../../utils/vizPlugins';

describe.skip('Dashboard top-level controls', () => {
  beforeEach(() => {
    cy.visit(WORLD_HEALTH_DASHBOARD);
  });

  // flaky test
  it('should allow chart level refresh', () => {
    const mapSpec = WORLD_HEALTH_CHARTS.find(
      ({ viz }) => viz === 'world_map',
    ) as ChartSpec;
    waitForChartLoad(mapSpec).then(gridComponent => {
      const mapId = gridComponent.attr('data-test-chart-id');
      cy.get('[data-test="grid-container"]').find('.world_map').should('exist');
      cy.get(`#slice_${mapId}-controls`).click();
      cy.get(`[data-test="slice_${mapId}-menu"]`)
        .find('[data-test="refresh-chart-menu-item"]')
        .click({ force: true });
      // likely cause for flakiness:
      // The query completes before this assertion happens.
      // Solution: pause the network before clicking, assert, then unpause network.
      cy.get('[data-test="refresh-chart-menu-item"]').should(
        'have.class',
        'ant-dropdown-menu-item-disabled',
      );
      waitForChartLoad(mapSpec);
      cy.get('[data-test="refresh-chart-menu-item"]').should(
        'not.have.class',
        'ant-dropdown-menu-item-disabled',
      );
    });
  });

  it('should allow dashboard level force refresh', () => {
    // when charts are not start loading, for example, under a secondary tab,
    // should allow force refresh
    WORLD_HEALTH_CHARTS.forEach(waitForChartLoad);
    getChartAliasesBySpec(WORLD_HEALTH_CHARTS).then(aliases => {
      cy.get('[aria-label="more-horiz"]').click();
      cy.get('[data-test="refresh-dashboard-menu-item"]').should(
        'not.have.class',
        'ant-dropdown-menu-item-disabled',
      );

      cy.get('[data-test="refresh-dashboard-menu-item"]').click({
        force: true,
      });
      cy.get('[data-test="refresh-dashboard-menu-item"]').should(
        'have.class',
        'ant-dropdown-menu-item-disabled',
      );

      // wait all charts force refreshed.

      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(request.url).to.have.string('force=true');
          // is_cached in response should be false
          expect(isCached).to.equal(false);
        });
      });
    });
    cy.get('[aria-label="more-horiz"]').click();
    cy.get('[data-test="refresh-dashboard-menu-item"]').and(
      'not.have.class',
      'ant-dropdown-menu-item-disabled',
    );
  });
});