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', () => {
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 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)
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
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
219
220
221
222
223
224
225
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: {
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', () => {
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()