Newer
Older
import { render, screen } from '@testing-library/react'
import { FluidState, FluidType, TimeStep } from 'enums'
import React from 'react'
import { Provider } from 'react-redux'
import * as chartActions from 'store/chart/chart.slice'
import { mockCustomPopup } from 'tests/__mocks__/customPopup.mock'

Guilhem CARRON
committed
mockExpiredElec,
mockExpiredGas,
} from 'tests/__mocks__/fluidStatusData.mock'
import { mockTestProfile1 } from 'tests/__mocks__/profileType.mock'
import ConsumptionView from './ConsumptionView'

Guilhem CARRON
committed
const mockUpdateProfile = jest.fn()
jest.mock('services/profile.service', () => {
return jest.fn(() => ({
updateProfile: mockUpdateProfile,
}))

Guilhem CARRON
committed
})
jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
jest.mock('components/Header/Header', () => 'mock-header')
jest.mock('components/DateNavigator/DateNavigator', () => 'mock-dateNavigator')
jest.mock('components/Content/Content', () => 'mock-content')
jest.mock(
'components/Consumption/FluidButtons/FluidButtons',
() => 'mock-fluidButtons'
)
jest.mock('components/FluidChart/FluidChart', () => 'mock-fluidchart')
jest.mock(
'components/Consumption/ConsumptionDetails/ConsumptionDetails',
() => 'mock-consumptionDetails'
)
jest.mock('components/Connection/Connection', () => 'mock-connection')
jest.mock(
'components/Konnector/KonnectorViewerCard',
jest.mock(
'components/Connection/SGEConnect/SgeConnectView',
() => 'mock-SgeConnectView'
)
const setCurrentTimeStepSpy = jest.spyOn(chartActions, 'setCurrentTimeStep')
const mockFluidStatus = mockInitialEcolyoState.global.fluidStatus
mockFluidStatus[FluidType.ELECTRICITY].status = FluidState.DONE
const mockChartStateShowOffline = { ...mockChartState, showOfflineData: true }
describe('ConsumptionView component', () => {
it('should be rendered correctly', async () => {
},
global: {
fluidStatus: mockFluidStatus,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
<ConsumptionView fluidType={FluidType.ELECTRICITY} />
expect(container.getElementsByTagName('mock-cozybar')[0]).toBeTruthy()
expect(container.getElementsByTagName('mock-header')[0]).toBeTruthy()
expect(container.getElementsByTagName('mock-dateNavigator')[0]).toBeTruthy()
expect(container.getElementsByTagName('mock-fluidButtons')[0]).toBeTruthy()
expect(container.getElementsByTagName('mock-fluidchart')[0]).toBeTruthy()
expect(
container.getElementsByTagName('mock-consumptionDetails')[0]
).toBeTruthy()
})
it('should set CurrentTimeStep to WEEK when fluid != ELECTRICITY and timeStep = HALF_AN_HOUR', () => {
currentTimeStep: TimeStep.HALF_AN_HOUR,
},
global: {
fluidStatus: mockInitialEcolyoState.global.fluidStatus,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
<ConsumptionView fluidType={FluidType.GAS} />
expect(setCurrentTimeStepSpy).toHaveBeenCalledTimes(1)
expect(setCurrentTimeStepSpy).toHaveBeenCalledWith(TimeStep.WEEK)
})
it('should render konnector list when no fluid is connected', () => {
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
global: {
fluidStatus: [],
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
<Provider store={store}>
<ConsumptionView fluidType={FluidType.MULTIFLUID} />
</Provider>
)
expect(
container.getElementsByTagName('mock-consumptionDetails')[0]
).toBeTruthy()
it('should render mutlifluid consumption if at least one fluid is connected', () => {
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
<Provider store={store}>
<ConsumptionView fluidType={FluidType.MULTIFLUID} />
</Provider>
)
expect(
container.getElementsByClassName('consumptionview-content')[0]
).toBeInTheDocument()
it('should render Electricity when elec is connected', () => {
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
<Provider store={store}>
<ConsumptionView fluidType={FluidType.ELECTRICITY} />
</Provider>
)
expect(
container.getElementsByClassName('consumptionview-content').item(0)
).toBeInTheDocument()
expect(
container.getElementsByTagName('mock-consumptionDetails').item(0)
).toBeInTheDocument()
// todo describe and add multiple fluids ?
it('should render partner issue Modal', async () => {
const updatedStatus = mockInitialEcolyoState.global.fluidStatus

Guilhem CARRON
committed
updatedStatus[0] = mockExpiredElec
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
global: {
fluidStatus: updatedStatus,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
modal: {
...mockModalState,
partnersIssueModal: { enedis: false, grdf: false, egl: true },
},

Guilhem CARRON
committed
})
mockUpdateProfile.mockResolvedValue(mockTestProfile1)

Guilhem CARRON
committed
<Provider store={store}>
<ConsumptionView fluidType={FluidType.ELECTRICITY} />
</Provider>
)
expect(screen.getByRole('dialog')).toBeInTheDocument()

Guilhem CARRON
committed
})
it('should show expired modal when a GRDF consent is expired', () => {
const updatedStatus = mockInitialEcolyoState.global.fluidStatus
updatedStatus[0] = mockExpiredGas
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
global: {
fluidStatus: updatedStatus,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
<ConsumptionView fluidType={FluidType.GAS} />
expect(screen.getByText('consent_outdated.title.2')).toBeInTheDocument()
it('should show expired modal when a Enedis consent is expired', () => {
const updatedStatus = mockInitialEcolyoState.global.fluidStatus

Guilhem CARRON
committed
updatedStatus[0] = mockExpiredElec
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
global: {
fluidStatus: updatedStatus,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},

Guilhem CARRON
committed
})

Guilhem CARRON
committed
<Provider store={store}>
<ConsumptionView fluidType={FluidType.ELECTRICITY} />

Guilhem CARRON
committed
</Provider>
)
expect(screen.getByText('consent_outdated.title.0')).toBeInTheDocument()
})
it('should render customPopup Modal', async () => {
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
modal: {
customPopupModal: mockCustomPopup,
},
})
mockUpdateProfile.mockResolvedValue(mockTestProfile1)
<Provider store={store}>
<ConsumptionView fluidType={FluidType.ELECTRICITY} />
</Provider>
)
expect(screen.getByRole('dialog')).toBeInTheDocument()

Guilhem CARRON
committed
})
it('should render releaseNotesModal if releaseNotes.show is true', async () => {
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
releaseNotes: {
show: true,
notes: [{ description: 'description', title: 'title' }],
},
})
mockUpdateProfile.mockResolvedValue(mockTestProfile1)
<Provider store={store}>
<ConsumptionView fluidType={FluidType.ELECTRICITY} />
</Provider>
)
expect(screen.getByRole('dialog')).toBeInTheDocument()