Skip to content
Snippets Groups Projects
InfoDataConsumptionVisualizer.spec.tsx 6.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { DataloadState, FluidType } from 'enums'
    
    import { mount } from 'enzyme'
    import toJson from 'enzyme-to-json'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    import { DateTime } from 'luxon'
    import { Dataload } from 'models'
    import React from 'react'
    import { Provider } from 'react-redux'
    
    import * as storeHooks from 'store/hooks'
    
    import { baseDataLoad } from 'tests/__mocks__/chartData.mock'
    import { createMockEcolyoStore } from 'tests/__mocks__/store'
    
    import InfoDataConsumptionVisualizer from './InfoDataConsumptionVisualizer'
    import NoDataModal from './NoDataModal'
    
    
    const mockAppDispatch = jest.spyOn(storeHooks, 'useAppDispatch')
    
    
    describe('InfoDataConsumptionVisualizer component', () => {
      const mockLastDataDate = DateTime.fromISO('2020-10-01T00:00:00.000Z', {
        zone: 'utc',
      })
      const mockDataload: Dataload = baseDataLoad
    
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      const store = createMockEcolyoStore()
    
    
      it('should render correctly when data valid', () => {
        const wrapper = mount(
          <Provider store={store}>
            <InfoDataConsumptionVisualizer
              dataload={mockDataload}
              fluidType={FluidType.ELECTRICITY}
              lastDataDate={mockLastDataDate}
            />
          </Provider>
        )
        expect(toJson(wrapper)).toMatchSnapshot()
      })
    
    
      describe('should render correctly consumption_visualizer.last_available_data', () => {
    
        it('case state MISSING', () => {
          const _mockdataLoad = { ...mockDataload, state: DataloadState.MISSING }
          const wrapper = mount(
            <Provider store={store}>
              <InfoDataConsumptionVisualizer
                dataload={_mockdataLoad}
                fluidType={FluidType.ELECTRICITY}
                lastDataDate={mockLastDataDate}
              />
            </Provider>
          )
          expect(wrapper.find('span').text()).toBe(
    
            'consumption_visualizer.last_available_data'
    
          )
        })
        it('case state UPCOMING', () => {
          const _mockdataLoad = { ...mockDataload, state: DataloadState.UPCOMING }
          const wrapper = mount(
            <Provider store={store}>
              <InfoDataConsumptionVisualizer
                dataload={_mockdataLoad}
                fluidType={FluidType.ELECTRICITY}
                lastDataDate={mockLastDataDate}
              />
            </Provider>
          )
          expect(wrapper.find('span').text()).toBe(
    
            'consumption_visualizer.last_available_data'
    
          )
        })
        it('case state COMING', () => {
          const _mockdataLoad = {
            ...mockDataload,
            state: DataloadState.COMING,
          }
          const wrapper = mount(
            <Provider store={store}>
              <InfoDataConsumptionVisualizer
                dataload={_mockdataLoad}
                fluidType={FluidType.ELECTRICITY}
                lastDataDate={mockLastDataDate}
              />
            </Provider>
          )
          expect(wrapper.find('span').text()).toBe(
    
            'consumption_visualizer.last_available_data'
    
          )
        })
        it('case state AGGREGATED_HOLE_OR_MISSING', () => {
          const _mockdataLoad = {
            ...mockDataload,
            state: DataloadState.AGGREGATED_HOLE_OR_MISSING,
          }
          const wrapper = mount(
            <Provider store={store}>
              <InfoDataConsumptionVisualizer
                dataload={_mockdataLoad}
                fluidType={FluidType.MULTIFLUID}
                lastDataDate={mockLastDataDate}
              />
            </Provider>
          )
          expect(wrapper.find('span').text()).toBe(
    
            'consumption_visualizer.last_valid_data_multi'
    
          )
        })
        it('case state AGGREGATED_WITH_HOLE_OR_MISSING', () => {
          const _mockdataLoad = {
            ...mockDataload,
            state: DataloadState.AGGREGATED_WITH_HOLE_OR_MISSING,
          }
          const wrapper = mount(
            <Provider store={store}>
              <InfoDataConsumptionVisualizer
                dataload={_mockdataLoad}
                fluidType={FluidType.MULTIFLUID}
                lastDataDate={mockLastDataDate}
              />
            </Provider>
          )
          expect(wrapper.find('span').text()).toBe(
    
            'consumption_visualizer.last_valid_data_multi'
    
          )
        })
        it('case state AGGREGATED_COMING', () => {
          const _mockdataLoad = {
            ...mockDataload,
            state: DataloadState.AGGREGATED_COMING,
          }
          const wrapper = mount(
            <Provider store={store}>
              <InfoDataConsumptionVisualizer
                dataload={_mockdataLoad}
                fluidType={FluidType.MULTIFLUID}
                lastDataDate={mockLastDataDate}
              />
            </Provider>
          )
          expect(wrapper.find('span').text()).toBe(
    
            'consumption_visualizer.last_valid_data_multi'
    
          )
        })
      })
    
      describe('should render correctly with why_no_data', () => {
        it('case state EMPTY', () => {
          const _mockdataLoad = { ...mockDataload, state: DataloadState.EMPTY }
          const wrapper = mount(
            <Provider store={store}>
              <InfoDataConsumptionVisualizer
                dataload={_mockdataLoad}
                fluidType={FluidType.ELECTRICITY}
                lastDataDate={mockLastDataDate}
              />
            </Provider>
          )
          expect(wrapper.find('span').text()).toBe(
            'consumption_visualizer.why_no_data'
          )
        })
        it('case state HOLE', () => {
          const _mockdataLoad = { ...mockDataload, state: DataloadState.HOLE }
          const wrapper = mount(
            <Provider store={store}>
              <InfoDataConsumptionVisualizer
                dataload={_mockdataLoad}
                fluidType={FluidType.ELECTRICITY}
                lastDataDate={mockLastDataDate}
              />
            </Provider>
          )
          expect(wrapper.find('span').text()).toBe(
            'consumption_visualizer.why_no_data'
          )
        })
        it('case state AGGREGATED_EMPTY', () => {
          const _mockdataLoad = {
            ...mockDataload,
            state: DataloadState.AGGREGATED_EMPTY,
          }
          const wrapper = mount(
            <Provider store={store}>
              <InfoDataConsumptionVisualizer
                dataload={_mockdataLoad}
                fluidType={FluidType.MULTIFLUID}
                lastDataDate={mockLastDataDate}
              />
            </Provider>
          )
          expect(wrapper.find('span').text()).toBe(
            'consumption_visualizer.why_no_data'
          )
        })
      })
    
      it('should click on last valid data date and move to it', async () => {
        const _mockdataLoad = { ...mockDataload, state: DataloadState.EMPTY }
        const wrapper = mount(
          <Provider store={store}>
            <InfoDataConsumptionVisualizer
              dataload={_mockdataLoad}
              fluidType={FluidType.ELECTRICITY}
              lastDataDate={mockLastDataDate}
            />
          </Provider>
        )
        wrapper.find('.error-line').simulate('click')
        expect(wrapper.find(NoDataModal).prop('open')).toBeTruthy()
      })
    
      it('should click to display NoDataModal', async () => {
        const _mockdataLoad = { ...mockDataload, state: DataloadState.EMPTY }
        const wrapper = mount(
          <Provider store={store}>
            <InfoDataConsumptionVisualizer
              dataload={_mockdataLoad}
              fluidType={FluidType.ELECTRICITY}
              lastDataDate={mockLastDataDate}
            />
          </Provider>
        )
        wrapper.find('.error-line').simulate('click')
    
        expect(mockAppDispatch).toHaveBeenCalled()