Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • web-et-numerique/factory/llle_project/ecolyo
1 result
Select Git revision
Show changes
Commits on Source (7)
Showing
with 137 additions and 724 deletions
......@@ -46,7 +46,6 @@ const store = createMockEcolyoStore({
analysis: mockAnalysisState,
})
const allFluids = [FluidType.ELECTRICITY, FluidType.GAS, FluidType.MULTIFLUID]
const performanceIndicator = {
compareValue: 160.42797399999998,
percentageVariation: 0.026592126632478563,
......@@ -77,7 +76,6 @@ describe('AnalysisConsumption component', () => {
<ProfileComparator
aggregatedPerformanceIndicator={performanceIndicator}
performanceIndicators={performanceIndicators}
fluidsWithData={allFluids}
/>
</Provider>
)
......@@ -97,7 +95,6 @@ describe('AnalysisConsumption component', () => {
<ProfileComparator
aggregatedPerformanceIndicator={mockAggregatedPerformanceIndicator}
performanceIndicators={performanceIndicators}
fluidsWithData={allFluids}
/>
</Provider>
)
......@@ -116,7 +113,6 @@ describe('AnalysisConsumption component', () => {
<ProfileComparator
aggregatedPerformanceIndicator={mockAggregatedPerformanceIndicator}
performanceIndicators={performanceIndicators}
fluidsWithData={allFluids}
/>
</Provider>
)
......@@ -131,7 +127,6 @@ describe('AnalysisConsumption component', () => {
<ProfileComparator
aggregatedPerformanceIndicator={performanceIndicator}
performanceIndicators={performanceIndicators}
fluidsWithData={allFluids}
/>
</Provider>
)
......@@ -161,7 +156,6 @@ describe('AnalysisConsumption component', () => {
<ProfileComparator
aggregatedPerformanceIndicator={performanceIndicator}
performanceIndicators={performanceIndicators}
fluidsWithData={allFluids}
/>
</Provider>
)
......@@ -188,7 +182,6 @@ describe('AnalysisConsumption component', () => {
<ProfileComparator
aggregatedPerformanceIndicator={performanceIndicator}
performanceIndicators={performanceIndicators}
fluidsWithData={allFluids}
/>
</Provider>
)
......@@ -207,7 +200,6 @@ describe('AnalysisConsumption component', () => {
<ProfileComparator
aggregatedPerformanceIndicator={performanceIndicator}
performanceIndicators={performanceIndicators}
fluidsWithData={allFluids}
/>
</Provider>
)
......
......@@ -5,17 +5,23 @@ import StyledCard from './StyledCard'
describe('StyledCard component test', () => {
it('should render correctly Electricity StyledCard', () => {
const wrapper = mount(<StyledCard fluidType={FluidType.ELECTRICITY} />)
const wrapper = mount(
<StyledCard fluidType={FluidType.ELECTRICITY}>children</StyledCard>
)
expect(wrapper.getElement()).toMatchSnapshot()
})
it('should render correctly Water StyledCard', () => {
const wrapper = mount(<StyledCard fluidType={FluidType.WATER} />)
const wrapper = mount(
<StyledCard fluidType={FluidType.WATER}>children</StyledCard>
)
expect(wrapper.getElement()).toMatchSnapshot()
})
it('should render correctly Gas StyledCard', () => {
const wrapper = mount(<StyledCard fluidType={FluidType.GAS} />)
const wrapper = mount(
<StyledCard fluidType={FluidType.GAS}>children</StyledCard>
)
expect(wrapper.getElement()).toMatchSnapshot()
})
})
......@@ -3,17 +3,23 @@
exports[`StyledCard component test should render correctly Electricity StyledCard 1`] = `
<StyledCard
fluidType={0}
/>
>
children
</StyledCard>
`;
exports[`StyledCard component test should render correctly Gas StyledCard 1`] = `
<StyledCard
fluidType={2}
/>
>
children
</StyledCard>
`;
exports[`StyledCard component test should render correctly Water StyledCard 1`] = `
<StyledCard
fluidType={1}
/>
>
children
</StyledCard>
`;
import Connection from 'components/Connection/Connection'
import { FluidType } from 'enums'
import { mount } from 'enzyme'
import toJson from 'enzyme-to-json'
import React from 'react'
import { Provider } from 'react-redux'
import { fluidStatusConnectedData } from 'tests/__mocks__/fluidStatusData.mock'
import { createMockEcolyoStore } from 'tests/__mocks__/store'
jest.mock('components/Connection/EPGLConnect/EpglInit', () => 'mock-EpglInit')
......@@ -15,7 +15,7 @@ describe('Connection component test', () => {
it('should call GrdfInit', () => {
const wrapper = mount(
<Provider store={store}>
<Connection fluidStatus={fluidStatusConnectedData[2]} />
<Connection fluidType={FluidType.GAS} />
</Provider>
)
expect(toJson(wrapper)).toMatchSnapshot()
......@@ -24,7 +24,7 @@ describe('Connection component test', () => {
it('should call EpglInit', () => {
const wrapper = mount(
<Provider store={store}>
<Connection fluidStatus={fluidStatusConnectedData[0]} />
<Connection fluidType={FluidType.WATER} />
</Provider>
)
expect(toJson(wrapper)).toMatchSnapshot()
......
import { FluidType } from 'enums'
import { FluidConnection, FluidStatus } from 'models'
import { FluidConnection } from 'models'
import React, { useCallback } from 'react'
import { updateFluidConnection } from 'store/global/global.slice'
import { useAppDispatch } from 'store/hooks'
import { useAppDispatch, useAppSelector } from 'store/hooks'
import EpglInit from './EPGLConnect/EpglInit'
import GrdfInit from './GRDFConnect/GrdfInit'
import SgeInit from './SGEConnect/SgeInit'
import './connection.scss'
const Connection = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
const Connection = ({ fluidType }: { fluidType: FluidType }) => {
const { fluidStatus } = useAppSelector(state => state.ecolyo.global)
const currentFluidStatus = fluidStatus[fluidType]
const dispatch = useAppDispatch()
const handleSuccess = useCallback(async () => {
const updatedConnection: FluidConnection = {
...fluidStatus.connection,
...currentFluidStatus.connection,
shouldLaunchKonnector: true,
}
dispatch(
updateFluidConnection({
fluidType: fluidStatus.fluidType,
fluidType: fluidType,
fluidConnection: updatedConnection,
})
)
}, [dispatch, fluidStatus.fluidType, fluidStatus.connection])
}, [dispatch, fluidType, currentFluidStatus.connection])
return (
<div className="konnector-form">
{fluidStatus.fluidType === FluidType.ELECTRICITY && (
<SgeInit fluidStatus={fluidStatus} />
)}
{fluidStatus.fluidType === FluidType.WATER && (
<EpglInit fluidStatus={fluidStatus} />
)}
{fluidStatus.fluidType === FluidType.GAS && (
<GrdfInit fluidStatus={fluidStatus} onSuccess={handleSuccess} />
)}
{fluidType === FluidType.ELECTRICITY && <SgeInit />}
{fluidType === FluidType.WATER && <EpglInit />}
{fluidType === FluidType.GAS && <GrdfInit onSuccess={handleSuccess} />}
</div>
)
}
......
......@@ -2,16 +2,18 @@ import Button from '@material-ui/core/Button'
import WaterBillIcon from 'assets/icons/visu/onboarding/water_bill.svg'
import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
import { useI18n } from 'cozy-ui/transpiled/react/I18n'
import { FluidStatus } from 'models'
import { FluidType } from 'enums'
import React from 'react'
import { setShowOfflineData } from 'store/chart/chart.slice'
import { useAppDispatch } from 'store/hooks'
import { useAppDispatch, useAppSelector } from 'store/hooks'
import { openConnectionModal } from 'store/modal/modal.slice'
import '../connection.scss'
const EpglBill = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
const EpglBill = () => {
const { t } = useI18n()
const dispatch = useAppDispatch()
const { fluidStatus } = useAppSelector(state => state.ecolyo.global)
const currentFluidStatus = fluidStatus[FluidType.WATER]
return (
<div className="connection-form">
......@@ -36,7 +38,7 @@ const EpglBill = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
>
{t('auth.eglgrandlyon.connect')}
</Button>
{fluidStatus.firstDataDate && (
{currentFluidStatus.firstDataDate && (
<Button
classes={{
root: 'btn-secondary',
......
import { useI18n } from 'cozy-ui/transpiled/react/I18n'
import { FluidStatus } from 'models'
import React from 'react'
import '../connection.scss'
import FormLogin from './FormLogin/FormLogin'
interface EpglFormProps {
fluidStatus: FluidStatus
hasCreatedAccount: boolean
}
const EpglForm = ({ fluidStatus, hasCreatedAccount }: EpglFormProps) => {
const EpglForm = ({ hasCreatedAccount }: { hasCreatedAccount: boolean }) => {
const { t } = useI18n()
return (
......@@ -22,7 +16,7 @@ const EpglForm = ({ fluidStatus, hasCreatedAccount }: EpglFormProps) => {
<div className="connection-form-subtitle text-18-bold">
{t('auth.eglgrandlyon.with_account.subtitle1')}
</div>
<FormLogin fluidStatus={fluidStatus} />
<FormLogin />
</div>
)
}
......
import EpglConnectModal from 'components/Connection/PartnerConnectModal/EpglConnectModal'
import { FluidStatus } from 'models'
import { FluidType } from 'enums'
import React, { useCallback, useState } from 'react'
import { useAppDispatch, useAppSelector } from 'store/hooks'
import { openConnectionModal } from 'store/modal/modal.slice'
......@@ -7,10 +7,15 @@ import '../connection.scss'
import EpglBill from './EpglBill'
import EpglForm from './EpglForm'
const EpglInit = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
const EpglInit = () => {
const dispatch = useAppDispatch()
const { isConnectionModalOpen } = useAppSelector(state => state.ecolyo.modal)
const siteLink: string = fluidStatus.connection.konnectorConfig.siteLink
const {
modal: { isConnectionModalOpen },
global: { fluidStatus },
} = useAppSelector(state => state.ecolyo)
const currentFluidStatus = fluidStatus[FluidType.WATER]
const siteLink: string =
currentFluidStatus.connection.konnectorConfig.siteLink
const [showForm, setShowForm] = useState(false)
const [hasCreatedAccount, setHasCreatedAccount] = useState(false)
......@@ -22,12 +27,9 @@ const EpglInit = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
return (
<>
{!showForm ? (
<EpglBill fluidStatus={fluidStatus} />
<EpglBill />
) : (
<EpglForm
fluidStatus={fluidStatus}
hasCreatedAccount={hasCreatedAccount}
/>
<EpglForm hasCreatedAccount={hasCreatedAccount} />
)}
<EpglConnectModal
open={isConnectionModalOpen}
......
......@@ -6,18 +6,22 @@ import StyledIconButton from 'components/CommonKit/IconButton/StyledIconButton'
import useKonnectorAuth from 'components/Hooks/useKonnectorAuth'
import { useI18n } from 'cozy-ui/transpiled/react/I18n'
import { FluidType } from 'enums'
import { Account, AccountAuthData, FluidStatus } from 'models'
import { Account, AccountAuthData } from 'models'
import React, { useEffect, useState } from 'react'
import { useAppSelector } from 'store/hooks'
import { getPartnerPicto } from 'utils/picto'
import './formLogin.scss'
const FormLogin = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
const FormLogin = () => {
const { t } = useI18n()
const konnectorSlug: string = fluidStatus.connection.konnectorConfig.slug
const lastKnownCredentials: string | undefined =
fluidStatus.connection.konnectorConfig.lastKnownCredentials
const fluidName: string = FluidType[fluidStatus.fluidType]
const account: Account | null = fluidStatus.connection.account
const { fluidStatus, lastEpglLogin } = useAppSelector(
state => state.ecolyo.global
)
const currentFluidStatus = fluidStatus[FluidType.WATER]
const konnectorSlug: string =
currentFluidStatus.connection.konnectorConfig.slug
const fluidName: string = FluidType[currentFluidStatus.fluidType]
const account: Account | null = currentFluidStatus.connection.account
const [login, setLogin] = useState<string>('')
const [password, setPassword] = useState<string>('')
......@@ -26,7 +30,7 @@ const FormLogin = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
const icon = getPartnerPicto(konnectorSlug)
const [connect, update, connectError] = useKonnectorAuth(
fluidStatus,
currentFluidStatus.fluidType,
login,
password
)
......@@ -87,11 +91,11 @@ const FormLogin = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
if (authData.login) {
setLogin(authData.login)
}
} else if (lastKnownCredentials) {
setLogin(lastKnownCredentials)
} else if (lastEpglLogin) {
setLogin(lastEpglLogin)
setError(t('konnector_form.error_login_failed'))
}
}, [account, lastKnownCredentials, t])
}, [account, lastEpglLogin, t])
return (
<form
......
......@@ -2,16 +2,18 @@ import Button from '@material-ui/core/Button'
import GasBillIcon from 'assets/icons/visu/onboarding/gas_bill.svg'
import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
import { useI18n } from 'cozy-ui/transpiled/react/I18n'
import { FluidStatus } from 'models'
import { FluidType } from 'enums'
import React from 'react'
import { setShowOfflineData } from 'store/chart/chart.slice'
import { useAppDispatch } from 'store/hooks'
import { useAppDispatch, useAppSelector } from 'store/hooks'
import { openConnectionModal } from 'store/modal/modal.slice'
import '../connection.scss'
const GrdfBill = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
const GrdfBill = () => {
const { t } = useI18n()
const dispatch = useAppDispatch()
const { fluidStatus } = useAppSelector(state => state.ecolyo.global)
const currentFluidStatus = fluidStatus[FluidType.GAS]
return (
<div className="connection-form">
......@@ -35,7 +37,7 @@ const GrdfBill = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
>
{t('auth.grdfgrandlyon.connect')}
</Button>
{fluidStatus.firstDataDate && (
{currentFluidStatus.firstDataDate && (
<Button
classes={{
root: 'btn-secondary',
......
import GrdfConnectModal from 'components/Connection/PartnerConnectModal/GrdfConnectModal'
import { useClient } from 'cozy-client'
import { UsageEventType } from 'enums'
import { FluidConnection, FluidStatus, Konnector, Trigger } from 'models'
import { FluidType, UsageEventType } from 'enums'
import { FluidConnection, Konnector, Trigger } from 'models'
import React, { useCallback, useState } from 'react'
import AccountService from 'services/account.service'
import TriggerService from 'services/triggers.service'
......@@ -13,21 +13,22 @@ import '../connection.scss'
import GrdfBill from './GrdfBill'
import GrdfForm from './GrdfForm'
interface GrdfInitProps {
fluidStatus: FluidStatus
onSuccess: () => Promise<void>
}
const GrdfInit = ({ fluidStatus, onSuccess }: GrdfInitProps) => {
const GrdfInit = ({ onSuccess }: { onSuccess: () => Promise<void> }) => {
const client = useClient()
const dispatch = useAppDispatch()
const { isConnectionModalOpen } = useAppSelector(state => state.ecolyo.modal)
const {
modal: { isConnectionModalOpen },
global: { fluidStatus },
} = useAppSelector(state => state.ecolyo)
const [showForm, setShowForm] = useState(false)
const konnectorSlug: string = fluidStatus.connection.konnectorConfig.slug
const siteLink: string = fluidStatus.connection.konnectorConfig.siteLink
const konnector: Konnector | null = fluidStatus.connection.konnector
const currentFluidStatus = fluidStatus[FluidType.GAS]
const konnectorSlug: string =
currentFluidStatus.connection.konnectorConfig.slug
const siteLink: string =
currentFluidStatus.connection.konnectorConfig.siteLink
const konnector: Konnector | null = currentFluidStatus.connection.konnector
const handleSuccess = useCallback(
async (accountId: string) => {
......@@ -36,13 +37,13 @@ const GrdfInit = ({ fluidStatus, onSuccess }: GrdfInitProps) => {
const account = await accountService.getAccount(accountId)
if (!account) {
const updatedConnection: FluidConnection = {
...fluidStatus.connection,
...currentFluidStatus.connection,
account: null,
trigger: null,
}
dispatch(
updateFluidConnection({
fluidType: fluidStatus.fluidType,
fluidType: currentFluidStatus.fluidType,
fluidConnection: updatedConnection,
})
)
......@@ -58,13 +59,13 @@ const GrdfInit = ({ fluidStatus, onSuccess }: GrdfInitProps) => {
konnector
)
const updatedConnection: FluidConnection = {
...fluidStatus.connection,
...currentFluidStatus.connection,
account: account,
trigger: trigger,
}
dispatch(
updateFluidConnection({
fluidType: fluidStatus.fluidType,
fluidType: currentFluidStatus.fluidType,
fluidConnection: updatedConnection,
})
)
......@@ -76,8 +77,8 @@ const GrdfInit = ({ fluidStatus, onSuccess }: GrdfInitProps) => {
client,
konnector,
dispatch,
fluidStatus.fluidType,
fluidStatus.connection,
currentFluidStatus.fluidType,
currentFluidStatus.connection,
onSuccess,
konnectorSlug,
]
......@@ -89,12 +90,10 @@ const GrdfInit = ({ fluidStatus, onSuccess }: GrdfInitProps) => {
return (
<>
{!showForm ? <GrdfBill fluidStatus={fluidStatus} /> : <GrdfForm />}
{!showForm ? <GrdfBill /> : <GrdfForm />}
<GrdfConnectModal
open={isConnectionModalOpen}
showForm={showForm}
konnector={konnector}
fluidStatus={fluidStatus}
handleCloseClick={() => dispatch(openConnectionModal(false))}
setShowForm={setShowForm}
goToPartnerSite={goToPartnerSite}
......
......@@ -4,9 +4,9 @@ import { useI18n } from 'cozy-ui/transpiled/react/I18n'
import Icon from 'cozy-ui/transpiled/react/Icon'
import React, { useEffect, useState } from 'react'
import './PartnerConnectModal.scss'
import { StepContent } from './StepContent.interface'
import EpglCreateAccount from './Steps/EpglCreateAccount'
import EpglDoYouHaveAccount from './Steps/EpglDoYouHaveAccount'
import { StepContent } from './stepContent.interface'
enum StepEnum {
DoYouHaveAccount,
......
......@@ -3,13 +3,12 @@ import CloseIcon from 'assets/icons/ico/close.svg'
import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
import GrdfFormOAuth from 'components/Connection/PartnerConnectModal/Steps/GrdfFormOAuth'
import { useI18n } from 'cozy-ui/transpiled/react/I18n'
import { FluidStatus, Konnector } from 'models'
import React, { useEffect, useState } from 'react'
import './PartnerConnectModal.scss'
import { StepContent } from './StepContent.interface'
import GrdfCreateAccount from './Steps/GrdfCreateAccount'
import GrdfDoYouHaveAccount from './Steps/GrdfDoYouHaveAccount'
import GrdfGiveConsent from './Steps/GrdfGiveConsent'
import { StepContent } from './stepContent.interface'
enum StepEnum {
DoYouHaveAccount,
......@@ -20,8 +19,6 @@ enum StepEnum {
interface GrdfConnectModalProps {
open: boolean
showForm: boolean
konnector: Konnector | null
fluidStatus: FluidStatus
handleCloseClick: () => void
setShowForm: (value: boolean) => void
goToPartnerSite: () => void
......@@ -31,8 +28,6 @@ interface GrdfConnectModalProps {
const GrdfConnectModal = ({
open,
showForm,
konnector,
fluidStatus,
handleCloseClick,
setShowForm,
goToPartnerSite,
......@@ -40,6 +35,7 @@ const GrdfConnectModal = ({
}: GrdfConnectModalProps) => {
const { t } = useI18n()
const [currentStep, setCurrentStep] = useState(StepEnum.DoYouHaveAccount)
useEffect(() => {
if (open) {
showForm
......@@ -121,13 +117,7 @@ const GrdfConnectModal = ({
{`< ${t('auth.button_previous')}`}
</Button>
),
rightButton: (
<GrdfFormOAuth
konnector={konnector}
onSuccess={handleSuccess}
fluidStatus={fluidStatus}
/>
),
rightButton: <GrdfFormOAuth onSuccess={handleSuccess} />,
},
}
......
......@@ -2,30 +2,28 @@ import Button from '@material-ui/core/Button'
import { useClient } from 'cozy-client'
import { OAuthWindow } from 'cozy-harvest-lib/dist/components/OAuthWindow'
import { useI18n } from 'cozy-ui/transpiled/react/I18n'
import { UsageEventType } from 'enums'
import { FluidStatus, Konnector } from 'models'
import { FluidType, UsageEventType } from 'enums'
import { Konnector } from 'models'
import React, { useCallback, useEffect, useState } from 'react'
import UsageEventService from 'services/usageEvent.service'
import { setShouldRefreshConsent } from 'store/global/global.slice'
import { useAppDispatch, useAppSelector } from 'store/hooks'
interface GrdfFormOAuthProps {
konnector: Konnector | null
onSuccess: (accountId: string) => Promise<void>
fluidStatus: FluidStatus
}
const GrdfFormOAuth = ({
konnector,
onSuccess,
fluidStatus,
}: GrdfFormOAuthProps) => {
}: {
onSuccess: (accountId: string) => Promise<void>
}) => {
const IDLE = 'idle'
const WAITING = 'waiting'
const { t } = useI18n()
const client = useClient()
const { shouldRefreshConsent } = useAppSelector(state => state.ecolyo.global)
const { shouldRefreshConsent, fluidStatus } = useAppSelector(
state => state.ecolyo.global
)
const currentFluidStatus = fluidStatus[FluidType.GAS]
const konnector: Konnector | null = currentFluidStatus.connection.konnector
const dispatch = useAppDispatch()
const [status, setStatus] = useState<string>(IDLE)
const endOAuth = useCallback(() => {
......@@ -36,7 +34,7 @@ const GrdfFormOAuth = ({
const startOAuth = useCallback(async () => {
// If first connexion, send the usage event
if (konnector?.slug && fluidStatus.lastDataDate === null) {
if (konnector?.slug && currentFluidStatus.lastDataDate === null) {
await UsageEventService.addEvent(client, {
type: UsageEventType.KONNECTOR_ATTEMPT_EVENT,
target: konnector.slug,
......@@ -44,7 +42,7 @@ const GrdfFormOAuth = ({
})
}
setStatus(WAITING)
}, [client, fluidStatus.lastDataDate, konnector])
}, [client, currentFluidStatus.lastDataDate, konnector])
const handleAccountId = useCallback(
(accountId: string) => {
......
......@@ -3,10 +3,7 @@ import { mount } from 'enzyme'
import toJson from 'enzyme-to-json'
import React from 'react'
import { Provider } from 'react-redux'
import {
fluidStatusData,
SgeStatusWithAccount,
} from 'tests/__mocks__/fluidStatusData.mock'
import { SgeStatusWithAccount } from 'tests/__mocks__/fluidStatusData.mock'
import { createMockEcolyoStore, mockGlobalState } from 'tests/__mocks__/store'
import { waitForComponentToPaint } from 'tests/__mocks__/testUtils'
import SgeInit from './SgeInit'
......@@ -29,7 +26,7 @@ describe('SgeInit component', () => {
it('should be rendered correctly', () => {
const wrapper = mount(
<Provider store={store}>
<SgeInit fluidStatus={fluidStatusData[0]} />
<SgeInit />
</Provider>
)
expect(toJson(wrapper)).toMatchSnapshot()
......@@ -37,7 +34,7 @@ describe('SgeInit component', () => {
it('should go to sge connect steps', () => {
const wrapper = mount(
<Provider store={store}>
<SgeInit fluidStatus={fluidStatusData[0]} />
<SgeInit />
</Provider>
)
wrapper.find(Button).first().simulate('click')
......@@ -46,6 +43,7 @@ describe('SgeInit component', () => {
it('should launch account and trigger creation process', async () => {
const store = createMockEcolyoStore({
global: {
...mockGlobalState,
sgeConnect: {
...mockGlobalState.sgeConnect,
shouldLaunchAccount: true,
......@@ -55,7 +53,7 @@ describe('SgeInit component', () => {
const wrapper = mount(
<Provider store={store}>
<SgeInit fluidStatus={fluidStatusData[0]} />
<SgeInit />
</Provider>
)
await waitForComponentToPaint(wrapper)
......@@ -64,6 +62,8 @@ describe('SgeInit component', () => {
it('should launch existing account update process', async () => {
const store = createMockEcolyoStore({
global: {
...mockGlobalState,
fluidStatus: [SgeStatusWithAccount],
sgeConnect: {
...mockGlobalState.sgeConnect,
shouldLaunchAccount: true,
......@@ -72,7 +72,7 @@ describe('SgeInit component', () => {
})
const wrapper = mount(
<Provider store={store}>
<SgeInit fluidStatus={SgeStatusWithAccount} />
<SgeInit />
</Provider>
)
await waitForComponentToPaint(wrapper)
......
......@@ -3,7 +3,8 @@ import ElectricityBillIcon from 'assets/icons/visu/onboarding/electricity_bill.s
import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
import useKonnectorAuth from 'components/Hooks/useKonnectorAuth'
import { useI18n } from 'cozy-ui/transpiled/react/I18n'
import { Account, FluidStatus } from 'models'
import { FluidType } from 'enums'
import { Account } from 'models'
import React, { useEffect } from 'react'
import { useNavigate } from 'react-router-dom'
import { setShowOfflineData } from 'store/chart/chart.slice'
......@@ -13,14 +14,17 @@ import {
} from 'store/global/global.slice'
import { useAppDispatch, useAppSelector } from 'store/hooks'
const SgeInit = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
const SgeInit = () => {
const { t } = useI18n()
const navigate = useNavigate()
const konnectorSlug: string = fluidStatus.connection.konnectorConfig.slug
const account: Account | null = fluidStatus.connection.account
const { fluidStatus } = useAppSelector(state => state.ecolyo.global)
const currentFluidStatus = fluidStatus[FluidType.ELECTRICITY]
const konnectorSlug: string =
currentFluidStatus.connection.konnectorConfig.slug
const account: Account | null = currentFluidStatus.connection.account
const { sgeConnect } = useAppSelector(state => state.ecolyo.global)
const dispatch = useAppDispatch()
const [connect, update] = useKonnectorAuth(fluidStatus)
const [connect, update] = useKonnectorAuth(currentFluidStatus.fluidType)
useEffect(() => {
async function launchConnect() {
......@@ -61,7 +65,7 @@ const SgeInit = ({ fluidStatus }: { fluidStatus: FluidStatus }) => {
>
{t(`auth.${konnectorSlug}.connect`)}
</Button>
{fluidStatus.firstDataDate && (
{currentFluidStatus.firstDataDate && (
<Button
classes={{
root: 'btn-secondary',
......
......@@ -13,32 +13,7 @@ exports[`SgeInit component should be rendered correctly 1`] = `
}
}
>
<SgeInit
fluidStatus={
Object {
"connection": Object {
"account": null,
"isUpdating": false,
"konnector": null,
"konnectorConfig": Object {
"activation": "",
"name": "",
"oauth": false,
"siteLink": "",
"slug": "enedissgegrandlyon",
},
"shouldLaunchKonnector": false,
"trigger": null,
"triggerState": null,
},
"firstDataDate": "2019-09-01T00:00:00.000Z",
"fluidType": 0,
"lastDataDate": "2020-09-01T00:00:00.000Z",
"maintenance": false,
"status": 0,
}
}
>
<SgeInit>
<div
className="connection-form"
>
......@@ -220,132 +195,6 @@ exports[`SgeInit component should be rendered correctly 1`] = `
</WithStyles(ForwardRef(ButtonBase))>
</ForwardRef(Button)>
</WithStyles(ForwardRef(Button))>
<WithStyles(ForwardRef(Button))
classes={
Object {
"label": "text-16-bold",
"root": "btn-secondary",
}
}
onClick={[Function]}
>
<ForwardRef(Button)
classes={
Object {
"colorInherit": "MuiButton-colorInherit",
"contained": "MuiButton-contained",
"containedPrimary": "MuiButton-containedPrimary",
"containedSecondary": "MuiButton-containedSecondary",
"containedSizeLarge": "MuiButton-containedSizeLarge",
"containedSizeSmall": "MuiButton-containedSizeSmall",
"disableElevation": "MuiButton-disableElevation",
"disabled": "Mui-disabled",
"endIcon": "MuiButton-endIcon",
"focusVisible": "Mui-focusVisible",
"fullWidth": "MuiButton-fullWidth",
"iconSizeLarge": "MuiButton-iconSizeLarge",
"iconSizeMedium": "MuiButton-iconSizeMedium",
"iconSizeSmall": "MuiButton-iconSizeSmall",
"label": "MuiButton-label text-16-bold",
"outlined": "MuiButton-outlined",
"outlinedPrimary": "MuiButton-outlinedPrimary",
"outlinedSecondary": "MuiButton-outlinedSecondary",
"outlinedSizeLarge": "MuiButton-outlinedSizeLarge",
"outlinedSizeSmall": "MuiButton-outlinedSizeSmall",
"root": "MuiButton-root btn-secondary",
"sizeLarge": "MuiButton-sizeLarge",
"sizeSmall": "MuiButton-sizeSmall",
"startIcon": "MuiButton-startIcon",
"text": "MuiButton-text",
"textPrimary": "MuiButton-textPrimary",
"textSecondary": "MuiButton-textSecondary",
"textSizeLarge": "MuiButton-textSizeLarge",
"textSizeSmall": "MuiButton-textSizeSmall",
}
}
onClick={[Function]}
>
<WithStyles(ForwardRef(ButtonBase))
className="MuiButton-root btn-secondary MuiButton-text"
component="button"
disabled={false}
focusRipple={true}
focusVisibleClassName="Mui-focusVisible"
onClick={[Function]}
type="button"
>
<ForwardRef(ButtonBase)
className="MuiButton-root btn-secondary MuiButton-text"
classes={
Object {
"disabled": "Mui-disabled",
"focusVisible": "Mui-focusVisible",
"root": "MuiButtonBase-root",
}
}
component="button"
disabled={false}
focusRipple={true}
focusVisibleClassName="Mui-focusVisible"
onClick={[Function]}
type="button"
>
<button
className="MuiButtonBase-root MuiButton-root btn-secondary MuiButton-text"
disabled={false}
onBlur={[Function]}
onClick={[Function]}
onDragLeave={[Function]}
onFocus={[Function]}
onKeyDown={[Function]}
onKeyUp={[Function]}
onMouseDown={[Function]}
onMouseLeave={[Function]}
onMouseUp={[Function]}
onTouchEnd={[Function]}
onTouchMove={[Function]}
onTouchStart={[Function]}
tabIndex={0}
type="button"
>
<span
className="MuiButton-label text-16-bold"
>
auth.button_showOfflineData
</span>
<WithStyles(memo)
center={false}
>
<ForwardRef(TouchRipple)
center={false}
classes={
Object {
"child": "MuiTouchRipple-child",
"childLeaving": "MuiTouchRipple-childLeaving",
"childPulsate": "MuiTouchRipple-childPulsate",
"ripple": "MuiTouchRipple-ripple",
"ripplePulsate": "MuiTouchRipple-ripplePulsate",
"rippleVisible": "MuiTouchRipple-rippleVisible",
"root": "MuiTouchRipple-root",
}
}
>
<span
className="MuiTouchRipple-root"
>
<TransitionGroup
childFactory={[Function]}
component={null}
exit={true}
/>
</span>
</ForwardRef(TouchRipple)>
</WithStyles(memo)>
</button>
</ForwardRef(ButtonBase)>
</WithStyles(ForwardRef(ButtonBase))>
</ForwardRef(Button)>
</WithStyles(ForwardRef(Button))>
</div>
</div>
</SgeInit>
......
......@@ -14,392 +14,12 @@ exports[`Connection component test should call EpglInit 1`] = `
}
>
<Connection
fluidStatus={
Object {
"connection": Object {
"account": Object {
"_id": "test",
"account_type": "test",
"auth": Object {
"address": "address",
"city": "Lyon",
"firstname": "Jane",
"lastname": "Doe",
"pointId": "testid",
"postalCode": "69200",
},
},
"isUpdating": false,
"konnector": null,
"konnectorConfig": Object {
"activation": "",
"name": "",
"oauth": false,
"siteLink": "",
"slug": "enedissgegrandlyon",
},
"shouldLaunchKonnector": false,
"trigger": null,
"triggerState": null,
},
"firstDataDate": "2019-09-01T00:00:00.000Z",
"fluidType": 0,
"lastDataDate": "2020-09-01T00:00:00.000Z",
"maintenance": false,
"status": 200,
}
}
fluidType={1}
>
<div
className="konnector-form"
>
<SgeInit
fluidStatus={
Object {
"connection": Object {
"account": Object {
"_id": "test",
"account_type": "test",
"auth": Object {
"address": "address",
"city": "Lyon",
"firstname": "Jane",
"lastname": "Doe",
"pointId": "testid",
"postalCode": "69200",
},
},
"isUpdating": false,
"konnector": null,
"konnectorConfig": Object {
"activation": "",
"name": "",
"oauth": false,
"siteLink": "",
"slug": "enedissgegrandlyon",
},
"shouldLaunchKonnector": false,
"trigger": null,
"triggerState": null,
},
"firstDataDate": "2019-09-01T00:00:00.000Z",
"fluidType": 0,
"lastDataDate": "2020-09-01T00:00:00.000Z",
"maintenance": false,
"status": 200,
}
}
>
<div
className="connection-form"
>
<p
className="connection-form-title enedissgegrandlyon text-20-bold"
>
auth.enedissgegrandlyon.title
</p>
<StyledIcon
icon="test-file-stub"
size={180}
>
<Icon
aria-hidden={true}
icon="test-file-stub"
size={180}
spin={false}
>
<Component
aria-hidden={true}
className="styles__icon___23x3R"
height={180}
style={Object {}}
width={180}
>
<svg
aria-hidden={true}
className="styles__icon___23x3R"
height={180}
style={Object {}}
width={180}
>
<use
xlinkHref="#test-file-stub"
/>
</svg>
</Component>
</Icon>
</StyledIcon>
<p
className="connection-form-subtitle enedissgegrandlyon text-16-regular"
dangerouslySetInnerHTML={
Object {
"__html": "auth.enedissgegrandlyon.bill",
}
}
/>
<div
className="connection-form-button"
>
<WithStyles(ForwardRef(Button))
aria-label="auth.enedissgegrandlyon.accessibility.connect"
classes={
Object {
"label": "text-16-bold",
"root": "btn-highlight",
}
}
onClick={[Function]}
>
<ForwardRef(Button)
aria-label="auth.enedissgegrandlyon.accessibility.connect"
classes={
Object {
"colorInherit": "MuiButton-colorInherit",
"contained": "MuiButton-contained",
"containedPrimary": "MuiButton-containedPrimary",
"containedSecondary": "MuiButton-containedSecondary",
"containedSizeLarge": "MuiButton-containedSizeLarge",
"containedSizeSmall": "MuiButton-containedSizeSmall",
"disableElevation": "MuiButton-disableElevation",
"disabled": "Mui-disabled",
"endIcon": "MuiButton-endIcon",
"focusVisible": "Mui-focusVisible",
"fullWidth": "MuiButton-fullWidth",
"iconSizeLarge": "MuiButton-iconSizeLarge",
"iconSizeMedium": "MuiButton-iconSizeMedium",
"iconSizeSmall": "MuiButton-iconSizeSmall",
"label": "MuiButton-label text-16-bold",
"outlined": "MuiButton-outlined",
"outlinedPrimary": "MuiButton-outlinedPrimary",
"outlinedSecondary": "MuiButton-outlinedSecondary",
"outlinedSizeLarge": "MuiButton-outlinedSizeLarge",
"outlinedSizeSmall": "MuiButton-outlinedSizeSmall",
"root": "MuiButton-root btn-highlight",
"sizeLarge": "MuiButton-sizeLarge",
"sizeSmall": "MuiButton-sizeSmall",
"startIcon": "MuiButton-startIcon",
"text": "MuiButton-text",
"textPrimary": "MuiButton-textPrimary",
"textSecondary": "MuiButton-textSecondary",
"textSizeLarge": "MuiButton-textSizeLarge",
"textSizeSmall": "MuiButton-textSizeSmall",
}
}
onClick={[Function]}
>
<WithStyles(ForwardRef(ButtonBase))
aria-label="auth.enedissgegrandlyon.accessibility.connect"
className="MuiButton-root btn-highlight MuiButton-text"
component="button"
disabled={false}
focusRipple={true}
focusVisibleClassName="Mui-focusVisible"
onClick={[Function]}
type="button"
>
<ForwardRef(ButtonBase)
aria-label="auth.enedissgegrandlyon.accessibility.connect"
className="MuiButton-root btn-highlight MuiButton-text"
classes={
Object {
"disabled": "Mui-disabled",
"focusVisible": "Mui-focusVisible",
"root": "MuiButtonBase-root",
}
}
component="button"
disabled={false}
focusRipple={true}
focusVisibleClassName="Mui-focusVisible"
onClick={[Function]}
type="button"
>
<button
aria-label="auth.enedissgegrandlyon.accessibility.connect"
className="MuiButtonBase-root MuiButton-root btn-highlight MuiButton-text"
disabled={false}
onBlur={[Function]}
onClick={[Function]}
onDragLeave={[Function]}
onFocus={[Function]}
onKeyDown={[Function]}
onKeyUp={[Function]}
onMouseDown={[Function]}
onMouseLeave={[Function]}
onMouseUp={[Function]}
onTouchEnd={[Function]}
onTouchMove={[Function]}
onTouchStart={[Function]}
tabIndex={0}
type="button"
>
<span
className="MuiButton-label text-16-bold"
>
auth.enedissgegrandlyon.connect
</span>
<WithStyles(memo)
center={false}
>
<ForwardRef(TouchRipple)
center={false}
classes={
Object {
"child": "MuiTouchRipple-child",
"childLeaving": "MuiTouchRipple-childLeaving",
"childPulsate": "MuiTouchRipple-childPulsate",
"ripple": "MuiTouchRipple-ripple",
"ripplePulsate": "MuiTouchRipple-ripplePulsate",
"rippleVisible": "MuiTouchRipple-rippleVisible",
"root": "MuiTouchRipple-root",
}
}
>
<span
className="MuiTouchRipple-root"
>
<TransitionGroup
childFactory={[Function]}
component={null}
exit={true}
/>
</span>
</ForwardRef(TouchRipple)>
</WithStyles(memo)>
</button>
</ForwardRef(ButtonBase)>
</WithStyles(ForwardRef(ButtonBase))>
</ForwardRef(Button)>
</WithStyles(ForwardRef(Button))>
<WithStyles(ForwardRef(Button))
classes={
Object {
"label": "text-16-bold",
"root": "btn-secondary",
}
}
onClick={[Function]}
>
<ForwardRef(Button)
classes={
Object {
"colorInherit": "MuiButton-colorInherit",
"contained": "MuiButton-contained",
"containedPrimary": "MuiButton-containedPrimary",
"containedSecondary": "MuiButton-containedSecondary",
"containedSizeLarge": "MuiButton-containedSizeLarge",
"containedSizeSmall": "MuiButton-containedSizeSmall",
"disableElevation": "MuiButton-disableElevation",
"disabled": "Mui-disabled",
"endIcon": "MuiButton-endIcon",
"focusVisible": "Mui-focusVisible",
"fullWidth": "MuiButton-fullWidth",
"iconSizeLarge": "MuiButton-iconSizeLarge",
"iconSizeMedium": "MuiButton-iconSizeMedium",
"iconSizeSmall": "MuiButton-iconSizeSmall",
"label": "MuiButton-label text-16-bold",
"outlined": "MuiButton-outlined",
"outlinedPrimary": "MuiButton-outlinedPrimary",
"outlinedSecondary": "MuiButton-outlinedSecondary",
"outlinedSizeLarge": "MuiButton-outlinedSizeLarge",
"outlinedSizeSmall": "MuiButton-outlinedSizeSmall",
"root": "MuiButton-root btn-secondary",
"sizeLarge": "MuiButton-sizeLarge",
"sizeSmall": "MuiButton-sizeSmall",
"startIcon": "MuiButton-startIcon",
"text": "MuiButton-text",
"textPrimary": "MuiButton-textPrimary",
"textSecondary": "MuiButton-textSecondary",
"textSizeLarge": "MuiButton-textSizeLarge",
"textSizeSmall": "MuiButton-textSizeSmall",
}
}
onClick={[Function]}
>
<WithStyles(ForwardRef(ButtonBase))
className="MuiButton-root btn-secondary MuiButton-text"
component="button"
disabled={false}
focusRipple={true}
focusVisibleClassName="Mui-focusVisible"
onClick={[Function]}
type="button"
>
<ForwardRef(ButtonBase)
className="MuiButton-root btn-secondary MuiButton-text"
classes={
Object {
"disabled": "Mui-disabled",
"focusVisible": "Mui-focusVisible",
"root": "MuiButtonBase-root",
}
}
component="button"
disabled={false}
focusRipple={true}
focusVisibleClassName="Mui-focusVisible"
onClick={[Function]}
type="button"
>
<button
className="MuiButtonBase-root MuiButton-root btn-secondary MuiButton-text"
disabled={false}
onBlur={[Function]}
onClick={[Function]}
onDragLeave={[Function]}
onFocus={[Function]}
onKeyDown={[Function]}
onKeyUp={[Function]}
onMouseDown={[Function]}
onMouseLeave={[Function]}
onMouseUp={[Function]}
onTouchEnd={[Function]}
onTouchMove={[Function]}
onTouchStart={[Function]}
tabIndex={0}
type="button"
>
<span
className="MuiButton-label text-16-bold"
>
auth.button_showOfflineData
</span>
<WithStyles(memo)
center={false}
>
<ForwardRef(TouchRipple)
center={false}
classes={
Object {
"child": "MuiTouchRipple-child",
"childLeaving": "MuiTouchRipple-childLeaving",
"childPulsate": "MuiTouchRipple-childPulsate",
"ripple": "MuiTouchRipple-ripple",
"ripplePulsate": "MuiTouchRipple-ripplePulsate",
"rippleVisible": "MuiTouchRipple-rippleVisible",
"root": "MuiTouchRipple-root",
}
}
>
<span
className="MuiTouchRipple-root"
>
<TransitionGroup
childFactory={[Function]}
component={null}
exit={true}
/>
</span>
</ForwardRef(TouchRipple)>
</WithStyles(memo)>
</button>
</ForwardRef(ButtonBase)>
</WithStyles(ForwardRef(ButtonBase))>
</ForwardRef(Button)>
</WithStyles(ForwardRef(Button))>
</div>
</div>
</SgeInit>
<mock-EpglInit />
</div>
</Connection>
</Provider>
......@@ -419,59 +39,12 @@ exports[`Connection component test should call GrdfInit 1`] = `
}
>
<Connection
fluidStatus={
Object {
"connection": Object {
"account": null,
"isUpdating": false,
"konnector": null,
"konnectorConfig": Object {
"activation": "",
"name": "",
"oauth": true,
"siteLink": "",
"slug": "grdfgrandlyon",
},
"shouldLaunchKonnector": false,
"trigger": null,
"triggerState": null,
},
"firstDataDate": "2019-09-01T00:00:00.000Z",
"fluidType": 2,
"lastDataDate": "2020-09-01T00:00:00.000Z",
"maintenance": false,
"status": 200,
}
}
fluidType={2}
>
<div
className="konnector-form"
>
<mock-GrdfInit
fluidStatus={
Object {
"connection": Object {
"account": null,
"isUpdating": false,
"konnector": null,
"konnectorConfig": Object {
"activation": "",
"name": "",
"oauth": true,
"siteLink": "",
"slug": "grdfgrandlyon",
},
"shouldLaunchKonnector": false,
"trigger": null,
"triggerState": null,
},
"firstDataDate": "2019-09-01T00:00:00.000Z",
"fluidType": 2,
"lastDataDate": "2020-09-01T00:00:00.000Z",
"maintenance": false,
"status": 200,
}
}
onSuccess={[Function]}
/>
</div>
......
......@@ -262,9 +262,7 @@ const ConsumptionView = ({ fluidType }: { fluidType: FluidType }) => {
{!isMulti && (
<div className="konnector-section">
<KonnectorViewerCard
fluidStatus={fluidStatus[fluidType]}
fluidType={fluidType}
isParam={true}
isDisconnected={false}
showOfflineData={true}
setActive={setActive}
......@@ -281,9 +279,7 @@ const ConsumptionView = ({ fluidType }: { fluidType: FluidType }) => {
<KonnectorViewerList />
) : (
<KonnectorViewerCard
fluidStatus={fluidStatus[fluidType]}
fluidType={fluidType}
isParam={false}
isDisconnected={true}
showOfflineData={false}
setActive={setActive}
......@@ -300,7 +296,7 @@ const ConsumptionView = ({ fluidType }: { fluidType: FluidType }) => {
.map(issuedFluid => (
<PartnerIssueModal
key={issuedFluid.fluidType}
issuedFluid={issuedFluid}
issuedFluid={issuedFluid.fluidType}
open={partnersIssueModal[getPartnerKey(issuedFluid.fluidType)]}
handleCloseClick={handleClosePartnerIssueModal}
/>
......
......@@ -47,7 +47,7 @@ describe('InfoDataConsumptionVisualizer component', () => {
</Provider>
)
expect(wrapper.find('span').text()).toBe(
'consumption_visualizer.last_available_data : 01/10/20'
'consumption_visualizer.last_available_data'
)
})
it('case state UPCOMING', () => {
......@@ -62,7 +62,7 @@ describe('InfoDataConsumptionVisualizer component', () => {
</Provider>
)
expect(wrapper.find('span').text()).toBe(
'consumption_visualizer.last_available_data : 01/10/20'
'consumption_visualizer.last_available_data'
)
})
it('case state COMING', () => {
......@@ -80,7 +80,7 @@ describe('InfoDataConsumptionVisualizer component', () => {
</Provider>
)
expect(wrapper.find('span').text()).toBe(
'consumption_visualizer.last_available_data : 01/10/20'
'consumption_visualizer.last_available_data'
)
})
it('case state AGGREGATED_HOLE_OR_MISSING', () => {
......@@ -98,7 +98,7 @@ describe('InfoDataConsumptionVisualizer component', () => {
</Provider>
)
expect(wrapper.find('span').text()).toBe(
'consumption_visualizer.last_valid_data_multi : 01/10/20'
'consumption_visualizer.last_valid_data_multi'
)
})
it('case state AGGREGATED_WITH_HOLE_OR_MISSING', () => {
......@@ -116,7 +116,7 @@ describe('InfoDataConsumptionVisualizer component', () => {
</Provider>
)
expect(wrapper.find('span').text()).toBe(
'consumption_visualizer.last_valid_data_multi : 01/10/20'
'consumption_visualizer.last_valid_data_multi'
)
})
it('case state AGGREGATED_COMING', () => {
......@@ -134,7 +134,7 @@ describe('InfoDataConsumptionVisualizer component', () => {
</Provider>
)
expect(wrapper.find('span').text()).toBe(
'consumption_visualizer.last_valid_data_multi : 01/10/20'
'consumption_visualizer.last_valid_data_multi'
)
})
})
......