import { DataloadState, FluidType } from 'enums' import { mount } from 'enzyme' import toJson from 'enzyme-to-json' 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 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() }) })