diff --git a/package.json b/package.json index 57d8c5138ed..e32da2b4f10 100644 --- a/package.json +++ b/package.json @@ -23,10 +23,7 @@ "pagopa_api_walletv2": "https://raw.githubusercontent.com/pagopa/io-services-metadata/1.0.24/bonus/specs/bpd/pm/walletv2.json", "pagopa_cobadge_configuration": "https://raw.githubusercontent.com/pagopa/io-services-metadata/1.0.24/pagopa/cobadge/abi_definitions.yml", "pagopa_privative_configuration": "https://raw.githubusercontent.com/pagopa/io-services-metadata/1.0.24/pagopa/privative/definitions.yml", - "idpay_onboarding": "https://raw.githubusercontent.com/pagopa/cstar-infrastructure/v2.12.1/src/domains/idpay-app/api/idpay_onboarding_workflow/openapi.onboarding.yml", - "idpay_wallet": "https://raw.githubusercontent.com/pagopa/cstar-infrastructure/v2.17.0/src/domains/idpay-app/api/idpay_wallet/openapi.wallet.yml", - "idpay_timeline": "https://raw.githubusercontent.com/pagopa/cstar-infrastructure/v2.24.1/src/domains/idpay-app/api/idpay_timeline/openapi.timeline.yml", - "idpay_iban": "https://raw.githubusercontent.com/pagopa/cstar-infrastructure/v1.101.0/src/domains/idpay-app/api/idpay_iban/openapi.iban.yml", + "idpay_api": "https://raw.githubusercontent.com/pagopa/cstar-infrastructure/v2.30.0/src/domains/idpay-app/api/idpay_appio_full/openapi.appio.full.yml", "private": true, "scripts": { "start": "react-native start", @@ -88,10 +85,8 @@ "generate:cdc": "npm-run-all generate:cdc-api", "generate:pn": "npm-run-all generate:pn-definitions", "generate:fci": "npm-run-all generate:fci-api", - "generate:idpay-onboarding": "rimraf definitions/idpay/onboarding && mkdir -p definitions/idpay/onboarding && gen-api-models --api-spec $npm_package_idpay_onboarding --out-dir ./definitions/idpay/onboarding --no-strict --response-decoders --request-types --client", - "generate:idpay-wallet": "rimraf definitions/idpay/wallet && mkdir -p definitions/idpay/wallet && gen-api-models --api-spec $npm_package_idpay_wallet --out-dir ./definitions/idpay/wallet --no-strict --response-decoders --request-types --client", - "generate:idpay-timeline": "rimraf definitions/idpay/timeline && mkdir -p definitions/idpay/timeline && gen-api-models --api-spec $npm_package_idpay_timeline --out-dir ./definitions/idpay/timeline --no-strict --response-decoders --request-types --client", - "generate:idpay-iban": "rimraf definitions/idpay/iban && mkdir -p definitions/idpay/iban && gen-api-models --api-spec $npm_package_idpay_iban --out-dir ./definitions/idpay/iban --no-strict --response-decoders --request-types --client", + "generate:idpay-api": "rimraf definitions/idpay && mkdir -p definitions/idpay && gen-api-models --api-spec $npm_package_idpay_api --out-dir ./definitions/idpay --no-strict --response-decoders --request-types --client", + "generate:idpay": "npm-run-all generate:idpay-api", "generate": "npm-run-all generate:*", "locales_unused": "ts-node --skip-project -O '{\"lib\":[\"es2015\"]}' scripts/unused-locales.ts", "generate-myportal-readme": "jsdoc2md ts/utils/webviewScripts/*.js > MYPORTAL_README.md", diff --git a/ts/features/design-system/core/DSListItems.tsx b/ts/features/design-system/core/DSListItems.tsx index 6884b2caa30..ea8da0dcef6 100644 --- a/ts/features/design-system/core/DSListItems.tsx +++ b/ts/features/design-system/core/DSListItems.tsx @@ -22,7 +22,7 @@ import { ProductCategoryEnum } from "../../../../definitions/cgn/merchants/Produ import CgnMerchantListItem from "../../bonus/cgn/components/merchants/CgnMerchantListItem"; import DetailedlistItemComponent from "../../../components/DetailedlistItemComponent"; import { TimelineOperationListItem } from "../../idpay/initiative/details/components/TimelineOperationListItem"; -import { OperationTypeEnum } from "../../../../definitions/idpay/timeline/TransactionOperationDTO"; +import { OperationTypeEnum } from "../../../../definitions/idpay/TransactionOperationDTO"; import { DesignSystemScreen } from "../components/DesignSystemScreen"; import { VSpacer } from "../../../components/core/spacer/Spacer"; diff --git a/ts/features/idpay/common/api/__mocks__/client.ts b/ts/features/idpay/common/api/__mocks__/client.ts new file mode 100644 index 00000000000..c16be4127cb --- /dev/null +++ b/ts/features/idpay/common/api/__mocks__/client.ts @@ -0,0 +1,20 @@ +export const mockIDPayClient = { + getInitiativeData: jest.fn(), + checkPrerequisites: jest.fn(), + consentOnboarding: jest.fn(), + onboardingCitizen: jest.fn(), + onboardingStatus: jest.fn(), + deleteInstrument: jest.fn(), + enrollIban: jest.fn(), + enrollInstrument: jest.fn(), + getIban: jest.fn(), + getIbanList: jest.fn(), + getInstrumentList: jest.fn(), + getTimeline: jest.fn(), + getTimelineDetail: jest.fn(), + getWallet: jest.fn(), + getWalletDetail: jest.fn(), + getWalletStatus: jest.fn(), + unsubscribe: jest.fn(), + getInitiativesWithInstrument: jest.fn() +}; diff --git a/ts/features/idpay/common/api/client.ts b/ts/features/idpay/common/api/client.ts new file mode 100644 index 00000000000..68bd39f0dbf --- /dev/null +++ b/ts/features/idpay/common/api/client.ts @@ -0,0 +1,12 @@ +import { createClient } from "../../../../../definitions/idpay/client"; +import { defaultRetryingFetch } from "../../../../utils/fetch"; + +const createIDPayClient = (baseUrl: string) => + createClient({ + baseUrl, + fetchApi: defaultRetryingFetch() + }); + +export type IDPayClient = ReturnType; + +export { createIDPayClient }; diff --git a/ts/features/idpay/common/labels.ts b/ts/features/idpay/common/labels.ts index 9a11d46791d..c9d0a2487ce 100644 --- a/ts/features/idpay/common/labels.ts +++ b/ts/features/idpay/common/labels.ts @@ -1,4 +1,4 @@ -import { StatusEnum } from "../../../../definitions/idpay/wallet/InstrumentDTO"; +import { StatusEnum } from "../../../../definitions/idpay/InstrumentDTO"; import I18n from "../../../i18n"; type InstrumentStatusLabels = { diff --git a/ts/features/idpay/common/saga/index.ts b/ts/features/idpay/common/saga/index.ts new file mode 100644 index 00000000000..123113acc15 --- /dev/null +++ b/ts/features/idpay/common/saga/index.ts @@ -0,0 +1,43 @@ +import { pipe } from "fp-ts/lib/function"; +import * as O from "fp-ts/lib/Option"; +import { SagaIterator } from "redux-saga"; +import { fork, select } from "typed-redux-saga/macro"; +import { PreferredLanguageEnum } from "../../../../../definitions/backend/PreferredLanguage"; +import { + idPayApiBaseUrl, + idPayApiUatBaseUrl, + idPayTestToken +} from "../../../../config"; +import { + isPagoPATestEnabledSelector, + preferredLanguageSelector +} from "../../../../store/reducers/persistedPreferences"; +import { fromLocaleToPreferredLanguage } from "../../../../utils/locale"; +import { watchIDPayInitiativeDetailsSaga } from "../../initiative/details/saga"; +import { watchIDPayWalletSaga } from "../../wallet/saga"; +import { createIDPayClient } from "../api/client"; + +export function* watchIDPaySaga(bpdToken: string): SagaIterator { + const isPagoPATestEnabled = yield* select(isPagoPATestEnabledSelector); + + const baseUrl = isPagoPATestEnabled ? idPayApiUatBaseUrl : idPayApiBaseUrl; + const token = idPayTestToken ?? bpdToken; + + const language = yield* select(preferredLanguageSelector); + + const preferredLanguage = pipe( + language, + O.map(fromLocaleToPreferredLanguage), + O.getOrElse(() => PreferredLanguageEnum.it_IT) + ); + + const client = createIDPayClient(baseUrl); + + yield* fork(watchIDPayWalletSaga, client, token, preferredLanguage); + yield* fork( + watchIDPayInitiativeDetailsSaga, + client, + token, + preferredLanguage + ); +} diff --git a/ts/features/idpay/initiative/configuration/components/InstrumentEnrollmentSwitch.tsx b/ts/features/idpay/initiative/configuration/components/InstrumentEnrollmentSwitch.tsx index 810b252def3..c7efe4246a5 100644 --- a/ts/features/idpay/initiative/configuration/components/InstrumentEnrollmentSwitch.tsx +++ b/ts/features/idpay/initiative/configuration/components/InstrumentEnrollmentSwitch.tsx @@ -8,7 +8,7 @@ import { Image, StyleSheet, View } from "react-native"; import { InstrumentDTO, StatusEnum as InstrumentStatusEnum -} from "../../../../../../definitions/idpay/wallet/InstrumentDTO"; +} from "../../../../../../definitions/idpay/InstrumentDTO"; import defaultCardIcon from "../../../../../../img/wallet/cards-icons/unknown.png"; import { IOLogoPaymentType, diff --git a/ts/features/idpay/initiative/configuration/iban/api/client.ts b/ts/features/idpay/initiative/configuration/iban/api/client.ts deleted file mode 100644 index 4a5c526d582..00000000000 --- a/ts/features/idpay/initiative/configuration/iban/api/client.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createClient } from "../../../../../../../definitions/idpay/iban/client"; -import { defaultRetryingFetch } from "../../../../../../utils/fetch"; - -const createIDPayIbanClient = (baseUrl: string) => - createClient({ - baseUrl, - fetchApi: defaultRetryingFetch() - }); - -export type IDPayIbanClient = ReturnType; - -export { createIDPayIbanClient }; diff --git a/ts/features/idpay/initiative/configuration/navigation/navigator.tsx b/ts/features/idpay/initiative/configuration/navigation/navigator.tsx index 78f53378ea7..a2ac1c90bdf 100644 --- a/ts/features/idpay/initiative/configuration/navigation/navigator.tsx +++ b/ts/features/idpay/initiative/configuration/navigation/navigator.tsx @@ -2,13 +2,13 @@ import { createStackNavigator } from "@react-navigation/stack"; import React from "react"; import IbanEnrollmentScreen, { IbanEnrollmentScreenRouteParams -} from "../iban/screens/IbanEnrollmentScreen"; +} from "../screens/IbanEnrollmentScreen"; import InitiativeConfigurationIntroScreen, { InitiativeConfigurationIntroScreenRouteParams } from "../screens/InitiativeConfigurationIntroScreen"; import ConfigurationSuccessScreen from "../screens/ConfigurationSuccessScreen"; -import IbanConfigurationLanding from "../iban/screens/IbanConfigurationLandingScreen"; -import IbanOnboardingScreen from "../iban/screens/IbanOnboardingScreen"; +import IbanConfigurationLanding from "../screens/IbanConfigurationLandingScreen"; +import IbanOnboardingScreen from "../screens/IbanOnboardingScreen"; import InstrumentsEnrollmentScreen, { InstrumentsEnrollmentScreenRouteParams } from "../screens/InstrumentsEnrollmentScreen"; diff --git a/ts/features/idpay/initiative/configuration/iban/screens/IbanConfigurationLandingScreen.tsx b/ts/features/idpay/initiative/configuration/screens/IbanConfigurationLandingScreen.tsx similarity index 72% rename from ts/features/idpay/initiative/configuration/iban/screens/IbanConfigurationLandingScreen.tsx rename to ts/features/idpay/initiative/configuration/screens/IbanConfigurationLandingScreen.tsx index d67a1456fd7..4e4e54072ab 100644 --- a/ts/features/idpay/initiative/configuration/iban/screens/IbanConfigurationLandingScreen.tsx +++ b/ts/features/idpay/initiative/configuration/screens/IbanConfigurationLandingScreen.tsx @@ -1,15 +1,15 @@ import React from "react"; import { View, SafeAreaView, StyleSheet } from "react-native"; -import { VSpacer } from "../../../../../../components/core/spacer/Spacer"; -import { Body } from "../../../../../../components/core/typography/Body"; -import { H3 } from "../../../../../../components/core/typography/H3"; -import { IOColors } from "../../../../../../components/core/variables/IOColors"; -import { IOStyles } from "../../../../../../components/core/variables/IOStyles"; -import BaseScreenComponent from "../../../../../../components/screens/BaseScreenComponent"; -import FooterWithButtons from "../../../../../../components/ui/FooterWithButtons"; -import I18n from "../../../../../../i18n"; -import { emptyContextualHelp } from "../../../../../../utils/emptyContextualHelp"; -import { useConfigurationMachineService } from "../../xstate/provider"; +import { VSpacer } from "../../../../../components/core/spacer/Spacer"; +import { Body } from "../../../../../components/core/typography/Body"; +import { H3 } from "../../../../../components/core/typography/H3"; +import { IOColors } from "../../../../../components/core/variables/IOColors"; +import { IOStyles } from "../../../../../components/core/variables/IOStyles"; +import BaseScreenComponent from "../../../../../components/screens/BaseScreenComponent"; +import FooterWithButtons from "../../../../../components/ui/FooterWithButtons"; +import I18n from "../../../../../i18n"; +import { emptyContextualHelp } from "../../../../../utils/emptyContextualHelp"; +import { useConfigurationMachineService } from "../xstate/provider"; const styles = StyleSheet.create({ greyCircle: { diff --git a/ts/features/idpay/initiative/configuration/iban/screens/IbanEnrollmentScreen.tsx b/ts/features/idpay/initiative/configuration/screens/IbanEnrollmentScreen.tsx similarity index 81% rename from ts/features/idpay/initiative/configuration/iban/screens/IbanEnrollmentScreen.tsx rename to ts/features/idpay/initiative/configuration/screens/IbanEnrollmentScreen.tsx index 16c7b5fd2b1..4464c558141 100644 --- a/ts/features/idpay/initiative/configuration/iban/screens/IbanEnrollmentScreen.tsx +++ b/ts/features/idpay/initiative/configuration/screens/IbanEnrollmentScreen.tsx @@ -2,32 +2,29 @@ import { RouteProp, useRoute } from "@react-navigation/native"; import { useSelector } from "@xstate/react"; import React from "react"; import { View, SafeAreaView, ScrollView, StyleSheet } from "react-native"; -import { IbanDTO } from "../../../../../../../definitions/idpay/iban/IbanDTO"; -import { Icon } from "../../../../../../components/core/icons"; -import { - HSpacer, - VSpacer -} from "../../../../../../components/core/spacer/Spacer"; -import { Body } from "../../../../../../components/core/typography/Body"; -import { H1 } from "../../../../../../components/core/typography/H1"; -import { IOStyles } from "../../../../../../components/core/variables/IOStyles"; -import LoadingSpinnerOverlay from "../../../../../../components/LoadingSpinnerOverlay"; -import BaseScreenComponent from "../../../../../../components/screens/BaseScreenComponent"; -import ListItemComponent from "../../../../../../components/screens/ListItemComponent"; -import FooterWithButtons from "../../../../../../components/ui/FooterWithButtons"; -import I18n from "../../../../../../i18n"; -import { emptyContextualHelp } from "../../../../../../utils/emptyContextualHelp"; -import { IDPayConfigurationParamsList } from "../../navigation/navigator"; -import { ConfigurationMode } from "../../xstate/context"; -import { useConfigurationMachineService } from "../../xstate/provider"; +import { IbanDTO } from "../../../../../../definitions/idpay/IbanDTO"; +import { Icon } from "../../../../../components/core/icons"; +import { HSpacer, VSpacer } from "../../../../../components/core/spacer/Spacer"; +import { Body } from "../../../../../components/core/typography/Body"; +import { H1 } from "../../../../../components/core/typography/H1"; +import { IOStyles } from "../../../../../components/core/variables/IOStyles"; +import LoadingSpinnerOverlay from "../../../../../components/LoadingSpinnerOverlay"; +import BaseScreenComponent from "../../../../../components/screens/BaseScreenComponent"; +import ListItemComponent from "../../../../../components/screens/ListItemComponent"; +import FooterWithButtons from "../../../../../components/ui/FooterWithButtons"; +import I18n from "../../../../../i18n"; +import { emptyContextualHelp } from "../../../../../utils/emptyContextualHelp"; +import { IDPayConfigurationParamsList } from "../navigation/navigator"; +import { ConfigurationMode } from "../xstate/context"; +import { useConfigurationMachineService } from "../xstate/provider"; import { ibanListSelector, isLoadingSelector, isUpsertingIbanSelector, selectEnrolledIban, selectIsIbanOnlyMode -} from "../../xstate/selectors"; -import { LabelSmall } from "../../../../../../components/core/typography/LabelSmall"; +} from "../xstate/selectors"; +import { LabelSmall } from "../../../../../components/core/typography/LabelSmall"; type IbanEnrollmentScreenRouteParams = { initiativeId?: string; diff --git a/ts/features/idpay/initiative/configuration/iban/screens/IbanOnboardingScreen.tsx b/ts/features/idpay/initiative/configuration/screens/IbanOnboardingScreen.tsx similarity index 75% rename from ts/features/idpay/initiative/configuration/iban/screens/IbanOnboardingScreen.tsx rename to ts/features/idpay/initiative/configuration/screens/IbanOnboardingScreen.tsx index 396c77c64be..0b17070a20b 100644 --- a/ts/features/idpay/initiative/configuration/iban/screens/IbanOnboardingScreen.tsx +++ b/ts/features/idpay/initiative/configuration/screens/IbanOnboardingScreen.tsx @@ -3,25 +3,22 @@ import * as E from "fp-ts/lib/Either"; import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import React from "react"; -import { View, SafeAreaView, ScrollView } from "react-native"; -import { Iban } from "../../../../../../../definitions/backend/Iban"; -import { Icon } from "../../../../../../components/core/icons"; -import { - VSpacer, - HSpacer -} from "../../../../../../components/core/spacer/Spacer"; -import { Body } from "../../../../../../components/core/typography/Body"; -import { H1 } from "../../../../../../components/core/typography/H1"; -import { LabelSmall } from "../../../../../../components/core/typography/LabelSmall"; -import { Link } from "../../../../../../components/core/typography/Link"; -import { IOStyles } from "../../../../../../components/core/variables/IOStyles"; -import { LabelledItem } from "../../../../../../components/LabelledItem"; -import BaseScreenComponent from "../../../../../../components/screens/BaseScreenComponent"; -import FooterWithButtons from "../../../../../../components/ui/FooterWithButtons"; -import I18n from "../../../../../../i18n"; -import { emptyContextualHelp } from "../../../../../../utils/emptyContextualHelp"; -import { LOADING_TAG } from "../../../../../../utils/xstate"; -import { useConfigurationMachineService } from "../../xstate/provider"; +import { SafeAreaView, ScrollView, View } from "react-native"; +import { Iban } from "../../../../../../definitions/backend/Iban"; +import { Icon } from "../../../../../components/core/icons"; +import { HSpacer, VSpacer } from "../../../../../components/core/spacer/Spacer"; +import { Body } from "../../../../../components/core/typography/Body"; +import { H1 } from "../../../../../components/core/typography/H1"; +import { LabelSmall } from "../../../../../components/core/typography/LabelSmall"; +import { Link } from "../../../../../components/core/typography/Link"; +import { IOStyles } from "../../../../../components/core/variables/IOStyles"; +import { LabelledItem } from "../../../../../components/LabelledItem"; +import BaseScreenComponent from "../../../../../components/screens/BaseScreenComponent"; +import FooterWithButtons from "../../../../../components/ui/FooterWithButtons"; +import I18n from "../../../../../i18n"; +import { emptyContextualHelp } from "../../../../../utils/emptyContextualHelp"; +import { LOADING_TAG } from "../../../../../utils/xstate"; +import { useConfigurationMachineService } from "../xstate/provider"; const IbanOnboardingScreen = () => { const configurationMachine = useConfigurationMachineService(); diff --git a/ts/features/idpay/initiative/configuration/iban/screens/__test__/IbanEnrollmentScreen.test.tsx b/ts/features/idpay/initiative/configuration/screens/__test__/IbanEnrollmentScreen.test.tsx similarity index 88% rename from ts/features/idpay/initiative/configuration/iban/screens/__test__/IbanEnrollmentScreen.test.tsx rename to ts/features/idpay/initiative/configuration/screens/__test__/IbanEnrollmentScreen.test.tsx index f2b439b0625..38a27cbcc75 100644 --- a/ts/features/idpay/initiative/configuration/iban/screens/__test__/IbanEnrollmentScreen.test.tsx +++ b/ts/features/idpay/initiative/configuration/screens/__test__/IbanEnrollmentScreen.test.tsx @@ -1,20 +1,20 @@ import * as React from "react"; import configureMockStore from "redux-mock-store"; import { interpret } from "xstate"; -import { applicationChangeState } from "../../../../../../../store/actions/application"; -import { appReducer } from "../../../../../../../store/reducers"; -import { GlobalState } from "../../../../../../../store/reducers/types"; -import { renderScreenFakeNavRedux } from "../../../../../../../utils/testWrapper"; -import { IDPayConfigurationRoutes } from "../../../navigation/navigator"; -import { createIDPayInitiativeConfigurationMachine } from "../../../xstate/machine"; -import { ConfigurationMachineContext } from "../../../xstate/provider"; +import { applicationChangeState } from "../../../../../../store/actions/application"; +import { appReducer } from "../../../../../../store/reducers"; +import { GlobalState } from "../../../../../../store/reducers/types"; +import { renderScreenFakeNavRedux } from "../../../../../../utils/testWrapper"; +import { IDPayConfigurationRoutes } from "../../navigation/navigator"; +import { createIDPayInitiativeConfigurationMachine } from "../../xstate/machine"; +import { ConfigurationMachineContext } from "../../xstate/provider"; import IbanEnrollmentScreen from "../IbanEnrollmentScreen"; -import I18n from "../../../../../../../i18n"; +import I18n from "../../../../../../i18n"; import { ConfigurationMode, Context, INITIAL_CONTEXT -} from "../../../xstate/context"; +} from "../../xstate/context"; describe("IbanEnrollmentScreen", () => { beforeEach(() => { diff --git a/ts/features/idpay/initiative/configuration/xstate/__mocks__/services.ts b/ts/features/idpay/initiative/configuration/xstate/__mocks__/services.ts index 19d5cd79b1e..167a1ead496 100644 --- a/ts/features/idpay/initiative/configuration/xstate/__mocks__/services.ts +++ b/ts/features/idpay/initiative/configuration/xstate/__mocks__/services.ts @@ -1,9 +1,9 @@ -import { IbanListDTO } from "../../../../../../../definitions/idpay/iban/IbanListDTO"; +import { IbanListDTO } from "../../../../../../../definitions/idpay/IbanListDTO"; import { InitiativeDTO, StatusEnum -} from "../../../../../../../definitions/idpay/wallet/InitiativeDTO"; -import { InstrumentDTO } from "../../../../../../../definitions/idpay/wallet/InstrumentDTO"; +} from "../../../../../../../definitions/idpay/InitiativeDTO"; +import { InstrumentDTO } from "../../../../../../../definitions/idpay/InstrumentDTO"; import { TypeEnum as WalletTypeEnumV1 } from "../../../../../../../definitions/pagopa/Wallet"; import { Wallet } from "../../../../../../types/pagopa"; @@ -46,7 +46,12 @@ export const T_REFUNDABLE_INITIATIVE_DTO: InitiativeDTO = { }; export const T_IBAN_LIST: IbanListDTO["ibanList"] = [ - { channel: "IO", checkIbanStatus: "", description: "Test", iban: T_IBAN } + { + channel: "IO", + checkIbanStatus: "", + description: "Test", + iban: T_IBAN + } ]; export const T_PAGOPA_INSTRUMENTS = [T_WALLET]; diff --git a/ts/features/idpay/initiative/configuration/xstate/__tests__/machine.test.ts b/ts/features/idpay/initiative/configuration/xstate/__tests__/machine.test.ts index c3a55da6cb8..955437042d6 100644 --- a/ts/features/idpay/initiative/configuration/xstate/__tests__/machine.test.ts +++ b/ts/features/idpay/initiative/configuration/xstate/__tests__/machine.test.ts @@ -2,6 +2,7 @@ /* eslint-disable functional/no-let */ import { waitFor } from "@testing-library/react-native"; import { interpret, StateValue } from "xstate"; +import { IbanDTO } from "../../../../../../../definitions/idpay/IbanDTO"; import { ConfigurationMode } from "../context"; import { InitiativeFailureType } from "../failure"; import { createIDPayInitiativeConfigurationMachine } from "../machine"; @@ -23,6 +24,13 @@ import { T_WALLET } from "../__mocks__/services"; +const T_IBAN_ENROLL: IbanDTO = { + channel: "IO", + checkIbanStatus: "", + description: "Test", + iban: T_IBAN +}; + describe("IDPay configuration machine", () => { beforeEach(() => { jest.clearAllMocks(); @@ -172,12 +180,7 @@ describe("IDPay configuration machine", () => { service.send({ type: "ENROLL_IBAN", - iban: { - channel: "IO", - checkIbanStatus: "", - description: "Test", - iban: T_IBAN - } + iban: T_IBAN_ENROLL }); await waitFor(() => @@ -430,12 +433,7 @@ describe("IDPay configuration machine", () => { service.send({ type: "ENROLL_IBAN", - iban: { - channel: "IO", - checkIbanStatus: "", - description: "Test", - iban: T_IBAN - } + iban: T_IBAN_ENROLL }); await waitFor(() => @@ -545,12 +543,7 @@ describe("IDPay configuration machine", () => { service.send({ type: "ENROLL_IBAN", - iban: { - channel: "IO", - checkIbanStatus: "", - description: "Test", - iban: T_IBAN - } + iban: T_IBAN_ENROLL }); await waitFor(() => @@ -748,12 +741,7 @@ describe("IDPay configuration machine", () => { service.send({ type: "ENROLL_IBAN", - iban: { - channel: "IO", - checkIbanStatus: "", - description: "Test", - iban: T_IBAN - } + iban: T_IBAN_ENROLL }); await waitFor(() => @@ -926,12 +914,7 @@ describe("IDPay configuration machine", () => { service.send({ type: "ENROLL_IBAN", - iban: { - channel: "IO", - checkIbanStatus: "", - description: "Test", - iban: T_IBAN - } + iban: T_IBAN_ENROLL }); await waitFor(() => @@ -1033,12 +1016,7 @@ describe("IDPay configuration machine", () => { service.send({ type: "ENROLL_IBAN", - iban: { - channel: "IO", - checkIbanStatus: "", - description: "Test", - iban: T_IBAN - } + iban: T_IBAN_ENROLL }); await waitFor(() => diff --git a/ts/features/idpay/initiative/configuration/xstate/__tests__/transitions.test.ts b/ts/features/idpay/initiative/configuration/xstate/__tests__/transitions.test.ts index ef35cdeefe1..4d924fe9935 100644 --- a/ts/features/idpay/initiative/configuration/xstate/__tests__/transitions.test.ts +++ b/ts/features/idpay/initiative/configuration/xstate/__tests__/transitions.test.ts @@ -3,6 +3,7 @@ import { ConfigurationMode, Context, INITIAL_CONTEXT } from "../context"; import { Events } from "../events"; import { createIDPayInitiativeConfigurationMachine } from "../machine"; import { Typegen0 } from "../machine.typegen"; +import { T_IBAN } from "../__mocks__/services"; type TransitionTestType = { currentState: Typegen0["matchesStates"]; @@ -38,10 +39,14 @@ const transitions: ReadonlyArray = [ context: { ibanList: pot.some([ { - iban: "", + channel: "IO", checkIbanStatus: "", - description: "", - channel: "" + description: "Test", + iban: T_IBAN, + bicCode: "", + checkIbanResponseDate: new Date(), + holderBank: "", + queueDate: "" } ]) } diff --git a/ts/features/idpay/initiative/configuration/xstate/context.ts b/ts/features/idpay/initiative/configuration/xstate/context.ts index 09c7c5d2822..fef9cad668a 100644 --- a/ts/features/idpay/initiative/configuration/xstate/context.ts +++ b/ts/features/idpay/initiative/configuration/xstate/context.ts @@ -1,11 +1,11 @@ import * as p from "@pagopa/ts-commons/lib/pot"; -import { IbanDTO } from "../../../../../../definitions/idpay/iban/IbanDTO"; -import { IbanPutDTO } from "../../../../../../definitions/idpay/wallet/IbanPutDTO"; -import { InitiativeDTO } from "../../../../../../definitions/idpay/wallet/InitiativeDTO"; +import { IbanDTO } from "../../../../../../definitions/idpay/IbanDTO"; +import { IbanPutDTO } from "../../../../../../definitions/idpay/IbanPutDTO"; +import { InitiativeDTO } from "../../../../../../definitions/idpay/InitiativeDTO"; import { InstrumentDTO, StatusEnum as InstrumentStatusEnum -} from "../../../../../../definitions/idpay/wallet/InstrumentDTO"; +} from "../../../../../../definitions/idpay/InstrumentDTO"; import { Wallet } from "../../../../../types/pagopa"; import { InitiativeFailureType } from "./failure"; diff --git a/ts/features/idpay/initiative/configuration/xstate/events.ts b/ts/features/idpay/initiative/configuration/xstate/events.ts index bbbde9b7107..e3e75ff4876 100644 --- a/ts/features/idpay/initiative/configuration/xstate/events.ts +++ b/ts/features/idpay/initiative/configuration/xstate/events.ts @@ -1,6 +1,6 @@ -import { IbanDTO } from "../../../../../../definitions/idpay/iban/IbanDTO"; -import { IbanPutDTO } from "../../../../../../definitions/idpay/wallet/IbanPutDTO"; -import { InstrumentDTO } from "../../../../../../definitions/idpay/wallet/InstrumentDTO"; +import { IbanDTO } from "../../../../../../definitions/idpay/IbanDTO"; +import { IbanPutDTO } from "../../../../../../definitions/idpay/IbanPutDTO"; +import { InstrumentDTO } from "../../../../../../definitions/idpay/InstrumentDTO"; import { Wallet } from "../../../../../types/pagopa"; import { ConfigurationMode } from "./context"; diff --git a/ts/features/idpay/initiative/configuration/xstate/machine.ts b/ts/features/idpay/initiative/configuration/xstate/machine.ts index 3c3ee3a2c2f..e80bfddb4e8 100644 --- a/ts/features/idpay/initiative/configuration/xstate/machine.ts +++ b/ts/features/idpay/initiative/configuration/xstate/machine.ts @@ -1,11 +1,11 @@ import * as p from "@pagopa/ts-commons/lib/pot"; import { assign, createMachine } from "xstate"; -import { IbanListDTO } from "../../../../../../definitions/idpay/iban/IbanListDTO"; +import { IbanListDTO } from "../../../../../../definitions/idpay/IbanListDTO"; import { InitiativeDTO, StatusEnum as InitiativeStatusEnum -} from "../../../../../../definitions/idpay/wallet/InitiativeDTO"; -import { InstrumentDTO } from "../../../../../../definitions/idpay/wallet/InstrumentDTO"; +} from "../../../../../../definitions/idpay/InitiativeDTO"; +import { InstrumentDTO } from "../../../../../../definitions/idpay/InstrumentDTO"; import { Wallet } from "../../../../../types/pagopa"; import { diff --git a/ts/features/idpay/initiative/configuration/xstate/provider.tsx b/ts/features/idpay/initiative/configuration/xstate/provider.tsx index 270c3c21167..9191218b587 100644 --- a/ts/features/idpay/initiative/configuration/xstate/provider.tsx +++ b/ts/features/idpay/initiative/configuration/xstate/provider.tsx @@ -1,19 +1,19 @@ import { useNavigation } from "@react-navigation/native"; import { useInterpret } from "@xstate/react"; import * as E from "fp-ts/lib/Either"; -import * as O from "fp-ts/lib/Option"; import { pipe } from "fp-ts/lib/function"; +import * as O from "fp-ts/lib/Option"; import React from "react"; import { InterpreterFrom } from "xstate"; import { PreferredLanguageEnum } from "../../../../../../definitions/backend/PreferredLanguage"; import { PaymentManagerClient } from "../../../../../api/pagopa"; import { - idPayTestToken, - idPayApiUatBaseUrl, fetchPaymentManagerLongTimeout, + idPayApiBaseUrl, + idPayApiUatBaseUrl, + idPayTestToken, pagoPaApiUrlPrefix, - pagoPaApiUrlPrefixTest, - idPayApiBaseUrl + pagoPaApiUrlPrefixTest } from "../../../../../config"; import { useXStateMachine } from "../../../../../hooks/useXStateMachine"; import { @@ -26,15 +26,14 @@ import { isPagoPATestEnabledSelector, preferredLanguageSelector } from "../../../../../store/reducers/persistedPreferences"; -import { SessionManager } from "../../../../../utils/SessionManager"; import { defaultRetryingFetch } from "../../../../../utils/fetch"; import { fromLocaleToPreferredLanguage } from "../../../../../utils/locale"; -import { createIDPayWalletClient } from "../../../wallet/api/client"; -import { createIDPayIbanClient } from "../iban/api/client"; +import { SessionManager } from "../../../../../utils/SessionManager"; +import { createIDPayClient } from "../../../common/api/client"; import { createActionsImplementation } from "./actions"; import { - IDPayInitiativeConfigurationMachineType, - createIDPayInitiativeConfigurationMachine + createIDPayInitiativeConfigurationMachine, + IDPayInitiativeConfigurationMachineType } from "./machine"; import { createServicesImplementation } from "./services"; @@ -94,14 +93,12 @@ const IDPayConfigurationMachineProvider = (props: Props) => { const pmSessionManager = new SessionManager(getPaymentManagerSession); - const walletClient = createIDPayWalletClient( + const idPayClient = createIDPayClient( isPagoPATestEnabled ? idPayApiUatBaseUrl : idPayApiBaseUrl ); - const ibanClient = createIDPayIbanClient(idPayApiUatBaseUrl); const services = createServicesImplementation( - walletClient, - ibanClient, + idPayClient, paymentManagerClient, pmSessionManager, idPayToken, diff --git a/ts/features/idpay/initiative/configuration/xstate/selectors.ts b/ts/features/idpay/initiative/configuration/xstate/selectors.ts index bac21503dfa..29da82603fb 100644 --- a/ts/features/idpay/initiative/configuration/xstate/selectors.ts +++ b/ts/features/idpay/initiative/configuration/xstate/selectors.ts @@ -1,7 +1,7 @@ import * as P from "@pagopa/ts-commons/lib/pot"; import { createSelector } from "reselect"; import { StateFrom } from "xstate"; -import { InstrumentDTO } from "../../../../../../definitions/idpay/wallet/InstrumentDTO"; +import { InstrumentDTO } from "../../../../../../definitions/idpay/InstrumentDTO"; import { LOADING_TAG } from "../../../../../utils/xstate"; import { ConfigurationMode } from "./context"; import { IDPayInitiativeConfigurationMachineType } from "./machine"; diff --git a/ts/features/idpay/initiative/configuration/xstate/services.ts b/ts/features/idpay/initiative/configuration/xstate/services.ts index 2f0eb06205e..b1380bb5fb3 100644 --- a/ts/features/idpay/initiative/configuration/xstate/services.ts +++ b/ts/features/idpay/initiative/configuration/xstate/services.ts @@ -2,21 +2,19 @@ import * as E from "fp-ts/lib/Either"; import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import { PreferredLanguageEnum } from "../../../../../../definitions/backend/PreferredLanguage"; -import { IbanListDTO } from "../../../../../../definitions/idpay/iban/IbanListDTO"; -import { InitiativeDTO } from "../../../../../../definitions/idpay/wallet/InitiativeDTO"; -import { InstrumentDTO } from "../../../../../../definitions/idpay/wallet/InstrumentDTO"; +import { IbanListDTO } from "../../../../../../definitions/idpay/IbanListDTO"; +import { InitiativeDTO } from "../../../../../../definitions/idpay/InitiativeDTO"; +import { InstrumentDTO } from "../../../../../../definitions/idpay/InstrumentDTO"; import { PaymentManagerClient } from "../../../../../api/pagopa"; import { PaymentManagerToken, Wallet } from "../../../../../types/pagopa"; import { SessionManager } from "../../../../../utils/SessionManager"; import { convertWalletV2toWalletV1 } from "../../../../../utils/walletv2"; -import { IDPayWalletClient } from "../../../wallet/api/client"; -import { IDPayIbanClient } from "../iban/api/client"; +import { IDPayClient } from "../../../common/api/client"; import { Context } from "./context"; import { InitiativeFailureType } from "./failure"; const createServicesImplementation = ( - walletClient: IDPayWalletClient, - ibanClient: IDPayIbanClient, + idPayClient: IDPayClient, paymentManagerClient: PaymentManagerClient, pmSessionManager: SessionManager, bearerToken: string, @@ -27,7 +25,7 @@ const createServicesImplementation = ( return Promise.reject(InitiativeFailureType.GENERIC); } - const response = await walletClient.getWalletDetail({ + const response = await idPayClient.getWalletDetail({ initiativeId: context.initiativeId, bearerAuth: bearerToken, "Accept-Language": language @@ -50,7 +48,7 @@ const createServicesImplementation = ( }; const loadIbanList = async (_: Context) => { - const response = await ibanClient.getIbanList({ + const response = await idPayClient.getIbanList({ bearerAuth: bearerToken, "Accept-Language": language }); @@ -85,7 +83,7 @@ const createServicesImplementation = ( return Promise.reject(InitiativeFailureType.GENERIC); } try { - const res = await walletClient.enrollIban({ + const res = await idPayClient.enrollIban({ "Accept-Language": language, bearerAuth: bearerToken, initiativeId: context.initiativeId, @@ -117,7 +115,7 @@ const createServicesImplementation = ( return Promise.reject(InitiativeFailureType.GENERIC); } - const response = await walletClient.enrollIban({ + const response = await idPayClient.enrollIban({ initiativeId: context.initiativeId, body: { iban: context.selectedIban.iban, @@ -175,7 +173,7 @@ const createServicesImplementation = ( return Promise.reject(InitiativeFailureType.GENERIC); } - const response = await walletClient.getInstrumentList({ + const response = await idPayClient.getInstrumentList({ initiativeId: context.initiativeId, bearerAuth: bearerToken, "Accept-Language": language @@ -210,7 +208,7 @@ const createServicesImplementation = ( return Promise.reject(InitiativeFailureType.GENERIC); } - const response = await walletClient.enrollInstrument({ + const response = await idPayClient.enrollInstrument({ initiativeId: context.initiativeId, idWallet: context.instrumentToEnroll.idWallet.toString(), bearerAuth: bearerToken, @@ -246,7 +244,7 @@ const createServicesImplementation = ( return Promise.reject(InitiativeFailureType.GENERIC); } - const response = await walletClient.deleteInstrument({ + const response = await idPayClient.deleteInstrument({ initiativeId: context.initiativeId, instrumentId: context.instrumentToDelete.instrumentId, bearerAuth: bearerToken, diff --git a/ts/features/idpay/initiative/details/api/client.ts b/ts/features/idpay/initiative/details/api/client.ts deleted file mode 100644 index 55c99eeb914..00000000000 --- a/ts/features/idpay/initiative/details/api/client.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createClient } from "../../../../../../definitions/idpay/timeline/client"; -import { defaultRetryingFetch } from "../../../../../utils/fetch"; - -const createIDPayTimelineClient = (baseUrl: string) => - createClient({ - baseUrl, - fetchApi: defaultRetryingFetch() - }); - -export type IDPayTimelineClient = ReturnType; - -export { createIDPayTimelineClient }; diff --git a/ts/features/idpay/initiative/details/components/InitiativeCardComponent.tsx b/ts/features/idpay/initiative/details/components/InitiativeCardComponent.tsx index 1696666e6bc..dac77a93dd1 100644 --- a/ts/features/idpay/initiative/details/components/InitiativeCardComponent.tsx +++ b/ts/features/idpay/initiative/details/components/InitiativeCardComponent.tsx @@ -4,8 +4,8 @@ import { Image, ImageBackground, StyleSheet, View } from "react-native"; import { widthPercentageToDP } from "react-native-responsive-screen"; import { InitiativeDTO, - StatusEnum -} from "../../../../../../definitions/idpay/wallet/InitiativeDTO"; + StatusEnum as InitiativeStatusEnum +} from "../../../../../../definitions/idpay/InitiativeDTO"; import bonusVacanzeWhiteLogo from "../../../../../../img/bonus/bonusVacanze/logo_BonusVacanze_White.png"; import cardBg from "../../../../../../img/features/idpay/card_full.png"; import { makeFontStyleObject } from "../../../../../components/core/fonts"; @@ -78,7 +78,7 @@ const InitiativeCardComponent = (props: Props) => { const { initiativeName, endDate, status, amount, accrued, refunded } = props.initiative; - const isInitiativeConfigured = status === StatusEnum.REFUNDABLE; + const isInitiativeConfigured = status === InitiativeStatusEnum.REFUNDABLE; const toBeRepaidAmount = (accrued || 0) - (refunded || 0); const renderFullCard = () => ( diff --git a/ts/features/idpay/initiative/details/components/InitiativeSettingsComponent.tsx b/ts/features/idpay/initiative/details/components/InitiativeSettingsComponent.tsx index f34ba1db34c..16004581c2a 100644 --- a/ts/features/idpay/initiative/details/components/InitiativeSettingsComponent.tsx +++ b/ts/features/idpay/initiative/details/components/InitiativeSettingsComponent.tsx @@ -5,7 +5,7 @@ import React from "react"; import { InitiativeDTO, StatusEnum -} from "../../../../../../definitions/idpay/wallet/InitiativeDTO"; +} from "../../../../../../definitions/idpay/InitiativeDTO"; import { H3 } from "../../../../../components/core/typography/H3"; import { H4 } from "../../../../../components/core/typography/H4"; import { LabelSmall } from "../../../../../components/core/typography/LabelSmall"; diff --git a/ts/features/idpay/initiative/details/components/InitiativeTimelineComponent.tsx b/ts/features/idpay/initiative/details/components/InitiativeTimelineComponent.tsx index dfb1d1de766..bcfa090edae 100644 --- a/ts/features/idpay/initiative/details/components/InitiativeTimelineComponent.tsx +++ b/ts/features/idpay/initiative/details/components/InitiativeTimelineComponent.tsx @@ -3,8 +3,8 @@ import { useNavigation } from "@react-navigation/native"; import { List as NBList } from "native-base"; import React, { useEffect } from "react"; import { StyleSheet, View } from "react-native"; -import { OperationListDTO } from "../../../../../../definitions/idpay/timeline/OperationListDTO"; -import { OperationTypeEnum as TransactionOperationTypeEnum } from "../../../../../../definitions/idpay/timeline/TransactionOperationDTO"; +import { OperationListDTO } from "../../../../../../definitions/idpay/OperationListDTO"; +import { OperationTypeEnum as TransactionOperationTypeEnum } from "../../../../../../definitions/idpay/TransactionOperationDTO"; import { VSpacer } from "../../../../../components/core/spacer/Spacer"; import { Body } from "../../../../../components/core/typography/Body"; import { H3 } from "../../../../../components/core/typography/H3"; diff --git a/ts/features/idpay/initiative/details/components/TimelineDetailsBottomSheet.tsx b/ts/features/idpay/initiative/details/components/TimelineDetailsBottomSheet.tsx index fecb33d8622..1d698f06663 100644 --- a/ts/features/idpay/initiative/details/components/TimelineDetailsBottomSheet.tsx +++ b/ts/features/idpay/initiative/details/components/TimelineDetailsBottomSheet.tsx @@ -1,13 +1,13 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; import React from "react"; import { Image, StyleSheet, View } from "react-native"; -import { OperationDTO } from "../../../../../../definitions/idpay/timeline/OperationDTO"; -import { OperationListDTO } from "../../../../../../definitions/idpay/timeline/OperationListDTO"; +import { OperationDTO } from "../../../../../../definitions/idpay/OperationDTO"; +import { OperationListDTO } from "../../../../../../definitions/idpay/OperationListDTO"; import { OperationTypeEnum as TransactionDetailOperationTypeEnum, TransactionDetailDTO -} from "../../../../../../definitions/idpay/timeline/TransactionDetailDTO"; -import { InitiativeDTO } from "../../../../../../definitions/idpay/wallet/InitiativeDTO"; +} from "../../../../../../definitions/idpay/TransactionDetailDTO"; +import { InitiativeDTO } from "../../../../../../definitions/idpay/InitiativeDTO"; import ButtonDefaultOpacity from "../../../../../components/ButtonDefaultOpacity"; import CopyButtonComponent from "../../../../../components/CopyButtonComponent"; import { Pictogram } from "../../../../../components/core/pictograms"; diff --git a/ts/features/idpay/initiative/details/components/TimelineOperationListItem.tsx b/ts/features/idpay/initiative/details/components/TimelineOperationListItem.tsx index daa3eade8ec..07782d7e1d1 100644 --- a/ts/features/idpay/initiative/details/components/TimelineOperationListItem.tsx +++ b/ts/features/idpay/initiative/details/components/TimelineOperationListItem.tsx @@ -2,13 +2,14 @@ import { format } from "date-fns"; import { ListItem } from "native-base"; import React from "react"; import { StyleSheet, View } from "react-native"; -import { OperationTypeEnum as IbanOperationTypeEnum } from "../../../../../../definitions/idpay/timeline/IbanOperationDTO"; -import { OperationTypeEnum as OnboardingOperationTypeEnum } from "../../../../../../definitions/idpay/timeline/OnboardingOperationDTO"; -import { OperationListDTO } from "../../../../../../definitions/idpay/timeline/OperationListDTO"; -import { OperationTypeEnum as RefundOperationTypeEnum } from "../../../../../../definitions/idpay/timeline/RefundOperationDTO"; -import { OperationTypeEnum } from "../../../../../../definitions/idpay/timeline/RejectedInstrumentOperationDTO"; -import { OperationTypeEnum as TransactionOperationTypeEnum } from "../../../../../../definitions/idpay/timeline/TransactionOperationDTO"; +import { OperationTypeEnum as IbanOperationTypeEnum } from "../../../../../../definitions/idpay/IbanOperationDTO"; +import { OperationTypeEnum as OnboardingOperationTypeEnum } from "../../../../../../definitions/idpay/OnboardingOperationDTO"; +import { OperationListDTO } from "../../../../../../definitions/idpay/OperationListDTO"; +import { OperationTypeEnum as RefundOperationTypeEnum } from "../../../../../../definitions/idpay/RefundOperationDTO"; +import { OperationTypeEnum } from "../../../../../../definitions/idpay/RejectedInstrumentOperationDTO"; +import { OperationTypeEnum as TransactionOperationTypeEnum } from "../../../../../../definitions/idpay/TransactionOperationDTO"; import { Icon } from "../../../../../components/core/icons"; +import { LogoPayment } from "../../../../../components/core/logos"; import { HSpacer } from "../../../../../components/core/spacer/Spacer"; import { H4 } from "../../../../../components/core/typography/H4"; import { LabelSmall } from "../../../../../components/core/typography/LabelSmall"; @@ -16,7 +17,6 @@ import { IOStyles } from "../../../../../components/core/variables/IOStyles"; import I18n from "../../../../../i18n"; import { formatDateAsShortFormat } from "../../../../../utils/dates"; import { formatNumberAmount } from "../../../../../utils/stringBuilder"; -import { LogoPayment } from "../../../../../components/core/logos"; import { InstrumentBrandEnum, instrumentBrandMap } from "../utils/utils"; const styles = StyleSheet.create({ @@ -74,9 +74,13 @@ const OperationIcon = ({ operation }: OperationComponentProps) => { const OperationAmount = ({ operation }: OperationComponentProps) => { switch (operation.operationType) { case TransactionOperationTypeEnum.TRANSACTION: - return

{`–${formatNumberAmount(operation.accrued, false)} €`}

; + return ( +

{`–${formatNumberAmount(operation.accrued || 0, false)} €`}

+ ); case TransactionOperationTypeEnum.REVERSAL: - return

{`+${formatNumberAmount(operation.accrued, false)} €`}

; + return ( +

{`+${formatNumberAmount(operation.accrued || 0, false)} €`}

+ ); case RefundOperationTypeEnum.PAID_REFUND: return (

diff --git a/ts/features/idpay/initiative/details/saga/__test__/handleGetInitiativeDetails.test.ts b/ts/features/idpay/initiative/details/saga/__test__/handleGetInitiativeDetails.test.ts index 3e420787121..40e9ea10f62 100644 --- a/ts/features/idpay/initiative/details/saga/__test__/handleGetInitiativeDetails.test.ts +++ b/ts/features/idpay/initiative/details/saga/__test__/handleGetInitiativeDetails.test.ts @@ -1,11 +1,11 @@ import * as E from "fp-ts/lib/Either"; import { expectSaga } from "redux-saga-test-plan"; import { PreferredLanguageEnum } from "../../../../../../../definitions/backend/PreferredLanguage"; -import { ErrorDTO } from "../../../../../../../definitions/idpay/wallet/ErrorDTO"; +import { ErrorDTO } from "../../../../../../../definitions/idpay/ErrorDTO"; import { InitiativeDTO, StatusEnum -} from "../../../../../../../definitions/idpay/wallet/InitiativeDTO"; +} from "../../../../../../../definitions/idpay/InitiativeDTO"; import { appReducer } from "../../../../../../store/reducers"; import { idpayInitiativeGet } from "../../store/actions"; import { handleGetInitiativeDetails } from "../handleGetInitiativeDetails"; diff --git a/ts/features/idpay/initiative/details/saga/__test__/handleGetTimelineDetails.test.ts b/ts/features/idpay/initiative/details/saga/__test__/handleGetTimelineDetails.test.ts index 8f2e737f5bb..93372e51faa 100644 --- a/ts/features/idpay/initiative/details/saga/__test__/handleGetTimelineDetails.test.ts +++ b/ts/features/idpay/initiative/details/saga/__test__/handleGetTimelineDetails.test.ts @@ -1,8 +1,8 @@ import * as E from "fp-ts/lib/Either"; import { expectSaga } from "redux-saga-test-plan"; import { PreferredLanguageEnum } from "../../../../../../../definitions/backend/PreferredLanguage"; -import { OperationDTO } from "../../../../../../../definitions/idpay/timeline/OperationDTO"; -import { OperationTypeEnum as TransactionOperationType } from "../../../../../../../definitions/idpay/timeline/TransactionOperationDTO"; +import { OperationDTO } from "../../../../../../../definitions/idpay/OperationDTO"; +import { OperationTypeEnum as TransactionOperationType } from "../../../../../../../definitions/idpay/TransactionOperationDTO"; import { appReducer } from "../../../../../../store/reducers"; import { idpayTimelineDetailsGet } from "../../store/actions"; import { handleGetTimelineDetails } from "../handleGetTimelineDetails"; diff --git a/ts/features/idpay/initiative/details/saga/__test__/handleGetTimelinePage.test.ts b/ts/features/idpay/initiative/details/saga/__test__/handleGetTimelinePage.test.ts index 849b759318f..c7211d79f1f 100644 --- a/ts/features/idpay/initiative/details/saga/__test__/handleGetTimelinePage.test.ts +++ b/ts/features/idpay/initiative/details/saga/__test__/handleGetTimelinePage.test.ts @@ -1,9 +1,9 @@ import * as E from "fp-ts/lib/Either"; import { expectSaga } from "redux-saga-test-plan"; import { PreferredLanguageEnum } from "../../../../../../../definitions/backend/PreferredLanguage"; -import { ErrorDTO } from "../../../../../../../definitions/idpay/timeline/ErrorDTO"; -import { TimelineDTO } from "../../../../../../../definitions/idpay/timeline/TimelineDTO"; -import { OperationTypeEnum } from "../../../../../../../definitions/idpay/timeline/TransactionOperationDTO"; +import { ErrorDTO } from "../../../../../../../definitions/idpay/ErrorDTO"; +import { TimelineDTO } from "../../../../../../../definitions/idpay/TimelineDTO"; +import { OperationTypeEnum } from "../../../../../../../definitions/idpay/TransactionOperationDTO"; import { appReducer } from "../../../../../../store/reducers"; import { idpayTimelinePageGet } from "../../store/actions"; import { handleGetTimelinePage } from "../handleGetTimelinePage"; diff --git a/ts/features/idpay/initiative/details/saga/handleGetInitiativeDetails.ts b/ts/features/idpay/initiative/details/saga/handleGetInitiativeDetails.ts index 4382aab62d1..ad712eb43bf 100644 --- a/ts/features/idpay/initiative/details/saga/handleGetInitiativeDetails.ts +++ b/ts/features/idpay/initiative/details/saga/handleGetInitiativeDetails.ts @@ -5,7 +5,7 @@ import { PreferredLanguageEnum } from "../../../../../../definitions/backend/Pre import { SagaCallReturnType } from "../../../../../types/utils"; import { getGenericError, getNetworkError } from "../../../../../utils/errors"; import { readablePrivacyReport } from "../../../../../utils/reporters"; -import { IDPayWalletClient } from "../../../wallet/api/client"; +import { IDPayClient } from "../../../common/api/client"; import { idpayInitiativeGet, IdPayInitiativeGetPayloadType @@ -19,7 +19,7 @@ import { */ export function* handleGetInitiativeDetails( - getInitiativeDetails: IDPayWalletClient["getWalletDetail"], + getInitiativeDetails: IDPayClient["getWalletDetail"], token: string, language: PreferredLanguageEnum, payload: IdPayInitiativeGetPayloadType diff --git a/ts/features/idpay/initiative/details/saga/handleGetTimelineDetails.ts b/ts/features/idpay/initiative/details/saga/handleGetTimelineDetails.ts index 23e714d61f5..e73a4677646 100644 --- a/ts/features/idpay/initiative/details/saga/handleGetTimelineDetails.ts +++ b/ts/features/idpay/initiative/details/saga/handleGetTimelineDetails.ts @@ -5,14 +5,14 @@ import { PreferredLanguageEnum } from "../../../../../../definitions/backend/Pre import { SagaCallReturnType } from "../../../../../types/utils"; import { getGenericError, getNetworkError } from "../../../../../utils/errors"; import { readablePrivacyReport } from "../../../../../utils/reporters"; -import { IDPayTimelineClient } from "../api/client"; +import { IDPayClient } from "../../../common/api/client"; import { idpayTimelineDetailsGet, IdPayTimelineDetailsGetPayloadType } from "../store/actions"; export function* handleGetTimelineDetails( - getTimelineDetail: IDPayTimelineClient["getTimelineDetail"], + getTimelineDetail: IDPayClient["getTimelineDetail"], token: string, language: PreferredLanguageEnum, payload: IdPayTimelineDetailsGetPayloadType diff --git a/ts/features/idpay/initiative/details/saga/handleGetTimelinePage.ts b/ts/features/idpay/initiative/details/saga/handleGetTimelinePage.ts index a36aa5a54c9..cf128bb655a 100644 --- a/ts/features/idpay/initiative/details/saga/handleGetTimelinePage.ts +++ b/ts/features/idpay/initiative/details/saga/handleGetTimelinePage.ts @@ -5,7 +5,7 @@ import { PreferredLanguageEnum } from "../../../../../../definitions/backend/Pre import { SagaCallReturnType } from "../../../../../types/utils"; import { getGenericError, getNetworkError } from "../../../../../utils/errors"; import { readablePrivacyReport } from "../../../../../utils/reporters"; -import { IDPayTimelineClient } from "../api/client"; +import { IDPayClient } from "../../../common/api/client"; import { IdpayTimelinePageGetPayloadType, idpayTimelinePageGet @@ -19,7 +19,7 @@ import { */ export function* handleGetTimelinePage( - getTimeline: IDPayTimelineClient["getTimeline"], + getTimeline: IDPayClient["getTimeline"], token: string, language: PreferredLanguageEnum, payload: IdpayTimelinePageGetPayloadType diff --git a/ts/features/idpay/initiative/details/saga/index.ts b/ts/features/idpay/initiative/details/saga/index.ts index a0cfd8542f4..55a9fca5199 100644 --- a/ts/features/idpay/initiative/details/saga/index.ts +++ b/ts/features/idpay/initiative/details/saga/index.ts @@ -1,21 +1,8 @@ -import { pipe } from "fp-ts/lib/function"; -import * as O from "fp-ts/lib/Option"; import { SagaIterator } from "redux-saga"; -import { call, select, takeLatest } from "typed-redux-saga/macro"; +import { call, takeLatest } from "typed-redux-saga/macro"; import { PreferredLanguageEnum } from "../../../../../../definitions/backend/PreferredLanguage"; -import { - idPayTestToken, - idPayApiUatBaseUrl, - idPayApiBaseUrl -} from "../../../../../config"; -import { - isPagoPATestEnabledSelector, - preferredLanguageSelector -} from "../../../../../store/reducers/persistedPreferences"; import { waitBackoffError } from "../../../../../utils/backoffError"; -import { fromLocaleToPreferredLanguage } from "../../../../../utils/locale"; -import { createIDPayWalletClient } from "../../../wallet/api/client"; -import { createIDPayTimelineClient } from "../api/client"; +import { IDPayClient } from "../../../common/api/client"; import { idpayInitiativeGet, IdPayInitiativeGetPayloadType, @@ -32,21 +19,11 @@ import { handleGetTimelinePage } from "./handleGetTimelinePage"; * Handle IDPAY initiative requests * @param bearerToken */ -export function* idpayInitiativeDetailsSaga(bearerToken: string): SagaIterator { - const isPagoPATestEnabled = yield* select(isPagoPATestEnabledSelector); - const baseUrl = isPagoPATestEnabled ? idPayApiUatBaseUrl : idPayApiBaseUrl; - const token = idPayTestToken ?? bearerToken; - - const idPayWalletClient = createIDPayWalletClient(baseUrl); - const idPayTimelineClient = createIDPayTimelineClient(baseUrl); - - const language = yield* select(preferredLanguageSelector); - - const preferredLanguage = pipe( - language, - O.map(fromLocaleToPreferredLanguage), - O.getOrElse(() => PreferredLanguageEnum.it_IT) - ); +export function* watchIDPayInitiativeDetailsSaga( + idPayClient: IDPayClient, + token: string, + preferredLanguage: PreferredLanguageEnum +): SagaIterator { // handle the request of getting id pay wallet yield* takeLatest( idpayInitiativeGet.request, @@ -55,7 +32,7 @@ export function* idpayInitiativeDetailsSaga(bearerToken: string): SagaIterator { yield* call(waitBackoffError, idpayInitiativeGet.failure); yield* call( handleGetInitiativeDetails, - idPayWalletClient.getWalletDetail, + idPayClient.getWalletDetail, token, preferredLanguage, action.payload @@ -69,7 +46,7 @@ export function* idpayInitiativeDetailsSaga(bearerToken: string): SagaIterator { yield* call(waitBackoffError, idpayTimelinePageGet.failure); yield* call( handleGetTimelinePage, - idPayTimelineClient.getTimeline, + idPayClient.getTimeline, token, preferredLanguage, action.payload @@ -83,7 +60,7 @@ export function* idpayInitiativeDetailsSaga(bearerToken: string): SagaIterator { yield* call(waitBackoffError, idpayTimelineDetailsGet.failure); yield* call( handleGetTimelineDetails, - idPayTimelineClient.getTimelineDetail, + idPayClient.getTimelineDetail, token, preferredLanguage, action.payload diff --git a/ts/features/idpay/initiative/details/screens/InitiativeDetailsScreen.tsx b/ts/features/idpay/initiative/details/screens/InitiativeDetailsScreen.tsx index f72de323b2b..eb9d40028f5 100644 --- a/ts/features/idpay/initiative/details/screens/InitiativeDetailsScreen.tsx +++ b/ts/features/idpay/initiative/details/screens/InitiativeDetailsScreen.tsx @@ -8,7 +8,7 @@ import LinearGradient from "react-native-linear-gradient"; import { InitiativeDTO, StatusEnum -} from "../../../../../../definitions/idpay/wallet/InitiativeDTO"; +} from "../../../../../../definitions/idpay/InitiativeDTO"; import EmptyInitiativeSvg from "../../../../../../img/features/idpay/empty_initiative.svg"; import { VSpacer } from "../../../../../components/core/spacer/Spacer"; import { H3 } from "../../../../../components/core/typography/H3"; diff --git a/ts/features/idpay/initiative/details/screens/OperationsListScreen.tsx b/ts/features/idpay/initiative/details/screens/OperationsListScreen.tsx index cad1dd70fa3..e713ab72f8a 100644 --- a/ts/features/idpay/initiative/details/screens/OperationsListScreen.tsx +++ b/ts/features/idpay/initiative/details/screens/OperationsListScreen.tsx @@ -8,8 +8,8 @@ import { StyleSheet, View } from "react-native"; -import { OperationListDTO } from "../../../../../../definitions/idpay/timeline/OperationListDTO"; -import { OperationTypeEnum as TransactionOperationTypeEnum } from "../../../../../../definitions/idpay/timeline/TransactionOperationDTO"; +import { OperationListDTO } from "../../../../../../definitions/idpay/OperationListDTO"; +import { OperationTypeEnum as TransactionOperationTypeEnum } from "../../../../../../definitions/idpay/TransactionOperationDTO"; import { VSpacer } from "../../../../../components/core/spacer/Spacer"; import { Body } from "../../../../../components/core/typography/Body"; import { H1 } from "../../../../../components/core/typography/H1"; diff --git a/ts/features/idpay/initiative/details/store/__test__/store.test.ts b/ts/features/idpay/initiative/details/store/__test__/store.test.ts index dc784d6fa34..2bb26aa4cec 100644 --- a/ts/features/idpay/initiative/details/store/__test__/store.test.ts +++ b/ts/features/idpay/initiative/details/store/__test__/store.test.ts @@ -8,13 +8,13 @@ import { idpayTimelineLastUpdateSelector, idpayTimelineSelector } from ".."; -import { TimelineDTO } from "../../../../../../../definitions/idpay/timeline/TimelineDTO"; -import { OperationTypeEnum as TransactionOperationType } from "../../../../../../../definitions/idpay/timeline/TransactionOperationDTO"; +import { TimelineDTO } from "../../../../../../../definitions/idpay/TimelineDTO"; +import { OperationTypeEnum as TransactionOperationType } from "../../../../../../../definitions/idpay/TransactionOperationDTO"; import { InitiativeDTO, StatusEnum -} from "../../../../../../../definitions/idpay/wallet/InitiativeDTO"; -import { TransactionDetailDTO } from "../../../../../../../InstrumentOperationDTO/../definitions/idpay/timeline/TransactionDetailDTO"; +} from "../../../../../../../definitions/idpay/InitiativeDTO"; +import { TransactionDetailDTO } from "../../../../../../../InstrumentOperationDTO/../definitions/idpay/TransactionDetailDTO"; import { applicationChangeState } from "../../../../../../store/actions/application"; import { appReducer } from "../../../../../../store/reducers"; import { NetworkError } from "../../../../../../utils/errors"; diff --git a/ts/features/idpay/initiative/details/store/actions/index.ts b/ts/features/idpay/initiative/details/store/actions/index.ts index 31a5389a15a..0952b43c43f 100644 --- a/ts/features/idpay/initiative/details/store/actions/index.ts +++ b/ts/features/idpay/initiative/details/store/actions/index.ts @@ -1,8 +1,8 @@ import { ActionType, createAsyncAction } from "typesafe-actions"; -import { OperationDTO } from "../../../../../../../definitions/idpay/timeline/OperationDTO"; -import { OperationListDTO } from "../../../../../../../definitions/idpay/timeline/OperationListDTO"; -import { TimelineDTO } from "../../../../../../../definitions/idpay/timeline/TimelineDTO"; -import { InitiativeDTO } from "../../../../../../../definitions/idpay/wallet/InitiativeDTO"; +import { OperationDTO } from "../../../../../../../definitions/idpay/OperationDTO"; +import { OperationListDTO } from "../../../../../../../definitions/idpay/OperationListDTO"; +import { TimelineDTO } from "../../../../../../../definitions/idpay/TimelineDTO"; +import { InitiativeDTO } from "../../../../../../../definitions/idpay/InitiativeDTO"; import { NetworkError } from "../../../../../../utils/errors"; export type IdPayInitiativeGetPayloadType = { initiativeId: string }; diff --git a/ts/features/idpay/initiative/details/store/index.ts b/ts/features/idpay/initiative/details/store/index.ts index 76e9c72a584..c16005814d7 100644 --- a/ts/features/idpay/initiative/details/store/index.ts +++ b/ts/features/idpay/initiative/details/store/index.ts @@ -2,9 +2,9 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; import * as _ from "lodash"; import { createSelector } from "reselect"; import { getType } from "typesafe-actions"; -import { OperationDTO } from "../../../../../../definitions/idpay/timeline/OperationDTO"; -import { TimelineDTO } from "../../../../../../definitions/idpay/timeline/TimelineDTO"; -import { InitiativeDTO } from "../../../../../../definitions/idpay/wallet/InitiativeDTO"; +import { OperationDTO } from "../../../../../../definitions/idpay/OperationDTO"; +import { TimelineDTO } from "../../../../../../definitions/idpay/TimelineDTO"; +import { InitiativeDTO } from "../../../../../../definitions/idpay/InitiativeDTO"; import { Action } from "../../../../../store/actions/types"; import { GlobalState } from "../../../../../store/reducers/types"; import { NetworkError } from "../../../../../utils/errors"; diff --git a/ts/features/idpay/onboarding/api/client.ts b/ts/features/idpay/onboarding/api/client.ts deleted file mode 100644 index 6c6a6ef5f98..00000000000 --- a/ts/features/idpay/onboarding/api/client.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createClient } from "../../../../../definitions/idpay/onboarding/client"; -import { defaultRetryingFetch } from "../../../../utils/fetch"; - -const createOnboardingClient = (baseUrl: string) => - createClient({ - baseUrl, - fetchApi: defaultRetryingFetch() - }); - -export type OnboardingClient = ReturnType; - -export { createOnboardingClient }; diff --git a/ts/features/idpay/onboarding/screens/BoolValuePrerequisitesScreen.tsx b/ts/features/idpay/onboarding/screens/BoolValuePrerequisitesScreen.tsx index 3ff1bf77120..5148f6bb8cf 100644 --- a/ts/features/idpay/onboarding/screens/BoolValuePrerequisitesScreen.tsx +++ b/ts/features/idpay/onboarding/screens/BoolValuePrerequisitesScreen.tsx @@ -2,7 +2,7 @@ import { useSelector } from "@xstate/react"; import React from "react"; import { SafeAreaView, View } from "react-native"; import { ScrollView } from "react-native-gesture-handler"; -import { SelfDeclarationBoolDTO } from "../../../../../definitions/idpay/onboarding/SelfDeclarationBoolDTO"; +import { SelfDeclarationBoolDTO } from "../../../../../definitions/idpay/SelfDeclarationBoolDTO"; import { VSpacer } from "../../../../components/core/spacer/Spacer"; import { Body } from "../../../../components/core/typography/Body"; import { H1 } from "../../../../components/core/typography/H1"; diff --git a/ts/features/idpay/onboarding/xstate/__tests__/machine.test.ts b/ts/features/idpay/onboarding/xstate/__tests__/machine.test.ts index 858953583b9..0185dd238e3 100644 --- a/ts/features/idpay/onboarding/xstate/__tests__/machine.test.ts +++ b/ts/features/idpay/onboarding/xstate/__tests__/machine.test.ts @@ -1,21 +1,21 @@ /* eslint-disable sonarjs/no-identical-functions */ /* eslint-disable functional/no-let */ -import { waitFor } from "@testing-library/react-native"; import * as O from "fp-ts/lib/Option"; import { interpret } from "xstate"; -import { PDNDCriteriaDTO } from "../../../../../../definitions/idpay/onboarding/PDNDCriteriaDTO"; -import { RequiredCriteriaDTO } from "../../../../../../definitions/idpay/onboarding/RequiredCriteriaDTO"; -import { SelfConsentMultiDTO } from "../../../../../../definitions/idpay/onboarding/SelfConsentMultiDTO"; +import { waitFor } from "@testing-library/react-native"; +import { createIDPayOnboardingMachine } from "../machine"; +import { RequiredCriteriaDTO } from "../../../../../../definitions/idpay/RequiredCriteriaDTO"; +import { PDNDCriteriaDTO } from "../../../../../../definitions/idpay/PDNDCriteriaDTO"; import { SelfDeclarationBoolDTO, _typeEnum as SelfDeclarationBoolDTOType -} from "../../../../../../definitions/idpay/onboarding/SelfDeclarationBoolDTO"; +} from "../../../../../../definitions/idpay/SelfDeclarationBoolDTO"; import { SelfDeclarationMultiDTO, _typeEnum as SelfDeclarationMultiDTOType -} from "../../../../../../definitions/idpay/onboarding/SelfDeclarationMultiDTO"; +} from "../../../../../../definitions/idpay/SelfDeclarationMultiDTO"; +import { SelfConsentMultiDTO } from "../../../../../../definitions/idpay/SelfConsentMultiDTO"; import { OnboardingFailureEnum } from "../failure"; -import { createIDPayOnboardingMachine } from "../machine"; import { mockActions } from "../__mocks__/actions"; import { mockServices } from "../__mocks__/services"; diff --git a/ts/features/idpay/onboarding/xstate/__tests__/services.test.ts b/ts/features/idpay/onboarding/xstate/__tests__/services.test.ts index 3ad7a33e954..40b263125d5 100644 --- a/ts/features/idpay/onboarding/xstate/__tests__/services.test.ts +++ b/ts/features/idpay/onboarding/xstate/__tests__/services.test.ts @@ -2,19 +2,20 @@ import * as E from "fp-ts/lib/Either"; import * as O from "fp-ts/lib/Option"; import { PreferredLanguageEnum } from "../../../../../../definitions/backend/PreferredLanguage"; -import { ErrorDto } from "../../../../../../definitions/idpay/onboarding/ErrorDto"; -import { InitiativeDto } from "../../../../../../definitions/idpay/onboarding/InitiativeDto"; +import { ErrorDTO } from "../../../../../../definitions/idpay/ErrorDTO"; +import { InitiativeInfoDTO } from "../../../../../../definitions/idpay/InitiativeInfoDTO"; import { OnboardingStatusDTO, StatusEnum -} from "../../../../../../definitions/idpay/onboarding/OnboardingStatusDTO"; -import { RequiredCriteriaDTO } from "../../../../../../definitions/idpay/onboarding/RequiredCriteriaDTO"; -import { _typeEnum as BoolTypeEnum } from "../../../../../../definitions/idpay/onboarding/SelfConsentBoolDTO"; -import { SelfConsentDTO } from "../../../../../../definitions/idpay/onboarding/SelfConsentDTO"; +} from "../../../../../../definitions/idpay/OnboardingStatusDTO"; +import { RequiredCriteriaDTO } from "../../../../../../definitions/idpay/RequiredCriteriaDTO"; +import { _typeEnum as BoolTypeEnum } from "../../../../../../definitions/idpay/SelfConsentBoolDTO"; +import { SelfConsentDTO } from "../../../../../../definitions/idpay/SelfConsentDTO"; import { SelfConsentMultiDTO, _typeEnum as MultiTypeEnum -} from "../../../../../../definitions/idpay/onboarding/SelfConsentMultiDTO"; +} from "../../../../../../definitions/idpay/SelfConsentMultiDTO"; +import { mockIDPayClient } from "../../../common/api/__mocks__/client"; import { OnboardingFailureEnum } from "../failure"; import { Context } from "../machine"; import { createServicesImplementation } from "../services"; @@ -32,7 +33,7 @@ const T_CONTEXT: Context = { const T_SERVICE_ID = "efg456"; -const T_INITIATIVE_DTO: InitiativeDto = { +const T_INITIATIVE_INFO_DTO: InitiativeInfoDTO = { initiativeId: "1234" }; @@ -89,17 +90,9 @@ const T_ACCEPTED_SELF_DECLARATION_LIST: Array = [ ...Object.values(T_MULTI_CONSENTS_ANSWERS) ] as Array; -const mockOnboardingClient = { - getInitiativeData: jest.fn(), - checkPrerequisites: jest.fn(), - consentOnboarding: jest.fn(), - onboardingCitizen: jest.fn(), - onboardingStatus: jest.fn() -}; - describe("IDPay Onboarding machine services", () => { const services = createServicesImplementation( - mockOnboardingClient, + mockIDPayClient, T_AUTH_TOKEN, T_PREFERRED_LANGUAGE ); @@ -114,14 +107,14 @@ describe("IDPay Onboarding machine services", () => { OnboardingFailureEnum.GENERIC ); - expect(mockOnboardingClient.getInitiativeData).toHaveBeenCalledTimes(0); + expect(mockIDPayClient.getInitiativeData).toHaveBeenCalledTimes(0); }); it("should fail if response status code != 200", async () => { - const response: E.Either = + const response: E.Either = E.right({ status: 400, value: { code: 0, message: "" } }); - mockOnboardingClient.getInitiativeData.mockImplementation(() => response); + mockIDPayClient.getInitiativeData.mockImplementation(() => response); await expect( services.loadInitiative({ @@ -130,7 +123,7 @@ describe("IDPay Onboarding machine services", () => { }) ).rejects.toMatch(OnboardingFailureEnum.GENERIC); - expect(mockOnboardingClient.getInitiativeData).toHaveBeenCalledWith( + expect(mockIDPayClient.getInitiativeData).toHaveBeenCalledWith( expect.objectContaining({ bearerAuth: T_AUTH_TOKEN, "Accept-Language": T_PREFERRED_LANGUAGE, @@ -142,19 +135,19 @@ describe("IDPay Onboarding machine services", () => { it("should get initiative data", async () => { const response: E.Either< Error, - { status: number; value?: InitiativeDto } - > = E.right({ status: 200, value: T_INITIATIVE_DTO }); + { status: number; value?: InitiativeInfoDTO } + > = E.right({ status: 200, value: T_INITIATIVE_INFO_DTO }); - mockOnboardingClient.getInitiativeData.mockImplementation(() => response); + mockIDPayClient.getInitiativeData.mockImplementation(() => response); await expect( services.loadInitiative({ ...T_CONTEXT, serviceId: T_SERVICE_ID }) - ).resolves.toMatchObject(T_INITIATIVE_DTO); + ).resolves.toMatchObject(T_INITIATIVE_INFO_DTO); - expect(mockOnboardingClient.getInitiativeData).toHaveBeenCalledWith( + expect(mockIDPayClient.getInitiativeData).toHaveBeenCalledWith( expect.objectContaining({ bearerAuth: T_AUTH_TOKEN, "Accept-Language": T_PREFERRED_LANGUAGE, @@ -170,51 +163,51 @@ describe("IDPay Onboarding machine services", () => { OnboardingFailureEnum.GENERIC ); - expect(mockOnboardingClient.onboardingStatus).toHaveBeenCalledTimes(0); + expect(mockIDPayClient.onboardingStatus).toHaveBeenCalledTimes(0); }); it("should fail if response status code != 200", async () => { - const response: E.Either = + const response: E.Either = E.right({ status: 400, value: { code: 0, message: "" } }); - mockOnboardingClient.onboardingStatus.mockImplementation(() => response); + mockIDPayClient.onboardingStatus.mockImplementation(() => response); await expect( services.loadInitiativeStatus({ ...T_CONTEXT, serviceId: T_SERVICE_ID, - initiative: T_INITIATIVE_DTO + initiative: T_INITIATIVE_INFO_DTO }) ).rejects.toMatch(OnboardingFailureEnum.GENERIC); - expect(mockOnboardingClient.onboardingStatus).toHaveBeenCalledWith( + expect(mockIDPayClient.onboardingStatus).toHaveBeenCalledWith( expect.objectContaining({ bearerAuth: T_AUTH_TOKEN, "Accept-Language": T_PREFERRED_LANGUAGE, - initiativeId: T_INITIATIVE_DTO.initiativeId + initiativeId: T_INITIATIVE_INFO_DTO.initiativeId }) ); }); it("should return none if response status code == 404", async () => { - const response: E.Either = + const response: E.Either = E.right({ status: 404, value: { code: 0, message: "" } }); - mockOnboardingClient.onboardingStatus.mockImplementation(() => response); + mockIDPayClient.onboardingStatus.mockImplementation(() => response); await expect( services.loadInitiativeStatus({ ...T_CONTEXT, serviceId: T_SERVICE_ID, - initiative: T_INITIATIVE_DTO + initiative: T_INITIATIVE_INFO_DTO }) ).resolves.toMatchObject(O.none); - expect(mockOnboardingClient.onboardingStatus).toHaveBeenCalledWith( + expect(mockIDPayClient.onboardingStatus).toHaveBeenCalledWith( expect.objectContaining({ bearerAuth: T_AUTH_TOKEN, "Accept-Language": T_PREFERRED_LANGUAGE, - initiativeId: T_INITIATIVE_DTO.initiativeId + initiativeId: T_INITIATIVE_INFO_DTO.initiativeId }) ); }); @@ -238,15 +231,13 @@ describe("IDPay Onboarding machine services", () => { { status: number; value?: OnboardingStatusDTO } > = E.right({ status: 200, value: { status } }); - mockOnboardingClient.onboardingStatus.mockImplementation( - () => response - ); + mockIDPayClient.onboardingStatus.mockImplementation(() => response); await expect( services.loadInitiativeStatus({ ...T_CONTEXT, serviceId: T_SERVICE_ID, - initiative: T_INITIATIVE_DTO + initiative: T_INITIATIVE_INFO_DTO }) ).rejects.toMatch(failure); } @@ -265,15 +256,13 @@ describe("IDPay Onboarding machine services", () => { { status: number; value?: OnboardingStatusDTO } > = E.right({ status: 200, value: { status } }); - mockOnboardingClient.onboardingStatus.mockImplementation( - () => response - ); + mockIDPayClient.onboardingStatus.mockImplementation(() => response); await expect( services.loadInitiativeStatus({ ...T_CONTEXT, serviceId: T_SERVICE_ID, - initiative: T_INITIATIVE_DTO + initiative: T_INITIATIVE_INFO_DTO }) ).resolves.toMatchObject(O.some(status)); } @@ -286,29 +275,29 @@ describe("IDPay Onboarding machine services", () => { OnboardingFailureEnum.GENERIC ); - expect(mockOnboardingClient.onboardingCitizen).toHaveBeenCalledTimes(0); + expect(mockIDPayClient.onboardingCitizen).toHaveBeenCalledTimes(0); }); it("should fail if response status code != 204", async () => { - const response: E.Either = + const response: E.Either = E.right({ status: 400, value: { code: 0, message: "" } }); - mockOnboardingClient.onboardingCitizen.mockImplementation(() => response); + mockIDPayClient.onboardingCitizen.mockImplementation(() => response); await expect( services.acceptTos({ ...T_CONTEXT, serviceId: T_SERVICE_ID, - initiative: T_INITIATIVE_DTO + initiative: T_INITIATIVE_INFO_DTO }) ).rejects.toMatch(OnboardingFailureEnum.GENERIC); - expect(mockOnboardingClient.onboardingCitizen).toHaveBeenCalledWith( + expect(mockIDPayClient.onboardingCitizen).toHaveBeenCalledWith( expect.objectContaining({ bearerAuth: T_AUTH_TOKEN, "Accept-Language": T_PREFERRED_LANGUAGE, body: { - initiativeId: T_INITIATIVE_DTO.initiativeId + initiativeId: T_INITIATIVE_INFO_DTO.initiativeId } }) ); @@ -318,22 +307,22 @@ describe("IDPay Onboarding machine services", () => { const response: E.Either = E.right({ status: 204, value: undefined }); - mockOnboardingClient.onboardingCitizen.mockImplementation(() => response); + mockIDPayClient.onboardingCitizen.mockImplementation(() => response); await expect( services.acceptTos({ ...T_CONTEXT, serviceId: T_SERVICE_ID, - initiative: T_INITIATIVE_DTO + initiative: T_INITIATIVE_INFO_DTO }) ).resolves.toBeUndefined(); - expect(mockOnboardingClient.onboardingCitizen).toHaveBeenCalledWith( + expect(mockIDPayClient.onboardingCitizen).toHaveBeenCalledWith( expect.objectContaining({ bearerAuth: T_AUTH_TOKEN, "Accept-Language": T_PREFERRED_LANGUAGE, body: { - initiativeId: T_INITIATIVE_DTO.initiativeId + initiativeId: T_INITIATIVE_INFO_DTO.initiativeId } }) ); @@ -346,31 +335,29 @@ describe("IDPay Onboarding machine services", () => { OnboardingFailureEnum.GENERIC ); - expect(mockOnboardingClient.checkPrerequisites).toHaveBeenCalledTimes(0); + expect(mockIDPayClient.checkPrerequisites).toHaveBeenCalledTimes(0); }); it("should fail if response status code != 200 or 202", async () => { - const response: E.Either = + const response: E.Either = E.right({ status: 400, value: { code: 0, message: "" } }); - mockOnboardingClient.checkPrerequisites.mockImplementation( - () => response - ); + mockIDPayClient.checkPrerequisites.mockImplementation(() => response); await expect( services.loadRequiredCriteria({ ...T_CONTEXT, serviceId: T_SERVICE_ID, - initiative: T_INITIATIVE_DTO + initiative: T_INITIATIVE_INFO_DTO }) ).rejects.toMatch(OnboardingFailureEnum.GENERIC); - expect(mockOnboardingClient.checkPrerequisites).toHaveBeenCalledWith( + expect(mockIDPayClient.checkPrerequisites).toHaveBeenCalledWith( expect.objectContaining({ bearerAuth: T_AUTH_TOKEN, "Accept-Language": T_PREFERRED_LANGUAGE, body: { - initiativeId: T_INITIATIVE_DTO.initiativeId + initiativeId: T_INITIATIVE_INFO_DTO.initiativeId } }) ); @@ -380,24 +367,22 @@ describe("IDPay Onboarding machine services", () => { const response: E.Either = E.right({ status: 202, value: undefined }); - mockOnboardingClient.checkPrerequisites.mockImplementation( - () => response - ); + mockIDPayClient.checkPrerequisites.mockImplementation(() => response); await expect( services.loadRequiredCriteria({ ...T_CONTEXT, serviceId: T_SERVICE_ID, - initiative: T_INITIATIVE_DTO + initiative: T_INITIATIVE_INFO_DTO }) ).resolves.toMatchObject(O.none); - expect(mockOnboardingClient.checkPrerequisites).toHaveBeenCalledWith( + expect(mockIDPayClient.checkPrerequisites).toHaveBeenCalledWith( expect.objectContaining({ bearerAuth: T_AUTH_TOKEN, "Accept-Language": T_PREFERRED_LANGUAGE, body: { - initiativeId: T_INITIATIVE_DTO.initiativeId + initiativeId: T_INITIATIVE_INFO_DTO.initiativeId } }) ); @@ -412,24 +397,22 @@ describe("IDPay Onboarding machine services", () => { value: T_REQUIRED_CRITERIA_DTO }); - mockOnboardingClient.checkPrerequisites.mockImplementation( - () => response - ); + mockIDPayClient.checkPrerequisites.mockImplementation(() => response); await expect( services.loadRequiredCriteria({ ...T_CONTEXT, serviceId: T_SERVICE_ID, - initiative: T_INITIATIVE_DTO + initiative: T_INITIATIVE_INFO_DTO }) ).resolves.toMatchObject(O.some(T_REQUIRED_CRITERIA_DTO)); - expect(mockOnboardingClient.checkPrerequisites).toHaveBeenCalledWith( + expect(mockIDPayClient.checkPrerequisites).toHaveBeenCalledWith( expect.objectContaining({ bearerAuth: T_AUTH_TOKEN, "Accept-Language": T_PREFERRED_LANGUAGE, body: { - initiativeId: T_INITIATIVE_DTO.initiativeId + initiativeId: T_INITIATIVE_INFO_DTO.initiativeId } }) ); @@ -442,7 +425,7 @@ describe("IDPay Onboarding machine services", () => { OnboardingFailureEnum.GENERIC ); - expect(mockOnboardingClient.consentOnboarding).toHaveBeenCalledTimes(0); + expect(mockIDPayClient.consentOnboarding).toHaveBeenCalledTimes(0); }); it("should fail if required criteria in context is none", async () => { @@ -453,31 +436,31 @@ describe("IDPay Onboarding machine services", () => { }) ).rejects.toMatch(OnboardingFailureEnum.GENERIC); - expect(mockOnboardingClient.consentOnboarding).toHaveBeenCalledTimes(0); + expect(mockIDPayClient.consentOnboarding).toHaveBeenCalledTimes(0); }); it("should fail if response status code != 202", async () => { - const response: E.Either = + const response: E.Either = E.right({ status: 400, value: { code: 0, message: "" } }); - mockOnboardingClient.consentOnboarding.mockImplementation(() => response); + mockIDPayClient.consentOnboarding.mockImplementation(() => response); await expect( services.acceptRequiredCriteria({ ...T_CONTEXT, serviceId: T_SERVICE_ID, - initiative: T_INITIATIVE_DTO, + initiative: T_INITIATIVE_INFO_DTO, requiredCriteria: O.some(T_REQUIRED_CRITERIA_DTO), multiConsentsAnswers: T_MULTI_CONSENTS_ANSWERS }) ).rejects.toMatch(OnboardingFailureEnum.GENERIC); - expect(mockOnboardingClient.consentOnboarding).toHaveBeenCalledWith( + expect(mockIDPayClient.consentOnboarding).toHaveBeenCalledWith( expect.objectContaining({ bearerAuth: T_AUTH_TOKEN, "Accept-Language": T_PREFERRED_LANGUAGE, body: { - initiativeId: T_INITIATIVE_DTO.initiativeId, + initiativeId: T_INITIATIVE_INFO_DTO.initiativeId, pdndAccept: true, selfDeclarationList: T_ACCEPTED_SELF_DECLARATION_LIST } @@ -489,24 +472,24 @@ describe("IDPay Onboarding machine services", () => { const response: E.Either = E.right({ status: 202, value: undefined }); - mockOnboardingClient.consentOnboarding.mockImplementation(() => response); + mockIDPayClient.consentOnboarding.mockImplementation(() => response); await expect( services.acceptRequiredCriteria({ ...T_CONTEXT, serviceId: T_SERVICE_ID, - initiative: T_INITIATIVE_DTO, + initiative: T_INITIATIVE_INFO_DTO, requiredCriteria: O.some(T_REQUIRED_CRITERIA_DTO), multiConsentsAnswers: T_MULTI_CONSENTS_ANSWERS }) ).resolves.toBeUndefined(); - expect(mockOnboardingClient.consentOnboarding).toHaveBeenCalledWith( + expect(mockIDPayClient.consentOnboarding).toHaveBeenCalledWith( expect.objectContaining({ bearerAuth: T_AUTH_TOKEN, "Accept-Language": T_PREFERRED_LANGUAGE, body: { - initiativeId: T_INITIATIVE_DTO.initiativeId, + initiativeId: T_INITIATIVE_INFO_DTO.initiativeId, pdndAccept: true, selfDeclarationList: T_ACCEPTED_SELF_DECLARATION_LIST } diff --git a/ts/features/idpay/onboarding/xstate/machine.ts b/ts/features/idpay/onboarding/xstate/machine.ts index cebf8133a61..c9393851e4d 100644 --- a/ts/features/idpay/onboarding/xstate/machine.ts +++ b/ts/features/idpay/onboarding/xstate/machine.ts @@ -2,11 +2,11 @@ import { pipe } from "fp-ts/lib/function"; /* eslint-disable no-underscore-dangle */ import * as O from "fp-ts/lib/Option"; import { assign, createMachine } from "xstate"; -import { InitiativeDto } from "../../../../../definitions/idpay/onboarding/InitiativeDto"; -import { StatusEnum } from "../../../../../definitions/idpay/onboarding/OnboardingStatusDTO"; -import { RequiredCriteriaDTO } from "../../../../../definitions/idpay/onboarding/RequiredCriteriaDTO"; -import { SelfConsentMultiDTO } from "../../../../../definitions/idpay/onboarding/SelfConsentMultiDTO"; -import { SelfDeclarationBoolDTO } from "../../../../../definitions/idpay/onboarding/SelfDeclarationBoolDTO"; +import { InitiativeInfoDTO } from "../../../../../definitions/idpay/InitiativeInfoDTO"; +import { StatusEnum } from "../../../../../definitions/idpay/OnboardingStatusDTO"; +import { RequiredCriteriaDTO } from "../../../../../definitions/idpay/RequiredCriteriaDTO"; +import { SelfConsentMultiDTO } from "../../../../../definitions/idpay/SelfConsentMultiDTO"; +import { SelfDeclarationBoolDTO } from "../../../../../definitions/idpay/SelfDeclarationBoolDTO"; import { LOADING_TAG, UPSERTING_TAG, @@ -21,7 +21,7 @@ import { // Context types export type Context = { serviceId?: string; - initiative?: InitiativeDto; + initiative?: InitiativeInfoDTO; initiativeStatus: O.Option; requiredCriteria?: O.Option; multiConsentsPage: number; @@ -92,7 +92,7 @@ type Events = // Services types type Services = { loadInitiative: { - data: InitiativeDto; + data: InitiativeInfoDTO; }; loadInitiativeStatus: { data: O.Option; diff --git a/ts/features/idpay/onboarding/xstate/provider.tsx b/ts/features/idpay/onboarding/xstate/provider.tsx index 9ceaf2bef71..9066a96c3de 100644 --- a/ts/features/idpay/onboarding/xstate/provider.tsx +++ b/ts/features/idpay/onboarding/xstate/provider.tsx @@ -24,7 +24,7 @@ import { fromLocaleToPreferredLanguage, getLocalePrimaryWithFallback } from "../../../../utils/locale"; -import { createOnboardingClient } from "../api/client"; +import { createIDPayClient } from "../../common/api/client"; import { IDPayOnboardingParamsList, IDPayOnboardingStackNavigationProp @@ -73,13 +73,9 @@ const IDPayOnboardingMachineProvider = (props: Props) => { fromLocaleToPreferredLanguage ); - const onboardingClient = createOnboardingClient(baseUrl); + const client = createIDPayClient(baseUrl); - const services = createServicesImplementation( - onboardingClient, - token, - language - ); + const services = createServicesImplementation(client, token, language); const actions = createActionsImplementation( rootNavigation, diff --git a/ts/features/idpay/onboarding/xstate/selectors.ts b/ts/features/idpay/onboarding/xstate/selectors.ts index 1f06be8fe27..db81e5ce126 100644 --- a/ts/features/idpay/onboarding/xstate/selectors.ts +++ b/ts/features/idpay/onboarding/xstate/selectors.ts @@ -3,10 +3,10 @@ import { pipe } from "fp-ts/lib/function"; import * as O from "fp-ts/lib/Option"; import { createSelector } from "reselect"; import { StateFrom } from "xstate"; -import { RequiredCriteriaDTO } from "../../../../../definitions/idpay/onboarding/RequiredCriteriaDTO"; -import { SelfDeclarationBoolDTO } from "../../../../../definitions/idpay/onboarding/SelfDeclarationBoolDTO"; -import { SelfDeclarationDTO } from "../../../../../definitions/idpay/onboarding/SelfDeclarationDTO"; -import { SelfDeclarationMultiDTO } from "../../../../../definitions/idpay/onboarding/SelfDeclarationMultiDTO"; +import { RequiredCriteriaDTO } from "../../../../../definitions/idpay/RequiredCriteriaDTO"; +import { SelfDeclarationBoolDTO } from "../../../../../definitions/idpay/SelfDeclarationBoolDTO"; +import { SelfDeclarationDTO } from "../../../../../definitions/idpay/SelfDeclarationDTO"; +import { SelfDeclarationMultiDTO } from "../../../../../definitions/idpay/SelfDeclarationMultiDTO"; import { LOADING_TAG, UPSERTING_TAG } from "../../../../utils/xstate"; import { Context, IDPayOnboardingMachineType } from "./machine"; diff --git a/ts/features/idpay/onboarding/xstate/services.ts b/ts/features/idpay/onboarding/xstate/services.ts index 7fba626c17b..3155f530ed4 100644 --- a/ts/features/idpay/onboarding/xstate/services.ts +++ b/ts/features/idpay/onboarding/xstate/services.ts @@ -1,19 +1,19 @@ /* eslint-disable no-underscore-dangle */ import * as E from "fp-ts/lib/Either"; -import * as O from "fp-ts/lib/Option"; import { pipe } from "fp-ts/lib/function"; +import * as O from "fp-ts/lib/Option"; import { PreferredLanguage } from "../../../../../definitions/backend/PreferredLanguage"; -import { InitiativeDto } from "../../../../../definitions/idpay/onboarding/InitiativeDto"; -import { StatusEnum } from "../../../../../definitions/idpay/onboarding/OnboardingStatusDTO"; -import { RequiredCriteriaDTO } from "../../../../../definitions/idpay/onboarding/RequiredCriteriaDTO"; -import { SelfConsentDTO } from "../../../../../definitions/idpay/onboarding/SelfConsentDTO"; -import { OnboardingClient } from "../api/client"; +import { InitiativeInfoDTO } from "../../../../../definitions/idpay/InitiativeInfoDTO"; +import { StatusEnum as OnbordingStatusEnum } from "../../../../../definitions/idpay/OnboardingStatusDTO"; +import { RequiredCriteriaDTO } from "../../../../../definitions/idpay/RequiredCriteriaDTO"; +import { SelfConsentDTO } from "../../../../../definitions/idpay/SelfConsentDTO"; +import { IDPayClient } from "../../common/api/client"; import { OnboardingFailureEnum } from "./failure"; import { Context } from "./machine"; import { getBoolRequiredCriteriaFromContext } from "./selectors"; const createServicesImplementation = ( - onboardingClient: OnboardingClient, + client: IDPayClient, token: string, language: PreferredLanguage ) => { @@ -27,12 +27,12 @@ const createServicesImplementation = ( return Promise.reject(OnboardingFailureEnum.GENERIC); } - const dataResponse = await onboardingClient.getInitiativeData({ + const dataResponse = await client.getInitiativeData({ ...clientOptions, serviceId: context.serviceId }); - const data: Promise = pipe( + const data: Promise = pipe( dataResponse, E.fold( _ => Promise.reject(OnboardingFailureEnum.GENERIC), @@ -53,28 +53,28 @@ const createServicesImplementation = ( return Promise.reject(OnboardingFailureEnum.GENERIC); } - const statusResponse = await onboardingClient.onboardingStatus({ + const statusResponse = await client.onboardingStatus({ ...clientOptions, initiativeId: context.initiative.initiativeId }); - const data: Promise> = pipe( + const data: Promise> = pipe( statusResponse, E.fold( _ => Promise.reject(OnboardingFailureEnum.GENERIC), response => { if (response.status === 200) { switch (response.value.status) { - case StatusEnum.ELIGIBILE_KO: + case OnbordingStatusEnum.ELIGIBILE_KO: return Promise.reject(OnboardingFailureEnum.NOT_ELIGIBLE); - case StatusEnum.ONBOARDING_KO: + case OnbordingStatusEnum.ONBOARDING_KO: return Promise.reject(OnboardingFailureEnum.NO_REQUIREMENTS); - case StatusEnum.ONBOARDING_OK: + case OnbordingStatusEnum.ONBOARDING_OK: return Promise.reject(OnboardingFailureEnum.ONBOARDED); - case StatusEnum.UNSUBSCRIBED: + case OnbordingStatusEnum.UNSUBSCRIBED: return Promise.reject(OnboardingFailureEnum.UNSUBSCRIBED); - case StatusEnum.ELIGIBLE: - case StatusEnum.ON_EVALUATION: + case OnbordingStatusEnum.ELIGIBLE: + case OnbordingStatusEnum.ON_EVALUATION: return Promise.reject(OnboardingFailureEnum.ON_EVALUATION); default: return Promise.resolve(O.some(response.value.status)); @@ -97,7 +97,7 @@ const createServicesImplementation = ( return Promise.reject(OnboardingFailureEnum.GENERIC); } - const response = await onboardingClient.onboardingCitizen({ + const response = await client.onboardingCitizen({ ...clientOptions, body: { initiativeId: context.initiative.initiativeId @@ -126,7 +126,7 @@ const createServicesImplementation = ( return Promise.reject(OnboardingFailureEnum.GENERIC); } - const response = await onboardingClient.checkPrerequisites({ + const response = await client.checkPrerequisites({ ...clientOptions, body: { initiativeId: context.initiative.initiativeId @@ -174,7 +174,7 @@ const createServicesImplementation = ( ...Object.values(multiConsentsAnswers) ] as Array; - const response = await onboardingClient.consentOnboarding({ + const response = await client.consentOnboarding({ ...clientOptions, body: { initiativeId: initiative.initiativeId, diff --git a/ts/features/idpay/wallet/api/client.ts b/ts/features/idpay/wallet/api/client.ts deleted file mode 100644 index 569918e93bd..00000000000 --- a/ts/features/idpay/wallet/api/client.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createClient } from "../../../../../definitions/idpay/wallet/client"; -import { defaultRetryingFetch } from "../../../../utils/fetch"; - -const createIDPayWalletClient = (baseUrl: string) => - createClient({ - baseUrl, - fetchApi: defaultRetryingFetch() - }); - -export type IDPayWalletClient = ReturnType; - -export { createIDPayWalletClient }; diff --git a/ts/features/idpay/wallet/components/IDPayCardsInWalletContainer.tsx b/ts/features/idpay/wallet/components/IDPayCardsInWalletContainer.tsx index a5fec9eac7c..d5277f1801f 100644 --- a/ts/features/idpay/wallet/components/IDPayCardsInWalletContainer.tsx +++ b/ts/features/idpay/wallet/components/IDPayCardsInWalletContainer.tsx @@ -2,7 +2,7 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; import { useNavigation } from "@react-navigation/native"; import React from "react"; import { View } from "react-native"; -import { InitiativeDTO } from "../../../../../definitions/idpay/wallet/InitiativeDTO"; +import { InitiativeDTO } from "../../../../../definitions/idpay/InitiativeDTO"; import { AppParamsList, IOStackNavigationProp diff --git a/ts/features/idpay/wallet/saga/__test__/handleGetIDPayWallet.test.ts b/ts/features/idpay/wallet/saga/__test__/handleGetIDPayWallet.test.ts index f8549f21dda..ae150eedc4a 100644 --- a/ts/features/idpay/wallet/saga/__test__/handleGetIDPayWallet.test.ts +++ b/ts/features/idpay/wallet/saga/__test__/handleGetIDPayWallet.test.ts @@ -2,8 +2,8 @@ import * as E from "fp-ts/lib/Either"; import { expectSaga } from "redux-saga-test-plan"; import { appReducer } from "../../../../../store/reducers"; import { idPayWalletGet } from "../../store/actions"; -import { WalletDTO } from "../../../../../../definitions/idpay/wallet/WalletDTO"; -import { ErrorDTO } from "../../../../../../definitions/idpay/wallet/ErrorDTO"; +import { WalletDTO } from "../../../../../../definitions/idpay/WalletDTO"; +import { ErrorDTO } from "../../../../../../definitions/idpay/ErrorDTO"; import { handleGetIDPayWallet } from "../handleGetIDPayWallet"; import { PreferredLanguageEnum } from "../../../../../../definitions/backend/PreferredLanguage"; diff --git a/ts/features/idpay/wallet/saga/handleGetIDPayWallet.ts b/ts/features/idpay/wallet/saga/handleGetIDPayWallet.ts index c3cb8706507..7601f75cd09 100644 --- a/ts/features/idpay/wallet/saga/handleGetIDPayWallet.ts +++ b/ts/features/idpay/wallet/saga/handleGetIDPayWallet.ts @@ -1,11 +1,11 @@ import { call, put } from "typed-redux-saga/macro"; import * as E from "fp-ts/lib/Either"; import { SagaCallReturnType } from "../../../../types/utils"; -import { IDPayWalletClient } from "../api/client"; import { idPayWalletGet } from "../store/actions"; import { readablePrivacyReport } from "../../../../utils/reporters"; import { getGenericError, getNetworkError } from "../../../../utils/errors"; import { PreferredLanguageEnum } from "../../../../../definitions/backend/PreferredLanguage"; +import { IDPayClient } from "../../common/api/client"; /** * Handle the remote call to retrieve the IDPay wallet @@ -13,7 +13,7 @@ import { PreferredLanguageEnum } from "../../../../../definitions/backend/Prefer * @param action */ export function* handleGetIDPayWallet( - getWallet: IDPayWalletClient["getWallet"], + getWallet: IDPayClient["getWallet"], token: string, language: PreferredLanguageEnum ) { diff --git a/ts/features/idpay/wallet/saga/index.ts b/ts/features/idpay/wallet/saga/index.ts index 7bfafe33ce3..8a673071ef8 100644 --- a/ts/features/idpay/wallet/saga/index.ts +++ b/ts/features/idpay/wallet/saga/index.ts @@ -1,48 +1,27 @@ import { SagaIterator } from "redux-saga"; -import { call, takeLatest, select } from "typed-redux-saga/macro"; -import * as O from "fp-ts/lib/Option"; -import { pipe } from "fp-ts/lib/function"; -import { createIDPayWalletClient } from "../api/client"; -import { - idPayTestToken, - idPayApiUatBaseUrl, - idPayApiBaseUrl -} from "../../../../config"; -import { idPayWalletGet } from "../store/actions"; -import { waitBackoffError } from "../../../../utils/backoffError"; -import { - isPagoPATestEnabledSelector, - preferredLanguageSelector -} from "../../../../store/reducers/persistedPreferences"; +import { call, takeLatest } from "typed-redux-saga/macro"; import { PreferredLanguageEnum } from "../../../../../definitions/backend/PreferredLanguage"; -import { fromLocaleToPreferredLanguage } from "../../../../utils/locale"; +import { waitBackoffError } from "../../../../utils/backoffError"; +import { IDPayClient } from "../../common/api/client"; +import { idPayWalletGet } from "../store/actions"; import { handleGetIDPayWallet } from "./handleGetIDPayWallet"; /** * Handle the IDPay Wallet requests * @param bearerToken */ -export function* watchIDPayWalletSaga(bearerToken: string): SagaIterator { - const isPagoPATestEnabled = yield* select(isPagoPATestEnabledSelector); - const baseUrl = isPagoPATestEnabled ? idPayApiUatBaseUrl : idPayApiBaseUrl; - const token = idPayTestToken ?? bearerToken; - - const idPayWalletClient = createIDPayWalletClient(baseUrl); - const language = yield* select(preferredLanguageSelector); - - const preferredLanguage = pipe( - language, - O.map(fromLocaleToPreferredLanguage), - O.getOrElse(() => PreferredLanguageEnum.it_IT) - ); - +export function* watchIDPayWalletSaga( + idPayClient: IDPayClient, + token: string, + preferredLanguage: PreferredLanguageEnum +): SagaIterator { // handle the request of getting id pay wallet yield* takeLatest(idPayWalletGet.request, function* () { // wait backoff time if there were previous errors yield* call(waitBackoffError, idPayWalletGet.failure); yield* call( handleGetIDPayWallet, - idPayWalletClient.getWallet, + idPayClient.getWallet, token, preferredLanguage ); diff --git a/ts/features/idpay/wallet/store/actions/index.ts b/ts/features/idpay/wallet/store/actions/index.ts index dcbacb9477c..074d1fee389 100644 --- a/ts/features/idpay/wallet/store/actions/index.ts +++ b/ts/features/idpay/wallet/store/actions/index.ts @@ -1,5 +1,5 @@ import { ActionType, createAsyncAction } from "typesafe-actions"; -import { WalletDTO } from "../../../../../../definitions/idpay/wallet/WalletDTO"; +import { WalletDTO } from "../../../../../../definitions/idpay/WalletDTO"; import { NetworkError } from "../../../../../utils/errors"; export const idPayWalletGet = createAsyncAction( diff --git a/ts/features/idpay/wallet/store/reducers/__test__/reducer.test.ts b/ts/features/idpay/wallet/store/reducers/__test__/reducer.test.ts index 158c9009954..e054d285b69 100644 --- a/ts/features/idpay/wallet/store/reducers/__test__/reducer.test.ts +++ b/ts/features/idpay/wallet/store/reducers/__test__/reducer.test.ts @@ -1,7 +1,7 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; import { createStore } from "redux"; import { idPayWalletInitiativeListSelector, idPayWalletSelector } from ".."; -import { WalletDTO } from "../../../../../../../definitions/idpay/wallet/WalletDTO"; +import { WalletDTO } from "../../../../../../../definitions/idpay/WalletDTO"; import { applicationChangeState } from "../../../../../../store/actions/application"; import { appReducer } from "../../../../../../store/reducers"; import { NetworkError } from "../../../../../../utils/errors"; diff --git a/ts/features/idpay/wallet/store/reducers/index.ts b/ts/features/idpay/wallet/store/reducers/index.ts index 80cf14e5134..7e02d4c5fc2 100644 --- a/ts/features/idpay/wallet/store/reducers/index.ts +++ b/ts/features/idpay/wallet/store/reducers/index.ts @@ -1,6 +1,6 @@ import * as pot from "@pagopa/ts-commons/lib/pot"; import { getType } from "typesafe-actions"; -import { WalletDTO } from "../../../../../../definitions/idpay/wallet/WalletDTO"; +import { WalletDTO } from "../../../../../../definitions/idpay/WalletDTO"; import { Action } from "../../../../../store/actions/types"; import { GlobalState } from "../../../../../store/reducers/types"; import { NetworkError } from "../../../../../utils/errors"; diff --git a/ts/sagas/startup.ts b/ts/sagas/startup.ts index 46f0b169ad9..8e365b3ece0 100644 --- a/ts/sagas/startup.ts +++ b/ts/sagas/startup.ts @@ -83,8 +83,7 @@ import { differentProfileLoggedIn } from "../store/actions/crossSessions"; import { clearAllAttachments } from "../features/messages/saga/clearAttachments"; import { watchMessageAttachmentsSaga } from "../features/messages/saga/attachments"; import { watchPnSaga } from "../features/pn/store/sagas/watchPnSaga"; -import { watchIDPayWalletSaga } from "../features/idpay/wallet/saga"; -import { idpayInitiativeDetailsSaga } from "../features/idpay/initiative/details/saga"; +import { watchIDPaySaga } from "../features/idpay/common/saga"; import { startAndReturnIdentificationResult, watchIdentification @@ -444,12 +443,8 @@ export function* initializeApplicationSaga(): Generator< yield* fork(watchMessageAttachmentsSaga, sessionToken); if (idPayEnabled) { - // Start watching for IDPay wallet actions - yield* fork(watchIDPayWalletSaga, maybeSessionInformation.value.bpdToken); - yield* fork( - idpayInitiativeDetailsSaga, - maybeSessionInformation.value.bpdToken - ); + // Start watching for IDPay actions + yield* fork(watchIDPaySaga, maybeSessionInformation.value.bpdToken); } if (fciEnabled) {