text: import { shallowMount } from '@vue/test-utils';
  import { GlHeatmap } from '@gitlab/ui/dist/charts';
  import timezoneMock from 'timezone-mock';
  import Heatmap from '~/monitoring/components/charts/heatmap.vue';
  import { graphDataPrometheusQueryRangeMultiTrack } from '../../mock_data';
  
  describe('Heatmap component', () => {
    let wrapper;
    let store;
  
    const findChart = () => wrapper.find(GlHeatmap);
  
    const createWrapper = (props = {}) => {
      wrapper = shallowMount(Heatmap, {
        propsData: {
          graphData: graphDataPrometheusQueryRangeMultiTrack,
          containerWidth: 100,
          ...props,
        },
        store,
      });
    };
  
    describe('wrapped chart', () => {
      let glHeatmapChart;
  
      beforeEach(() => {
        createWrapper();
        glHeatmapChart = findChart();
      });
  
      afterEach(() => {
        wrapper.destroy();
      });
  
      it('is a Vue instance', () => {
        expect(glHeatmapChart.isVueInstance()).toBe(true);
      });
  
      it('should display a label on the x axis', () => {
        expect(wrapper.vm.xAxisName).toBe(graphDataPrometheusQueryRangeMultiTrack.x_label);
      });
  
      it('should display a label on the y axis', () => {
        expect(wrapper.vm.yAxisName).toBe(graphDataPrometheusQueryRangeMultiTrack.y_label);
      });
  
      // According to the echarts docs https://echarts.apache.org/en/option.html#series-heatmap.data
      // each row of the heatmap chart is represented by an array inside another parent array
      // e.g. [[0, 0, 10]], the format represents the column, the row and finally the value
      // corresponding to the cell
  
      it('should return chartData with a length of x by y, with a length of 3 per array', () => {
        const row = wrapper.vm.chartData[0];
  
        expect(row.length).toBe(3);
        expect(wrapper.vm.chartData.length).toBe(30);
      });
  
      it('returns a series of labels for the x axis', () => {
        const { xAxisLabels } = wrapper.vm;
  
        expect(xAxisLabels.length).toBe(5);
      });
  
      describe('y axis labels', () => {
        const gmtLabels = ['3:00 PM', '4:00 PM', '5:00 PM', '6:00 PM', '7:00 PM', '8:00 PM'];
  
        it('y-axis labels are formatted in AM/PM format', () => {
          expect(findChart().props('yAxisLabels')).toEqual(gmtLabels);
        });
  
        describe('when in PT timezone', () => {
          const ptLabels = ['8:00 AM', '9:00 AM', '10:00 AM', '11:00 AM', '12:00 PM', '1:00 PM'];
          const utcLabels = gmtLabels; // Identical in this case
  
          beforeAll(() => {
            timezoneMock.register('US/Pacific');
          });
  
          afterAll(() => {
            timezoneMock.unregister();
          });
  
          it('by default, y-axis is formatted in PT', () => {
            createWrapper();
            expect(findChart().props('yAxisLabels')).toEqual(ptLabels);
          });
  
          it('when the chart uses local timezone, y-axis is formatted in PT', () => {
            createWrapper({ timezone: 'LOCAL' });
            expect(findChart().props('yAxisLabels')).toEqual(ptLabels);
          });
  
          it('when the chart uses UTC, y-axis is formatted in UTC', () => {
            createWrapper({ timezone: 'UTC' });
            expect(findChart().props('yAxisLabels')).toEqual(utcLabels);
          });
        });
      });
    });
  });
  