Newer
Older
import { render, screen, waitFor } 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', () => {
beforeEach(() => {
jest.clearAllMocks()
})
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', async () => {
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', async () => {
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
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 without konnectorViewerCard', async () => {
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
<Provider store={store}>
<ConsumptionView fluidType={FluidType.MULTIFLUID} />
</Provider>
)
await waitFor(() => null, { container })
container.getElementsByTagName('mock-consumptionDetails').item(0)
expect(
container.getElementsByTagName('mock-konnectorViewerCard').item(0)
).not.toBeInTheDocument()
it('should render Electricity when elec is connected with konnectorViewCard', async () => {
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
<Provider store={store}>
<ConsumptionView fluidType={FluidType.ELECTRICITY} />
</Provider>
)
await waitFor(() => null, { container })
container.getElementsByTagName('mock-consumptionDetails').item(0)
container.getElementsByTagName('mock-konnectorViewerCard').item(0)
describe('Partner Issue Modal', () => {
it('should render partner issue Modal for electricity', async () => {
const updatedStatus = mockInitialEcolyoState.global.fluidStatus
updatedStatus[0] = { ...updatedStatus[0], maintenance: true }
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
global: {
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
fluidStatus: updatedStatus,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
modal: {
...mockModalState,
partnersIssueModal: { enedis: true, grdf: false, egl: false },
},
})
mockUpdateProfile.mockResolvedValue(mockTestProfile1)
const { container } = render(
<Provider store={store}>
<ConsumptionView fluidType={FluidType.ELECTRICITY} />
</Provider>
)
await waitFor(() => null, { container })
expect(
screen.getByRole('presentation', {
name: 'consumption.partner_issue_modal.accessibility_title',
})
).toBeInTheDocument()
})
it('should render partner issue Modal for water', async () => {
const updatedStatus = mockInitialEcolyoState.global.fluidStatus
updatedStatus[1] = { ...updatedStatus[1], maintenance: true }
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
global: {
fluidStatus: updatedStatus,
releaseNotes: mockInitialEcolyoState.global.releaseNotes,
},
modal: {
...mockModalState,
partnersIssueModal: { enedis: false, grdf: false, egl: true },
},
})
mockUpdateProfile.mockResolvedValue(mockTestProfile1)
const { container } = render(
<Provider store={store}>
<ConsumptionView fluidType={FluidType.WATER} />
</Provider>
)
await waitFor(() => null, { container })
expect(
screen.getByRole('presentation', {
name: 'consumption.partner_issue_modal.accessibility_title',
})
).toBeInTheDocument()

Guilhem CARRON
committed
})
})
it('should show expired modal when a GRDF consent is expired', async () => {
const updatedStatus = mockInitialEcolyoState.global.fluidStatus
updatedStatus[0] = mockExpiredGas
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
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', async () => {
const updatedStatus = mockInitialEcolyoState.global.fluidStatus

Guilhem CARRON
committed
updatedStatus[0] = mockExpiredElec
const store = createMockEcolyoStore({
chart: mockChartStateShowOffline,
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()