Skip to content
Snippets Groups Projects
Commit de28d303 authored by Bastien DUMONT's avatar Bastien DUMONT :angel:
Browse files

fix(electricity): remove loader delay

parent a91392f4
Branches
Tags
2 merge requests!11623.0 Release,!1145fix(electricity): remove loader delay
...@@ -2,7 +2,8 @@ import { render, screen } from '@testing-library/react' ...@@ -2,7 +2,8 @@ import { render, screen } from '@testing-library/react'
import React from 'react' import React from 'react'
import { Provider } from 'react-redux' import { Provider } from 'react-redux'
import { BrowserRouter } from 'react-router-dom' import { BrowserRouter } from 'react-router-dom'
import { createMockEcolyoStore } from 'tests/__mocks__/store' import { SgeStatusWithAccount } from 'tests/__mocks__/fluidStatusData.mock'
import { createMockEcolyoStore, mockGlobalState } from 'tests/__mocks__/store'
import SgeConnectView from './SgeConnectView' import SgeConnectView from './SgeConnectView'
jest.mock('components/Content/Content', () => 'mock-content') jest.mock('components/Content/Content', () => 'mock-content')
...@@ -10,6 +11,13 @@ jest.mock('components/Header/CozyBar', () => 'mock-cozybar') ...@@ -10,6 +11,13 @@ jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
const store = createMockEcolyoStore() const store = createMockEcolyoStore()
const mockConnect = jest.fn()
const mockUpdate = jest.fn()
jest.mock('components/Hooks/useKonnectorAuth', () =>
jest.fn(() => [mockConnect, mockUpdate])
)
describe('SgeConnectView component', () => { describe('SgeConnectView component', () => {
beforeEach(() => { beforeEach(() => {
jest.clearAllMocks() jest.clearAllMocks()
...@@ -46,4 +54,43 @@ describe('SgeConnectView component', () => { ...@@ -46,4 +54,43 @@ describe('SgeConnectView component', () => {
expect(prevButton).toBeDisabled() expect(prevButton).toBeDisabled()
expect(nextButton).toBeDisabled() expect(nextButton).toBeDisabled()
}) })
describe('should test methods from useKonnectorAuth hook', () => {
it('should launch account and trigger creation process', async () => {
const store = createMockEcolyoStore({
global: {
...mockGlobalState,
sgeConnect: {
...mockGlobalState.sgeConnect,
shouldLaunchAccount: true,
},
},
})
render(
<Provider store={store}>
<SgeConnectView />
</Provider>
)
expect(mockConnect).toHaveBeenCalled()
})
it('should launch existing account update process', async () => {
const store = createMockEcolyoStore({
global: {
...mockGlobalState,
fluidStatus: [SgeStatusWithAccount],
sgeConnect: {
...mockGlobalState.sgeConnect,
shouldLaunchAccount: true,
},
},
})
render(
<Provider store={store}>
<SgeConnectView />
</Provider>
)
expect(mockUpdate).toHaveBeenCalled()
})
})
}) })
...@@ -3,11 +3,15 @@ import FormProgress from 'components/CommonKit/FormProgress/FormProgress' ...@@ -3,11 +3,15 @@ import FormProgress from 'components/CommonKit/FormProgress/FormProgress'
import Content from 'components/Content/Content' import Content from 'components/Content/Content'
import CozyBar from 'components/Header/CozyBar' import CozyBar from 'components/Header/CozyBar'
import Header from 'components/Header/Header' import Header from 'components/Header/Header'
import { SgeStep } from 'enums' import useKonnectorAuth from 'components/Hooks/useKonnectorAuth'
import { FluidType, SgeStep } from 'enums'
import { SgeStore } from 'models' import { SgeStore } from 'models'
import React, { useCallback, useState } from 'react' import React, { useCallback, useEffect, useState } from 'react'
import { useNavigate } from 'react-router' import { useNavigate } from 'react-router-dom'
import { updateSgeStore } from 'store/global/global.slice' import {
setShouldRefreshConsent,
updateSgeStore,
} from 'store/global/global.slice'
import { useAppDispatch, useAppSelector } from 'store/hooks' import { useAppDispatch, useAppSelector } from 'store/hooks'
import '../connection.scss' import '../connection.scss'
import StepAddress from './StepAddress' import StepAddress from './StepAddress'
...@@ -33,6 +37,29 @@ const SgeConnectView = () => { ...@@ -33,6 +37,29 @@ const SgeConnectView = () => {
const [currentStep, setCurrentStep] = useState<SgeStep>( const [currentStep, setCurrentStep] = useState<SgeStep>(
SgeStep.IdentityAndPDL SgeStep.IdentityAndPDL
) )
const { fluidStatus } = useAppSelector(state => state.ecolyo.global)
const currentFluidStatus = fluidStatus[FluidType.ELECTRICITY]
const account = currentFluidStatus.connection.account
const [connect, update] = useKonnectorAuth(FluidType.ELECTRICITY, {
sgeAuthData: sgeConnect,
})
useEffect(() => {
async function launchConnect() {
if (sgeConnect.shouldLaunchAccount) {
dispatch(updateSgeStore({ ...sgeConnect, shouldLaunchAccount: false }))
dispatch(setShouldRefreshConsent(false))
if (!account) {
await connect()
} else {
await update()
}
navigate('/consumption/electricity')
}
}
launchConnect()
}, [account, connect, dispatch, navigate, sgeConnect, update])
const isNextValid = useCallback(() => { const isNextValid = useCallback(() => {
switch (currentStep) { switch (currentStep) {
...@@ -81,9 +108,8 @@ const SgeConnectView = () => { ...@@ -81,9 +108,8 @@ const SgeConnectView = () => {
} }
setCurrentSgeState(updatedState) setCurrentSgeState(updatedState)
dispatch(updateSgeStore(updatedState)) dispatch(updateSgeStore(updatedState))
navigate('/consumption/electricity')
} }
}, [currentStep, isLoading, dispatch, currentSgeState, navigate]) }, [currentStep, isLoading, dispatch, currentSgeState])
const handlePrev = useCallback(() => { const handlePrev = useCallback(() => {
if (currentStep !== SgeStep.IdentityAndPDL) { if (currentStep !== SgeStep.IdentityAndPDL) {
......
...@@ -2,8 +2,7 @@ import { render, screen } from '@testing-library/react' ...@@ -2,8 +2,7 @@ import { render, screen } from '@testing-library/react'
import { userEvent } from '@testing-library/user-event' import { userEvent } from '@testing-library/user-event'
import React from 'react' import React from 'react'
import { Provider } from 'react-redux' import { Provider } from 'react-redux'
import { SgeStatusWithAccount } from 'tests/__mocks__/fluidStatusData.mock' import { createMockEcolyoStore } from 'tests/__mocks__/store'
import { createMockEcolyoStore, mockGlobalState } from 'tests/__mocks__/store'
import SgeInit from './SgeInit' import SgeInit from './SgeInit'
const mockedNavigate = jest.fn() const mockedNavigate = jest.fn()
...@@ -12,13 +11,6 @@ jest.mock('react-router-dom', () => ({ ...@@ -12,13 +11,6 @@ jest.mock('react-router-dom', () => ({
useNavigate: () => mockedNavigate, useNavigate: () => mockedNavigate,
})) }))
const mockConnect = jest.fn()
const mockUpdate = jest.fn()
jest.mock('components/Hooks/useKonnectorAuth', () =>
jest.fn(() => [mockConnect, mockUpdate])
)
describe('SgeInit component', () => { describe('SgeInit component', () => {
const store = createMockEcolyoStore() const store = createMockEcolyoStore()
it('should be rendered correctly', () => { it('should be rendered correctly', () => {
...@@ -38,40 +30,4 @@ describe('SgeInit component', () => { ...@@ -38,40 +30,4 @@ describe('SgeInit component', () => {
await userEvent.click(screen.getAllByRole('button')[0]) await userEvent.click(screen.getAllByRole('button')[0])
expect(mockedNavigate).toHaveBeenCalled() expect(mockedNavigate).toHaveBeenCalled()
}) })
it('should launch account and trigger creation process', async () => {
const store = createMockEcolyoStore({
global: {
...mockGlobalState,
sgeConnect: {
...mockGlobalState.sgeConnect,
shouldLaunchAccount: true,
},
},
})
render(
<Provider store={store}>
<SgeInit />
</Provider>
)
expect(mockConnect).toHaveBeenCalled()
})
it('should launch existing account update process', async () => {
const store = createMockEcolyoStore({
global: {
...mockGlobalState,
fluidStatus: [SgeStatusWithAccount],
sgeConnect: {
...mockGlobalState.sgeConnect,
shouldLaunchAccount: true,
},
},
})
render(
<Provider store={store}>
<SgeInit />
</Provider>
)
expect(mockUpdate).toHaveBeenCalled()
})
}) })
import { Button } from '@material-ui/core' import { Button } from '@material-ui/core'
import ElectricityBillIcon from 'assets/icons/visu/onboarding/electricity_bill.svg' import ElectricityBillIcon from 'assets/icons/visu/onboarding/electricity_bill.svg'
import StyledIcon from 'components/CommonKit/Icon/StyledIcon' import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
import useKonnectorAuth from 'components/Hooks/useKonnectorAuth'
import { useI18n } from 'cozy-ui/transpiled/react/I18n' import { useI18n } from 'cozy-ui/transpiled/react/I18n'
import { FluidType } from 'enums' import { FluidType } from 'enums'
import React, { useEffect } from 'react' import React from 'react'
import { useNavigate } from 'react-router-dom' import { useNavigate } from 'react-router-dom'
import { setShowOfflineData } from 'store/chart/chart.slice' import { setShowOfflineData } from 'store/chart/chart.slice'
import {
setShouldRefreshConsent,
updateSgeStore,
} from 'store/global/global.slice'
import { useAppDispatch, useAppSelector } from 'store/hooks' import { useAppDispatch, useAppSelector } from 'store/hooks'
const SgeInit = () => { const SgeInit = () => {
...@@ -18,27 +13,7 @@ const SgeInit = () => { ...@@ -18,27 +13,7 @@ const SgeInit = () => {
const navigate = useNavigate() const navigate = useNavigate()
const { fluidStatus } = useAppSelector(state => state.ecolyo.global) const { fluidStatus } = useAppSelector(state => state.ecolyo.global)
const currentFluidStatus = fluidStatus[FluidType.ELECTRICITY] const currentFluidStatus = fluidStatus[FluidType.ELECTRICITY]
const account = currentFluidStatus.connection.account
const { sgeConnect } = useAppSelector(state => state.ecolyo.global)
const dispatch = useAppDispatch() const dispatch = useAppDispatch()
const [connect, update] = useKonnectorAuth(FluidType.ELECTRICITY, {
sgeAuthData: sgeConnect,
})
useEffect(() => {
async function launchConnect() {
if (sgeConnect.shouldLaunchAccount) {
dispatch(updateSgeStore({ ...sgeConnect, shouldLaunchAccount: false }))
dispatch(setShouldRefreshConsent(false))
if (!account) {
await connect()
} else {
await update()
}
}
}
launchConnect()
}, [account, connect, dispatch, sgeConnect, update])
return ( return (
<div className="connection-form"> <div className="connection-form">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment