diff --git a/packages/api-v2/src/APIProvider.tsx b/packages/api-v2/src/APIProvider.tsx index 505dbf3666c1..0f6583dcd074 100644 --- a/packages/api-v2/src/APIProvider.tsx +++ b/packages/api-v2/src/APIProvider.tsx @@ -208,7 +208,7 @@ const APIProvider = ({ children, standalone = false }: PropsWithChildren { - let interval_id: NodeJS.Timer; + let interval_id: ReturnType; if (standalone) { interval_id = setInterval(() => standaloneDerivAPI.current?.send({ ping: 1 }), 10000); diff --git a/packages/api-v2/src/AuthProvider.tsx b/packages/api-v2/src/AuthProvider.tsx index 56da26ac2288..4f82c9d4670a 100644 --- a/packages/api-v2/src/AuthProvider.tsx +++ b/packages/api-v2/src/AuthProvider.tsx @@ -17,31 +17,66 @@ type AuthContextType = { error: unknown; }; +type LoginToken = { + loginId: string; + token: string; +}; + // Create the context const AuthContext = createContext(undefined); type AuthProviderProps = { children: React.ReactNode; + cookieTimeout?: number; }; -async function waitForLoginAndToken(): Promise { - const checkLogin = (resolve: (value: any) => void, reject: (reason?: any) => void) => { +function waitForLoginAndTokenWithTimeout(cookieTimeout = 10000) { + // Default timeout of 10 seconds + let timeoutHandle: NodeJS.Timeout | undefined, + cookieTimeoutHandle: NodeJS.Timeout | undefined, // Handle for the cookieTimeout + rejectFunction: (reason?: string) => void; // To be used for rejecting the promise in case of a timeout or cookieTimeout expiry + + const checkLogin = ( + resolve: (value: { loginId: string; token: string }) => void, + reject: (reason?: string) => void + ) => { const loginId = getActiveLoginIDFromLocalStorage(); const token = getToken(loginId as string); if (loginId && token) { - resolve({ - loginId, - token, - }); + clearTimeout(timeoutHandle); // Clear the checkLogin timeout as we've succeeded + clearTimeout(cookieTimeoutHandle); // Clear the cookieTimeout as well + resolve({ loginId, token }); } else { - setTimeout(checkLogin, 100, resolve, reject); + timeoutHandle = setTimeout(checkLogin, 100, resolve, reject); } }; - return new Promise(checkLogin); + // Function to clear the timeouts and reject the promise if called + const cleanup = () => { + clearTimeout(timeoutHandle); + clearTimeout(cookieTimeoutHandle); + rejectFunction('Operation cancelled'); + }; + + const promise = new Promise((resolve, reject) => { + rejectFunction = reject; // Assign reject function to be accessible outside promise scope for cleanup + + // Set up the cookieTimeout to reject the promise if not resolved in time + cookieTimeoutHandle = setTimeout(() => { + cleanup(); // Cleanup and reject the promise + reject(new Error('Waiting for login or token timed out')); + }, cookieTimeout); + + checkLogin(resolve, reject); + }); + + return { + promise, + cleanup, + }; } -const AuthProvider = ({ children }: AuthProviderProps) => { +const AuthProvider = ({ children, cookieTimeout }: AuthProviderProps) => { const [loginid, setLoginid] = useState(null); const { mutateAsync } = useMutation('authorize'); @@ -58,24 +93,33 @@ const AuthProvider = ({ children }: AuthProviderProps) => { setIsLoading(true); setIsSuccess(false); - waitForLoginAndToken().then(({ token }) => { - setIsLoading(true); - setIsFetching(true); - mutateAsync({ payload: { authorize: token || '' } }) - .then(res => { - setData(res); - setIsLoading(false); - setIsSuccess(true); - }) - .catch(() => { - setIsLoading(false); - setIsError(true); - }) - .finally(() => { - setIsLoading(false); - setIsFetching(false); - }); - }); + const { promise, cleanup } = waitForLoginAndTokenWithTimeout(cookieTimeout); + + promise + .then(async ({ token }) => { + setIsLoading(true); + setIsFetching(true); + await mutateAsync({ payload: { authorize: token || '' } }) + .then(res => { + setData(res); + setIsLoading(false); + setIsSuccess(true); + }) + .catch(() => { + setIsLoading(false); + setIsError(true); + }) + .finally(() => { + setIsLoading(false); + setIsFetching(false); + }); + }) + .catch(() => { + setIsLoading(false); + setIsError(true); + }); + + return cleanup; }, []); const switchAccount = useCallback( diff --git a/packages/api-v2/src/hooks/p2p/__tests__/useSettings.spec.tsx b/packages/api-v2/src/hooks/p2p/__tests__/useSettings.spec.tsx new file mode 100644 index 000000000000..3810a58517e7 --- /dev/null +++ b/packages/api-v2/src/hooks/p2p/__tests__/useSettings.spec.tsx @@ -0,0 +1,109 @@ +import React from 'react'; +import { renderHook } from '@testing-library/react-hooks'; +import APIProvider from '../../../APIProvider'; +import AuthProvider from '../../../AuthProvider'; +import useP2PSettings from '../entity/settings/p2p-settings/useSettings'; + +const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + +); + +describe('useP2PSettings', () => { + it('should return an empty object if data is not available', () => { + const { result } = renderHook(() => useP2PSettings(), { wrapper }); + expect(result.current.data).toEqual({}); + }); + + it('should return the correct data if data is available', () => { + const mockData = { + adverts_active_limit: 3, + adverts_archive_period: 3, + block_trade: { + disabled: 1, + maximum_advert_amount: 20000, + }, + cancellation_block_duration: 24, + cancellation_count_period: 24, + cancellation_grace_period: 0, + cancellation_limit: 300, + cross_border_ads_enabled: 1, + disabled: 0, + feature_level: 2, + fixed_rate_adverts: 'enabled', + float_rate_adverts: 'disabled', + float_rate_offset_limit: 10, + local_currencies: [ + { + display_name: 'US Dollar', + has_adverts: 0, + symbol: 'USD', + }, + ], + maximum_advert_amount: 3000, + maximum_order_amount: 1000, + order_daily_limit: 300, + order_payment_period: 15, + payment_methods_enabled: 1, + review_period: 24, + supported_currencies: ['usd'], + is_cross_border_ads_enabled: true, + is_disabled: false, + is_payment_methods_enabled: true, + rate_type: 'fixed', + float_rate_offset_limit_string: '10.00', + reached_target_date: false, + currency_list: [ + { + display_name: 'US Dollar', + has_adverts: 0, + is_default: 1, + text: 'USD', + value: 'USD', + }, + ], + }; + + window.localStorage.setItem('p2p_v2_p2p_settings', JSON.stringify(mockData)); + + const { result } = renderHook(() => useP2PSettings(), { wrapper }); + const p2p_settings = result.current.data; + + expect(p2p_settings?.adverts_active_limit).toBe(3); + expect(p2p_settings?.adverts_archive_period).toBe(3); + expect(p2p_settings?.block_trade?.disabled).toBe(1); + expect(p2p_settings?.block_trade?.maximum_advert_amount).toBe(20000); + expect(p2p_settings?.cancellation_block_duration).toBe(24); + expect(p2p_settings?.cancellation_count_period).toBe(24); + expect(p2p_settings?.cancellation_grace_period).toBe(0); + expect(p2p_settings?.cancellation_limit).toBe(300); + expect(p2p_settings?.cross_border_ads_enabled).toBe(1); + expect(p2p_settings?.disabled).toBe(0); + expect(p2p_settings?.feature_level).toBe(2); + expect(p2p_settings?.fixed_rate_adverts).toBe('enabled'); + expect(p2p_settings?.float_rate_adverts).toBe('disabled'); + expect(p2p_settings?.float_rate_offset_limit).toBe(10); + expect(p2p_settings?.local_currencies?.[0]?.display_name).toBe('US Dollar'); + expect(p2p_settings?.local_currencies?.[0]?.has_adverts).toBe(0); + expect(p2p_settings?.local_currencies?.[0]?.symbol).toBe('USD'); + expect(p2p_settings?.maximum_advert_amount).toBe(3000); + expect(p2p_settings?.maximum_order_amount).toBe(1000); + expect(p2p_settings?.order_daily_limit).toBe(300); + expect(p2p_settings?.order_payment_period).toBe(15); + expect(p2p_settings?.payment_methods_enabled).toBe(1); + expect(p2p_settings?.review_period).toBe(24); + expect(p2p_settings?.supported_currencies).toEqual(['usd']); + expect(p2p_settings?.is_cross_border_ads_enabled).toBe(true); + expect(p2p_settings?.is_disabled).toBe(false); + expect(p2p_settings?.is_payment_methods_enabled).toBe(true); + expect(p2p_settings?.rate_type).toBe('fixed'); + expect(p2p_settings?.float_rate_offset_limit_string).toBe('10.00'); + expect(p2p_settings?.reached_target_date).toBe(false); + expect(p2p_settings?.currency_list?.[0]?.display_name).toBe('US Dollar'); + expect(p2p_settings?.currency_list?.[0]?.has_adverts).toBe(0); + expect(p2p_settings?.currency_list?.[0]?.is_default).toBe(1); + expect(p2p_settings?.currency_list?.[0]?.text).toBe('USD'); + expect(p2p_settings?.currency_list?.[0]?.value).toBe('USD'); + }); +}); diff --git a/packages/api-v2/src/hooks/p2p/entity/advert/p2p-advert/useAdvertList.ts b/packages/api-v2/src/hooks/p2p/entity/advert/p2p-advert/useAdvertList.ts index f807b3a3ef1d..a67637bf26a3 100644 --- a/packages/api-v2/src/hooks/p2p/entity/advert/p2p-advert/useAdvertList.ts +++ b/packages/api-v2/src/hooks/p2p/entity/advert/p2p-advert/useAdvertList.ts @@ -14,7 +14,7 @@ const useAdvertList = ( payload: { ...payload, offset: payload?.offset, limit: payload?.limit }, options: { getNextPageParam: (lastPage, pages) => { - if (!lastPage?.p2p_advert_list?.list) return; + if (lastPage?.p2p_advert_list?.list.length === 0 || !lastPage?.p2p_advert_list?.list) return; return pages.length; }, diff --git a/packages/api-v2/src/hooks/p2p/entity/index.ts b/packages/api-v2/src/hooks/p2p/entity/index.ts index 3726c0ee95a1..0d00cd653884 100644 --- a/packages/api-v2/src/hooks/p2p/entity/index.ts +++ b/packages/api-v2/src/hooks/p2p/entity/index.ts @@ -2,5 +2,6 @@ export * from './advert'; export * from './advertiser'; export * from './counterparty'; export * from './order-dispute'; -export * from './payment-method'; export * from './order'; +export * from './payment-method'; +export * from './settings'; diff --git a/packages/api-v2/src/hooks/p2p/entity/settings/index.ts b/packages/api-v2/src/hooks/p2p/entity/settings/index.ts new file mode 100644 index 000000000000..8a6b79fa8740 --- /dev/null +++ b/packages/api-v2/src/hooks/p2p/entity/settings/index.ts @@ -0,0 +1 @@ +export * as settings from './p2p-settings'; diff --git a/packages/api-v2/src/hooks/p2p/entity/settings/p2p-settings/index.ts b/packages/api-v2/src/hooks/p2p/entity/settings/p2p-settings/index.ts new file mode 100644 index 000000000000..72062070b55b --- /dev/null +++ b/packages/api-v2/src/hooks/p2p/entity/settings/p2p-settings/index.ts @@ -0,0 +1 @@ +export { default as useGetSettings } from './useSettings'; diff --git a/packages/api-v2/src/hooks/p2p/entity/settings/p2p-settings/useSettings.ts b/packages/api-v2/src/hooks/p2p/entity/settings/p2p-settings/useSettings.ts new file mode 100644 index 000000000000..4bd64239fd4d --- /dev/null +++ b/packages/api-v2/src/hooks/p2p/entity/settings/p2p-settings/useSettings.ts @@ -0,0 +1,107 @@ +import { useEffect } from 'react'; +import useSubscription from '../../../../../useSubscription'; +import { TSocketResponseData } from '../../../../../../types'; +import { useLocalStorage } from 'usehooks-ts'; + +type TP2PSettings = + | (TSocketResponseData<'p2p_settings'>['p2p_settings'] & { + currency_list: { + display_name: string; + has_adverts: 0 | 1; + is_default?: 1; + text: string; + value: string; + }[]; + float_rate_offset_limit_string: string; + is_cross_border_ads_enabled: boolean; + is_disabled: boolean; + is_payment_methods_enabled: boolean; + localCurrency?: string; + rate_type: 'float' | 'fixed'; + reached_target_date: boolean; + }) + | undefined; + +type TCurrencyListItem = { + display_name: string; + has_adverts: 0 | 1; + is_default?: 1; + text: string; + value: string; +}; + +const useSettings = () => { + const { data, ...rest } = useSubscription('p2p_settings'); + const [p2pSettings, setP2PSettings] = useLocalStorage>('p2p_v2_p2p_settings', {}); + + useEffect(() => { + if (data) { + const p2p_settings_data = data.p2p_settings; + + if (!p2p_settings_data) return undefined; + + const reached_target_date = () => { + if (!p2p_settings_data?.fixed_rate_adverts_end_date) return false; + + const current_date = new Date(new Date().getTime()).setUTCHours(23, 59, 59, 999); + const cutoff_date = new Date( + new Date(p2p_settings_data?.fixed_rate_adverts_end_date).getTime() + ).setUTCHours(23, 59, 59, 999); + + return current_date > cutoff_date; + }; + + let localCurrency; + + const currency_list = p2p_settings_data.local_currencies.reduce((acc: TCurrencyListItem[], currency) => { + const { display_name, has_adverts, is_default, symbol } = currency; + + if (is_default) localCurrency = symbol; + + if (has_adverts) { + acc.push({ + display_name, + has_adverts, + is_default, + text: symbol, + value: symbol, + }); + } + + return acc; + }, []); + + setP2PSettings({ + ...p2p_settings_data, + /** Modified list of local_currencies */ + currency_list, + /** Indicates the maximum rate offset for floating rate adverts. */ + float_rate_offset_limit_string: + p2p_settings_data?.float_rate_offset_limit?.toString().split('.')?.[1]?.length > 2 + ? (p2p_settings_data?.float_rate_offset_limit - 0.005).toFixed(2) + : p2p_settings_data?.float_rate_offset_limit.toFixed(2), + /** Indicates if the cross border ads feature is enabled. */ + is_cross_border_ads_enabled: Boolean(p2p_settings_data?.cross_border_ads_enabled), + /** Indicates if the P2P service is unavailable. */ + is_disabled: Boolean(p2p_settings_data?.disabled), + /** Indicates if the payment methods feature is enabled. */ + is_payment_methods_enabled: Boolean(p2p_settings_data?.payment_methods_enabled), + /** Indicates the default local currency */ + localCurrency, + /** Indicates if the current rate type is floating or fixed rates */ + rate_type: (p2p_settings_data?.float_rate_adverts === 'enabled' ? 'float' : 'fixed') as + | 'float' + | 'fixed', + /** Indicates if the fixed rate adverts end date has been reached. */ + reached_target_date: reached_target_date(), + }); + } + }, [data, setP2PSettings]); + + return { + ...rest, + data: p2pSettings, + }; +}; + +export default useSettings; diff --git a/packages/api-v2/src/hooks/useCtraderAccountsList.ts b/packages/api-v2/src/hooks/useCtraderAccountsList.ts index 6fbe77ae8ad4..5cca796023f4 100644 --- a/packages/api-v2/src/hooks/useCtraderAccountsList.ts +++ b/packages/api-v2/src/hooks/useCtraderAccountsList.ts @@ -2,12 +2,13 @@ import { useMemo } from 'react'; import useQuery from '../useQuery'; import useAuthorize from './useAuthorize'; import useCurrencyConfig from './useCurrencyConfig'; +import { displayMoney } from '../utils'; import useExchangeRates from './useExchangeRates'; import useTradingAccountsList from './useTradingAccountsList'; /** A custom hook that gets the list of created cTrader accounts. */ const useCtraderAccountsList = () => { - const { isSuccess } = useAuthorize(); + const { data: authorize_data, isSuccess } = useAuthorize(); const { data: ctrader_accounts, ...rest } = useQuery('trading_platform_accounts', { payload: { platform: 'ctrader' }, options: { enabled: isSuccess }, @@ -34,14 +35,21 @@ const useCtraderAccountsList = () => { /** The platform of the account */ platform: 'ctrader' as const, /** Formatted display balance */ - formatted_balance: `${account.display_balance} ${account.currency}`, + formatted_balance: displayMoney(account.balance || 0, account.currency || 'USD', { + preferred_language: authorize_data?.preferred_language, + }), /** Converted balance from the exchange rate */ converted_balance: getExchangeRate(fiat_account, account.currency ?? 'USD') * balance, }; }), - [ctrader_accounts?.trading_platform_accounts, fiat_account, getConfig, getExchangeRate] + [ + authorize_data?.preferred_language, + fiat_account, + getConfig, + getExchangeRate, + ctrader_accounts?.trading_platform_accounts, + ] ); - return { /** List of all created cTrader accounts */ data: modified_ctrader_accounts, diff --git a/packages/api-v2/src/remote_config.json b/packages/api-v2/src/remote_config.json index ec86c6867301..b1aa90e7518f 100644 --- a/packages/api-v2/src/remote_config.json +++ b/packages/api-v2/src/remote_config.json @@ -1 +1 @@ -{"cs_chat_livechat":true,"cs_chat_whatsapp":true,"marketing_growthbook":false,"tracking_GTM":true,"tracking_datadog":true,"tracking_hotjar":true} \ No newline at end of file +{"cs_chat_livechat":true,"cs_chat_whatsapp":true,"marketing_growthbook":true,"tracking_GTM":true,"tracking_datadog":true,"tracking_hotjar":true} \ No newline at end of file diff --git a/packages/api-v2/types.ts b/packages/api-v2/types.ts index 3447cef429d1..a50d4764b0a4 100644 --- a/packages/api-v2/types.ts +++ b/packages/api-v2/types.ts @@ -231,139 +231,71 @@ import type { useInfiniteQuery, useMutation, useQuery } from '@tanstack/react-qu /** * Proof of Identity (POI) and Proof of Address (POA) authentication status details. */ -type KycAuthStatus = - | { - /** - * POA authentication status details. - */ - address: { - /** - * Current POA status. - */ - status?: 'none' | 'pending' | 'rejected' | 'verified' | 'expired'; - }; - /** - * POI authentication status details. - */ - identity: { - /** - * Available services for the next POI attempt. - */ - available_services?: string[]; - /** - * Details on the rejected POI attempt. - */ - last_rejected?: { - /** - * Document type of the rejected POI attempt (IDV only). - */ - document_type?: null | string; - /** - * Reason(s) for the rejected POI attempt. - */ - rejected_reasons?: string[]; - }; - /** - * Service used for the current POI status. - */ - service?: 'none' | 'idv' | 'onfido' | 'manual'; - /** - * Current POI status. - */ - status?: 'none' | 'pending' | 'rejected' | 'verified' | 'expired' | 'suspected'; - /** - * Supported documents per service. - */ - supported_documents?: { - idv?: { - [k: string]: { - additional?: { - display_name?: string; - format?: string; - [k: string]: unknown; - }; - display_name?: string; - format?: string; - [k: string]: unknown; - }; - }; - onfido?: { - [k: string]: { - display_name?: string; - [k: string]: unknown; - }; - }; - [k: string]: unknown; - }; - }; - } - | { - [k: string]: { - /** - * POA authentication status details. - */ - address: { - /** - * Current POA status. - */ - status?: 'none' | 'pending' | 'rejected' | 'verified' | 'expired'; - }; - /** - * POI authentication status details. - */ - identity: { - /** - * Available services for the next POI attempt. - */ - available_services?: string[]; - /** - * Details on the rejected POI attempt. - */ - last_rejected?: { - /** - * Document type of the rejected POI attempt (IDV only). - */ - document_type?: null | string; - /** - * Reason(s) for the rejected POI attempt. - */ - rejected_reasons?: string[]; - }; - /** - * Service used for the current POI status. - */ - service?: 'none' | 'idv' | 'onfido' | 'manual'; - /** - * Current POI status. - */ - status?: 'none' | 'pending' | 'rejected' | 'verified' | 'expired' | 'suspected'; - /** - * Supported documents per service. - */ - supported_documents?: { - idv?: { - [k: string]: { - additional?: { - display_name?: string; - format?: string; - [k: string]: unknown; - }; - display_name?: string; - format?: string; - [k: string]: unknown; - }; - }; - onfido?: { - [k: string]: { - display_name?: string; - [k: string]: unknown; - }; - }; - [k: string]: unknown; - }; - }; - }; - }; +type KycAuthStatus = { + /** + * POA authentication status details. + */ + address: { + /** + * Current POA status. + */ + status?: 'none' | 'pending' | 'rejected' | 'verified' | 'expired'; + }; + /** + * POI authentication status details. + */ + identity: { + /** + * Available services for the next POI attempt. + */ + available_services?: string[]; + /** + * Details on the rejected POI attempt. + */ + last_rejected?: { + /** + * Document type of the rejected POI attempt (IDV only). + */ + document_type?: null | string; + /** + * Reason(s) for the rejected POI attempt. + */ + rejected_reasons?: string[]; + }; + /** + * Service used for the current POI status. + */ + service?: 'none' | 'idv' | 'onfido' | 'manual'; + /** + * Current POI status. + */ + status?: 'none' | 'pending' | 'rejected' | 'verified' | 'expired' | 'suspected'; + /** + * Supported documents per service. + */ + supported_documents?: { + idv?: { + [k: string]: { + additional?: { + display_name?: string; + format?: string; + [k: string]: unknown; + }; + display_name?: string; + format?: string; + [k: string]: unknown; + }; + }; + onfido?: { + [k: string]: { + display_name?: string; + [k: string]: unknown; + }; + }; + [k: string]: unknown; + }; + }; +}; type TPrivateSocketEndpoints = { available_accounts: { @@ -1021,6 +953,154 @@ type TPrivateSocketEndpoints = { [k: string]: unknown; }; }; + p2p_settings: { + request: { + /** + * Must be `1` + */ + p2p_settings: 1; + /** + * [Optional] If set to `1`, will send updates whenever there is an update to P2P settings. + */ + subscribe?: 1; + /** + * [Optional] The login id of the user. If left unspecified, it defaults to the initial authorized token's login id. + */ + loginid?: string; + /** + * [Optional] Used to pass data through the websocket, which may be retrieved via the `echo_req` output field. + */ + passthrough?: { + [k: string]: unknown; + }; + /** + * [Optional] Used to map request to response. + */ + req_id?: number; + }; + response: { + p2p_settings?: { + /** + * Maximum number of active ads allowed by an advertiser per currency pair and advert type (buy or sell). + */ + adverts_active_limit: number; + /** + * Adverts will be deactivated if no activity occurs within this period, in days. + */ + adverts_archive_period?: number; + /** + * Block trading settings + */ + block_trade: { + /** + * When 1, Block trading is unavailable. + */ + disabled?: 0 | 1; + /** + * Maximum amount of a block trade advert, in USD. + */ + maximum_advert_amount?: number; + }; + /** + * A buyer will be blocked for this duration after exceeding the cancellation limit, in hours. + */ + cancellation_block_duration: number; + /** + * The period within which to count buyer cancellations, in hours. + */ + cancellation_count_period: number; + /** + * A buyer may cancel an order within this period without negative consequences, in minutes after order creation. + */ + cancellation_grace_period: number; + /** + * A buyer will be temporarily barred after marking this number of cancellations within cancellation_period. + */ + cancellation_limit: number; + /** + * When 0, only exchanges in local currency are allowed for P2P advertiser. + */ + cross_border_ads_enabled: 0 | 1; + /** + * When 1, the P2P service is unavailable. + */ + disabled: 0 | 1; + /** + * Indicates the availbility of certain backend features. + */ + feature_level: number; + /** + * Availability of fixed rate adverts. + */ + fixed_rate_adverts: 'disabled' | 'enabled' | 'list_only'; + /** + * Date on which fixed rate adverts will be deactivated. + */ + fixed_rate_adverts_end_date?: string; + /** + * Availability of floating rate adverts. + */ + float_rate_adverts: 'disabled' | 'enabled' | 'list_only'; + /** + * Maximum rate offset for floating rate adverts. + */ + float_rate_offset_limit: number; + /** + * Available local currencies for p2p_advert_list request. + */ + local_currencies: { + /** + * Local currency name + */ + display_name: string; + /** + * Indicates that there are adverts available for this currency. + */ + has_adverts: 0 | 1; + /** + * Indicates that this is local currency for the current country. + */ + is_default?: 1; + /** + * Local currency symbol + */ + symbol: string; + }[]; + /** + * Maximum amount of an advert, in USD. + */ + maximum_advert_amount: number; + /** + * Maximum amount of an order, in USD. + */ + maximum_order_amount: number; + /** + * Maximum number of orders a user may create per day. + */ + order_daily_limit: number; + /** + * Time allowed for order payment, in minutes after order creation. + */ + order_payment_period: number; + /** + * Local P2P exchange rate which should be used instead of those obtained from the `exchange_rates` call. + */ + override_exchange_rate?: string; + /** + * Indicates if the payment methods feature is enabled. + */ + payment_methods_enabled: 0 | 1; + /** + * Time after successful order completion during which reviews can be created, in hours. + */ + review_period: number; + /** + * List of currencies for which P2P is available + */ + supported_currencies: string[]; + }; + }; + }; service_token: { request: { /** diff --git a/packages/p2p-v2/jest.config.js b/packages/p2p-v2/jest.config.js index a76dac9b2e0d..8b6235743d15 100644 --- a/packages/p2p-v2/jest.config.js +++ b/packages/p2p-v2/jest.config.js @@ -4,7 +4,7 @@ module.exports = { ...baseConfigForPackages, moduleNameMapper: { '@/(.*)': '/src/$1', - '@deriv/api': '/../api/src', + '@deriv/api-v2': '/../api-v2/src', '\\.css$': '/../../__mocks__/styleMock.js', '\\.s(c|a)ss$': '/../../__mocks__/styleMock.js', '^.+\\.svg$': '/../../__mocks__/fileMock.js', diff --git a/packages/p2p-v2/package.json b/packages/p2p-v2/package.json index bd83b5686ba1..87536429ef13 100644 --- a/packages/p2p-v2/package.json +++ b/packages/p2p-v2/package.json @@ -12,9 +12,9 @@ "start": "rimraf dist && npm run test && npm run serve" }, "dependencies": { + "@deriv/api-v2": "^1.0.0", "@deriv-com/ui": "1.9.0", "@deriv-com/utils": "latest", - "@deriv/api": "^1.0.0", "@deriv/integration": "^1.0.0", "@deriv/quill-icons": "^1.18.3", "@deriv/react-joyride": "^2.6.2", diff --git a/packages/p2p-v2/src/App.tsx b/packages/p2p-v2/src/App.tsx index b295197d61dd..e2a8807e735a 100644 --- a/packages/p2p-v2/src/App.tsx +++ b/packages/p2p-v2/src/App.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import AppContent from './routes/AppContent'; import { Router } from './routes'; import './index.scss'; @@ -7,8 +7,10 @@ import './index.scss'; const App: React.FC = () => { return ( - - + + + + ); }; diff --git a/packages/p2p-v2/src/components/AdvertiserName/AdvertiserName.tsx b/packages/p2p-v2/src/components/AdvertiserName/AdvertiserName.tsx index eb3234ccf3e7..70198d9f713b 100644 --- a/packages/p2p-v2/src/components/AdvertiserName/AdvertiserName.tsx +++ b/packages/p2p-v2/src/components/AdvertiserName/AdvertiserName.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { UserAvatar } from '@/components'; import { useAdvertiserStats, useDevice } from '@/hooks'; -import { useSettings } from '@deriv/api'; +import { useSettings } from '@deriv/api-v2'; import { Text } from '@deriv-com/ui'; import AdvertiserNameBadges from './AdvertiserNameBadges'; import AdvertiserNameStats from './AdvertiserNameStats'; diff --git a/packages/p2p-v2/src/components/AdvertiserName/AdvertiserNameToggle.tsx b/packages/p2p-v2/src/components/AdvertiserName/AdvertiserNameToggle.tsx index 7f315c48fa3c..e38c1f0c3e53 100644 --- a/packages/p2p-v2/src/components/AdvertiserName/AdvertiserNameToggle.tsx +++ b/packages/p2p-v2/src/components/AdvertiserName/AdvertiserNameToggle.tsx @@ -1,6 +1,6 @@ import React, { memo, useEffect, useState } from 'react'; import { useAdvertiserStats } from '@/hooks'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Text, ToggleSwitch } from '@deriv-com/ui'; import './AdvertiserNameToggle.scss'; diff --git a/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserName.spec.tsx b/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserName.spec.tsx index 8c7877ea43e8..54b8a1310a2b 100644 --- a/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserName.spec.tsx +++ b/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserName.spec.tsx @@ -1,9 +1,13 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen } from '@testing-library/react'; import AdvertiserName from '../AdvertiserName'; -const wrapper = ({ children }: { children: JSX.Element }) => {children}; +const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + +); let mockUseAdvertiserStats = { data: { fullName: 'Jane Doe', diff --git a/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameBadges.spec.tsx b/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameBadges.spec.tsx index 02f00dad9c89..7a483c01f223 100644 --- a/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameBadges.spec.tsx +++ b/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameBadges.spec.tsx @@ -1,9 +1,13 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen } from '@testing-library/react'; import AdvertiserNameBadges from '../AdvertiserNameBadges'; -const wrapper = ({ children }: { children: JSX.Element }) => {children}; +const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + +); let mockUseAdvertiserStats = { data: { isAddressVerified: false, diff --git a/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameStats.spec.tsx b/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameStats.spec.tsx index 9145f8d43bc2..6cc2bb5b8ccb 100644 --- a/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameStats.spec.tsx +++ b/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameStats.spec.tsx @@ -1,9 +1,13 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen } from '@testing-library/react'; import AdvertiserNameStats from '../AdvertiserNameStats'; -const wrapper = ({ children }: { children: JSX.Element }) => {children}; +const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + +); type TMockUseAdvertiserStats = { data?: { diff --git a/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameToggle.spec.tsx b/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameToggle.spec.tsx index e3d7d7358986..c327779e785e 100644 --- a/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameToggle.spec.tsx +++ b/packages/p2p-v2/src/components/AdvertiserName/__tests__/AdvertiserNameToggle.spec.tsx @@ -1,10 +1,14 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import AdvertiserNameToggle from '../AdvertiserNameToggle'; -const wrapper = ({ children }: { children: JSX.Element }) => {children}; +const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + +); let mockUseAdvertiserStats = { data: { fullName: 'Jane Doe', @@ -19,8 +23,8 @@ jest.mock('../../../hooks', () => ({ useAdvertiserStats: jest.fn(() => mockUseAdvertiserStats), })); -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), p2p: { advertiser: { useUpdate: jest.fn(() => ({ diff --git a/packages/p2p-v2/src/components/BuySellData/BuySellData.tsx b/packages/p2p-v2/src/components/BuySellData/BuySellData.tsx index 4fd081da73e2..a620d92e585b 100644 --- a/packages/p2p-v2/src/components/BuySellData/BuySellData.tsx +++ b/packages/p2p-v2/src/components/BuySellData/BuySellData.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { TAdvertiserPaymentMethods } from 'types'; import { formatTime } from '@/utils'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Text, useDevice } from '@deriv-com/ui'; import { PaymentMethodWithIcon } from '../PaymentMethodWithIcon'; import './BuySellData.scss'; diff --git a/packages/p2p-v2/src/components/BuySellForm/BuySellForm.tsx b/packages/p2p-v2/src/components/BuySellForm/BuySellForm.tsx index fa827d753356..4f670380b208 100644 --- a/packages/p2p-v2/src/components/BuySellForm/BuySellForm.tsx +++ b/packages/p2p-v2/src/components/BuySellForm/BuySellForm.tsx @@ -5,7 +5,7 @@ import Modal from 'react-modal'; import { TAdvertType } from 'types'; import { BUY_SELL, RATE_TYPE } from '@/constants'; import { removeTrailingZeros, roundOffDecimal, setDecimalPlaces } from '@/utils'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Divider, InlineMessage, Text, useDevice } from '@deriv-com/ui'; import { BuySellAmount } from '../BuySellAmount'; import { BuySellData } from '../BuySellData'; diff --git a/packages/p2p-v2/src/components/BuySellForm/__tests__/BuySellForm.spec.tsx b/packages/p2p-v2/src/components/BuySellForm/__tests__/BuySellForm.spec.tsx index 4f223bf0f8d2..977ae14f3e9e 100644 --- a/packages/p2p-v2/src/components/BuySellForm/__tests__/BuySellForm.spec.tsx +++ b/packages/p2p-v2/src/components/BuySellForm/__tests__/BuySellForm.spec.tsx @@ -7,7 +7,7 @@ import userEvent from '@testing-library/user-event'; import BuySellForm from '../BuySellForm'; const mockMutateFn = jest.fn(); -jest.mock('@deriv/api', () => ({ +jest.mock('@deriv/api-v2', () => ({ p2p: { order: { useCreate: jest.fn(() => ({ diff --git a/packages/p2p-v2/src/components/Modals/AdErrorTooltipModal/__tests__/AdErrorTooltipModal.spec.tsx b/packages/p2p-v2/src/components/Modals/AdErrorTooltipModal/__tests__/AdErrorTooltipModal.spec.tsx index d382786177ba..2241cec0e898 100644 --- a/packages/p2p-v2/src/components/Modals/AdErrorTooltipModal/__tests__/AdErrorTooltipModal.spec.tsx +++ b/packages/p2p-v2/src/components/Modals/AdErrorTooltipModal/__tests__/AdErrorTooltipModal.spec.tsx @@ -17,7 +17,7 @@ const mockProps = { let element: HTMLElement; -jest.mock('@deriv/api', () => ({ +jest.mock('@deriv/api-v2', () => ({ useAuthorize: () => ({ data: { local_currencies: ['USD'], diff --git a/packages/p2p-v2/src/components/Modals/BlockUnblockUserModal/BlockUnblockUserModal.tsx b/packages/p2p-v2/src/components/Modals/BlockUnblockUserModal/BlockUnblockUserModal.tsx index 18074d0fd228..c1e273082d15 100644 --- a/packages/p2p-v2/src/components/Modals/BlockUnblockUserModal/BlockUnblockUserModal.tsx +++ b/packages/p2p-v2/src/components/Modals/BlockUnblockUserModal/BlockUnblockUserModal.tsx @@ -1,6 +1,6 @@ import React, { useEffect } from 'react'; import Modal from 'react-modal'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Button, Text } from '@deriv-com/ui'; import { customStyles } from '../helpers'; import './BlockUnblockUserModal.scss'; diff --git a/packages/p2p-v2/src/components/Modals/BlockUnblockUserModal/__tests__/BlockUnblockUserModal.spec.tsx b/packages/p2p-v2/src/components/Modals/BlockUnblockUserModal/__tests__/BlockUnblockUserModal.spec.tsx index 5bb7d4dbebbd..86664474f123 100644 --- a/packages/p2p-v2/src/components/Modals/BlockUnblockUserModal/__tests__/BlockUnblockUserModal.spec.tsx +++ b/packages/p2p-v2/src/components/Modals/BlockUnblockUserModal/__tests__/BlockUnblockUserModal.spec.tsx @@ -1,13 +1,15 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import BlockUnblockUserModal from '../BlockUnblockUserModal'; const wrapper = ({ children }: { children: JSX.Element }) => ( -
- {children} + +
+ {children} + ); @@ -15,8 +17,8 @@ const mockOnRequestClose = jest.fn(); const mockUseBlockMutate = jest.fn(); const mockUseUnblockMutate = jest.fn(); -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), p2p: { counterparty: { useBlock: jest.fn(() => ({ diff --git a/packages/p2p-v2/src/components/Modals/DailyLimitModal/DailyLimitModal.tsx b/packages/p2p-v2/src/components/Modals/DailyLimitModal/DailyLimitModal.tsx index ecc89d521bd5..b16d384fbbbb 100644 --- a/packages/p2p-v2/src/components/Modals/DailyLimitModal/DailyLimitModal.tsx +++ b/packages/p2p-v2/src/components/Modals/DailyLimitModal/DailyLimitModal.tsx @@ -1,7 +1,7 @@ import React, { useEffect } from 'react'; import Modal from 'react-modal'; import { useDevice } from '@/hooks'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Button, Loader, Text } from '@deriv-com/ui'; import { customStyles } from '../helpers'; import './DailyLimitModal.scss'; diff --git a/packages/p2p-v2/src/components/Modals/DailyLimitModal/__tests__/DailyLimitModal.spec.tsx b/packages/p2p-v2/src/components/Modals/DailyLimitModal/__tests__/DailyLimitModal.spec.tsx index af7ade69b28a..819a07b597a3 100644 --- a/packages/p2p-v2/src/components/Modals/DailyLimitModal/__tests__/DailyLimitModal.spec.tsx +++ b/packages/p2p-v2/src/components/Modals/DailyLimitModal/__tests__/DailyLimitModal.spec.tsx @@ -1,13 +1,15 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import DailyLimitModal from '../DailyLimitModal'; const wrapper = ({ children }: { children: JSX.Element }) => ( -
- {children} + +
+ {children} + ); @@ -24,8 +26,8 @@ let mockUseAdvertiserUpdate = { mutate: mockUseAdvertiserUpdateMutate, }; -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), p2p: { advertiser: { useUpdate: jest.fn(() => mockUseAdvertiserUpdate), diff --git a/packages/p2p-v2/src/components/Modals/MyAdsDeleteModal/MyAdsDeleteModal.tsx b/packages/p2p-v2/src/components/Modals/MyAdsDeleteModal/MyAdsDeleteModal.tsx index 872518094def..7a3379066b01 100644 --- a/packages/p2p-v2/src/components/Modals/MyAdsDeleteModal/MyAdsDeleteModal.tsx +++ b/packages/p2p-v2/src/components/Modals/MyAdsDeleteModal/MyAdsDeleteModal.tsx @@ -1,7 +1,7 @@ import React, { memo, useEffect } from 'react'; import Modal from 'react-modal'; import { useDevice } from '@/hooks'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Button, Text } from '@deriv-com/ui'; import { customStyles } from '../helpers'; import './MyAdsDeleteModal.scss'; diff --git a/packages/p2p-v2/src/components/Modals/MyAdsDeleteModal/__tests__/MyAdsDeleteModal.spec.tsx b/packages/p2p-v2/src/components/Modals/MyAdsDeleteModal/__tests__/MyAdsDeleteModal.spec.tsx index 21269479c185..4af841ac404c 100644 --- a/packages/p2p-v2/src/components/Modals/MyAdsDeleteModal/__tests__/MyAdsDeleteModal.spec.tsx +++ b/packages/p2p-v2/src/components/Modals/MyAdsDeleteModal/__tests__/MyAdsDeleteModal.spec.tsx @@ -20,7 +20,7 @@ const mockUseGet = { isLoading: false, }; -jest.mock('@deriv/api', () => ({ +jest.mock('@deriv/api-v2', () => ({ p2p: { advert: { useGet: jest.fn(() => mockUseGet), diff --git a/packages/p2p-v2/src/components/Modals/NicknameModal/NicknameModal.tsx b/packages/p2p-v2/src/components/Modals/NicknameModal/NicknameModal.tsx index f80b900429f8..2b66ff2eea56 100644 --- a/packages/p2p-v2/src/components/Modals/NicknameModal/NicknameModal.tsx +++ b/packages/p2p-v2/src/components/Modals/NicknameModal/NicknameModal.tsx @@ -3,7 +3,7 @@ import { debounce } from 'lodash'; import { Controller, useForm } from 'react-hook-form'; import Modal from 'react-modal'; import { useDevice, useSwitchTab } from '@/hooks'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { DerivLightIcCashierUserIcon } from '@deriv/quill-icons'; import { Button, Input, Text } from '@deriv-com/ui'; import { customStyles } from '../helpers'; diff --git a/packages/p2p-v2/src/components/Modals/NicknameModal/__tests__/NicknameModal.spec.tsx b/packages/p2p-v2/src/components/Modals/NicknameModal/__tests__/NicknameModal.spec.tsx index 3ed02a182364..656f6c7091cb 100644 --- a/packages/p2p-v2/src/components/Modals/NicknameModal/__tests__/NicknameModal.spec.tsx +++ b/packages/p2p-v2/src/components/Modals/NicknameModal/__tests__/NicknameModal.spec.tsx @@ -1,13 +1,15 @@ import React from 'react'; -import { APIProvider, p2p } from '@deriv/api'; +import { APIProvider, AuthProvider, p2p } from '@deriv/api-v2'; import { act, render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import NicknameModal from '../NicknameModal'; const wrapper = ({ children }: { children: JSX.Element }) => ( - -
- {children} + + +
+ {children} + ); @@ -19,8 +21,8 @@ jest.mock('lodash', () => ({ ...jest.requireActual('lodash'), debounce: jest.fn(f => f), })); -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), p2p: { advertiser: { useCreate: jest.fn(() => ({ diff --git a/packages/p2p-v2/src/components/Modals/ShareAdsModal/ShareAdsCard.tsx b/packages/p2p-v2/src/components/Modals/ShareAdsModal/ShareAdsCard.tsx index 189219c732ff..f6d50f11974d 100644 --- a/packages/p2p-v2/src/components/Modals/ShareAdsModal/ShareAdsCard.tsx +++ b/packages/p2p-v2/src/components/Modals/ShareAdsModal/ShareAdsCard.tsx @@ -2,7 +2,7 @@ import React, { ForwardedRef, forwardRef } from 'react'; import { QRCodeSVG } from 'qrcode.react'; import { ADVERT_TYPE, BUY_SELL, p2pLogo, RATE_TYPE } from '@/constants'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Text, useDevice } from '@deriv-com/ui'; import './ShareAdsCard.scss'; diff --git a/packages/p2p-v2/src/components/Modals/ShareAdsModal/ShareAdsModal.tsx b/packages/p2p-v2/src/components/Modals/ShareAdsModal/ShareAdsModal.tsx index 9093a3fe2eb3..a296bd62e4a5 100644 --- a/packages/p2p-v2/src/components/Modals/ShareAdsModal/ShareAdsModal.tsx +++ b/packages/p2p-v2/src/components/Modals/ShareAdsModal/ShareAdsModal.tsx @@ -6,7 +6,7 @@ import Modal from 'react-modal'; import { Clipboard } from '@/components'; import { BUY_SELL, RATE_TYPE } from '@/constants'; import { useCopyToClipboard } from '@/hooks'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Button, Divider, Text, useDevice } from '@deriv-com/ui'; //TODO: replace below icons with the one from quill once available import CheckmarkCircle from '../../../public/ic-checkmark-circle.svg'; diff --git a/packages/p2p-v2/src/components/Modals/ShareAdsModal/__tests__/ShareAdsModal.spec.tsx b/packages/p2p-v2/src/components/Modals/ShareAdsModal/__tests__/ShareAdsModal.spec.tsx index e6781bdfe192..0f5da1d0b4b5 100644 --- a/packages/p2p-v2/src/components/Modals/ShareAdsModal/__tests__/ShareAdsModal.spec.tsx +++ b/packages/p2p-v2/src/components/Modals/ShareAdsModal/__tests__/ShareAdsModal.spec.tsx @@ -28,7 +28,7 @@ const mockUseGet = { isLoading: false, }; -jest.mock('@deriv/api', () => ({ +jest.mock('@deriv/api-v2', () => ({ p2p: { advert: { useGet: jest.fn(() => mockUseGet), diff --git a/packages/p2p-v2/src/components/PaymentMethodForm/PaymentMethodForm.tsx b/packages/p2p-v2/src/components/PaymentMethodForm/PaymentMethodForm.tsx index fefdadd3c4f3..26b03bb0b2b0 100644 --- a/packages/p2p-v2/src/components/PaymentMethodForm/PaymentMethodForm.tsx +++ b/packages/p2p-v2/src/components/PaymentMethodForm/PaymentMethodForm.tsx @@ -4,7 +4,7 @@ import { TSelectedPaymentMethod } from 'types'; import { Dropdown, PaymentMethodField, PaymentMethodsFormFooter, PaymentMethodsHeader } from '@/components'; import { PaymentMethodErrorModal, PaymentMethodModal } from '@/components/Modals'; import { TFormState } from '@/reducers/types'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Button, Input, Text } from '@deriv-com/ui'; import CloseCircle from '../../public/ic-close-circle.svg'; import './PaymentMethodForm.scss'; diff --git a/packages/p2p-v2/src/components/Verification/__tests__/Verification.spec.tsx b/packages/p2p-v2/src/components/Verification/__tests__/Verification.spec.tsx index 2ed4c535ee1a..a49c140498c1 100644 --- a/packages/p2p-v2/src/components/Verification/__tests__/Verification.spec.tsx +++ b/packages/p2p-v2/src/components/Verification/__tests__/Verification.spec.tsx @@ -1,10 +1,14 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import Verification from '../Verification'; -const wrapper = ({ children }: { children: JSX.Element }) => {children}; +const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + +); let mockUsePoiPoaStatusData = { data: { diff --git a/packages/p2p-v2/src/hooks/__tests__/useAdvertiserStats.spec.tsx b/packages/p2p-v2/src/hooks/__tests__/useAdvertiserStats.spec.tsx index 65feb8b40526..4319e7b1e236 100644 --- a/packages/p2p-v2/src/hooks/__tests__/useAdvertiserStats.spec.tsx +++ b/packages/p2p-v2/src/hooks/__tests__/useAdvertiserStats.spec.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { APIProvider, p2p, useAuthentication, useSettings } from '@deriv/api'; +import { APIProvider, AuthProvider, p2p, useAuthentication, useSettings } from '@deriv/api-v2'; import { renderHook } from '@testing-library/react-hooks'; import useAdvertiserStats from '../useAdvertiserStats'; @@ -7,8 +7,8 @@ const mockUseSettings = useSettings as jest.MockedFunction; const mockUseAuthentication = useAuthentication as jest.MockedFunction; const mockUseAdvertiserInfo = p2p.advertiser.useGetInfo as jest.MockedFunction; -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), p2p: { advertiser: { useGetInfo: jest.fn().mockReturnValue({ @@ -50,13 +50,21 @@ describe('useAdvertiserStats', () => { ...mockUseAdvertiserInfo, isSuccess: false, }); - const wrapper = ({ children }: { children: JSX.Element }) => {children}; + const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + + ); const { result } = renderHook(() => useAdvertiserStats(), { wrapper }); expect(result.current.data).toBe(undefined); }); test('should return the correct information', () => { - const wrapper = ({ children }: { children: JSX.Element }) => {children}; + const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + + ); mockUseSettings.mockReturnValueOnce({ data: { first_name: 'Jane', last_name: 'Doe' }, }); @@ -79,7 +87,11 @@ describe('useAdvertiserStats', () => { expect(result.current.data.daysSinceJoined).toBe(120); }); test('should return the correct total count and lifetime', () => { - const wrapper = ({ children }: { children: JSX.Element }) => {children}; + const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + + ); mockUseAdvertiserInfo.mockReturnValueOnce({ data: { @@ -100,7 +112,11 @@ describe('useAdvertiserStats', () => { expect(result.current.data.tradeVolumeLifetime).toBe(100); }); test('should return the correct rates and limits', () => { - const wrapper = ({ children }: { children: JSX.Element }) => {children}; + const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + + ); mockUseAdvertiserInfo.mockReturnValueOnce({ data: { buy_completion_rate: 1.4, @@ -121,7 +137,11 @@ describe('useAdvertiserStats', () => { expect(result.current.data.isEligibleForLimitUpgrade).toBe(true); }); test('should return the correct buy/release times', () => { - const wrapper = ({ children }: { children: JSX.Element }) => {children}; + const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + + ); mockUseAdvertiserInfo.mockReturnValueOnce({ data: { buy_time_avg: 150, @@ -134,7 +154,11 @@ describe('useAdvertiserStats', () => { expect(result.current.data.averageReleaseTime).toBe(1); }); test('should return the correct verification statuses', () => { - const wrapper = ({ children }: { children: JSX.Element }) => {children}; + const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + + ); mockUseAdvertiserInfo.mockReturnValueOnce({ data: { full_verification: false, diff --git a/packages/p2p-v2/src/hooks/__tests__/usePoiPoaStatus.spec.tsx b/packages/p2p-v2/src/hooks/__tests__/usePoiPoaStatus.spec.tsx index b51f9c64492a..c4c11902f7ac 100644 --- a/packages/p2p-v2/src/hooks/__tests__/usePoiPoaStatus.spec.tsx +++ b/packages/p2p-v2/src/hooks/__tests__/usePoiPoaStatus.spec.tsx @@ -1,12 +1,16 @@ import React from 'react'; -import { APIProvider, useGetAccountStatus } from '@deriv/api'; +import { APIProvider, AuthProvider, useGetAccountStatus } from '@deriv/api-v2'; import { renderHook } from '@testing-library/react-hooks'; import usePoiPoaStatus from '../usePoiPoaStatus'; const mockUseGetAccountStatus = useGetAccountStatus as jest.MockedFunction; -const wrapper = ({ children }: { children: JSX.Element }) => {children}; -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + +); +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), useGetAccountStatus: jest.fn().mockReturnValue({ data: { authentication: { diff --git a/packages/p2p-v2/src/hooks/useAdvertiserStats.ts b/packages/p2p-v2/src/hooks/useAdvertiserStats.ts index 7f3cf984a7cb..fb681b1641f4 100644 --- a/packages/p2p-v2/src/hooks/useAdvertiserStats.ts +++ b/packages/p2p-v2/src/hooks/useAdvertiserStats.ts @@ -1,6 +1,6 @@ import { useMemo } from 'react'; import { daysSince } from '@/utils'; -import { p2p, useAuthentication, useSettings } from '@deriv/api'; +import { p2p, useAuthentication, useSettings } from '@deriv/api-v2'; /** * Formats the advertiser duration into the following format: diff --git a/packages/p2p-v2/src/hooks/usePoiPoaStatus.ts b/packages/p2p-v2/src/hooks/usePoiPoaStatus.ts index 365663020de2..241e7c13b593 100644 --- a/packages/p2p-v2/src/hooks/usePoiPoaStatus.ts +++ b/packages/p2p-v2/src/hooks/usePoiPoaStatus.ts @@ -1,5 +1,5 @@ import { useMemo } from 'react'; -import { useGetAccountStatus } from '@deriv/api'; +import { useGetAccountStatus } from '@deriv/api-v2'; /** A custom hook that returns the POA, POI status and if POA is required for P2P */ const usePoiPoaStatus = () => { diff --git a/packages/p2p-v2/src/hooks/useSendbird.ts b/packages/p2p-v2/src/hooks/useSendbird.ts index e61c1397296d..81e013c397f4 100644 --- a/packages/p2p-v2/src/hooks/useSendbird.ts +++ b/packages/p2p-v2/src/hooks/useSendbird.ts @@ -1,5 +1,5 @@ import { useCallback, useEffect, useRef, useState } from 'react'; -import { p2p, useChatCreate, useOrderInfo, useSendbirdServiceToken, useServerTime } from '@deriv/api'; +import { p2p, useChatCreate, useOrderInfo, useSendbirdServiceToken, useServerTime } from '@deriv/api-v2'; import SendbirdChat, { BaseChannel, User } from '@sendbird/chat'; import { GroupChannel, GroupChannelHandler, GroupChannelModule } from '@sendbird/chat/groupChannel'; import { BaseMessage, MessageType, MessageTypeFilter } from '@sendbird/chat/message'; diff --git a/packages/p2p-v2/src/pages/buy-sell/components/CurrencyDropdown/CurrencyDropdown.tsx b/packages/p2p-v2/src/pages/buy-sell/components/CurrencyDropdown/CurrencyDropdown.tsx index 7372bb6eaefc..3a84511dddbb 100644 --- a/packages/p2p-v2/src/pages/buy-sell/components/CurrencyDropdown/CurrencyDropdown.tsx +++ b/packages/p2p-v2/src/pages/buy-sell/components/CurrencyDropdown/CurrencyDropdown.tsx @@ -2,7 +2,7 @@ import React, { useMemo, useRef, useState } from 'react'; import clsx from 'clsx'; import { useOnClickOutside } from 'usehooks-ts'; import { FullPageMobileWrapper } from '@/components'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { LabelPairedChevronDownMdRegularIcon } from '@deriv/quill-icons'; import { Text, useDevice } from '@deriv-com/ui'; import { CurrencySelector } from './CurrencySelector'; diff --git a/packages/p2p-v2/src/pages/buy-sell/components/CurrencyDropdown/__tests__/CurrencyDropdown.spec.tsx b/packages/p2p-v2/src/pages/buy-sell/components/CurrencyDropdown/__tests__/CurrencyDropdown.spec.tsx index 69d372cd929e..b12da24a3e73 100644 --- a/packages/p2p-v2/src/pages/buy-sell/components/CurrencyDropdown/__tests__/CurrencyDropdown.spec.tsx +++ b/packages/p2p-v2/src/pages/buy-sell/components/CurrencyDropdown/__tests__/CurrencyDropdown.spec.tsx @@ -1,18 +1,17 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; import { act, render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import CurrencyDropdown from '../CurrencyDropdown'; const wrapper = ({ children }: { children: JSX.Element }) => ( - +
Click me
{children} - +
); -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), p2p: { settings: { useGetSettings: () => ({ @@ -45,14 +44,19 @@ jest.mock('@deriv-com/ui', () => ({ ...jest.requireActual('@deriv-com/ui'), useDevice: jest.fn(() => ({ isMobile: mockIsMobile })), })); - -jest.useFakeTimers(); - const mockProps = { selectedCurrency: 'IDR', setSelectedCurrency: jest.fn(), }; +beforeEach(() => { + jest.useFakeTimers(); +}); + +afterEach(() => { + jest.useRealTimers(); +}); + describe('', () => { it('should call setSelectedCurrency when a currency is selected from the dropdown', () => { render(, { wrapper }); diff --git a/packages/p2p-v2/src/pages/buy-sell/screens/BuySellHeader/__tests__/BuySellHeader.spec.tsx b/packages/p2p-v2/src/pages/buy-sell/screens/BuySellHeader/__tests__/BuySellHeader.spec.tsx index 3b61211e196d..05b5b7904247 100644 --- a/packages/p2p-v2/src/pages/buy-sell/screens/BuySellHeader/__tests__/BuySellHeader.spec.tsx +++ b/packages/p2p-v2/src/pages/buy-sell/screens/BuySellHeader/__tests__/BuySellHeader.spec.tsx @@ -33,8 +33,8 @@ jest.mock('@deriv-com/ui', () => ({ }), })); -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), p2p: { settings: { useGetSettings: () => ({ diff --git a/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTable/BuySellTable.tsx b/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTable/BuySellTable.tsx index 5907896f016c..a7a65e3e5f1b 100644 --- a/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTable/BuySellTable.tsx +++ b/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTable/BuySellTable.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { RadioGroupFilterModal } from '@/components/Modals'; import { BUY_SELL, SORT_BY_LIST } from '@/constants'; import { TSortByValues } from '@/utils'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { BuySellHeader } from '../BuySellHeader'; import { BuySellTableRenderer } from './BuySellTableRenderer'; import './BuySellTable.scss'; diff --git a/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTable/__tests__/BuySellTable.spec.tsx b/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTable/__tests__/BuySellTable.spec.tsx index f7d2698ecc44..cf9bccc67e81 100644 --- a/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTable/__tests__/BuySellTable.spec.tsx +++ b/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTable/__tests__/BuySellTable.spec.tsx @@ -1,9 +1,13 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen } from '@testing-library/react'; import BuySellTable from '../BuySellTable'; -const wrapper = ({ children }: { children: JSX.Element }) => {children}; +const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + +); let mockAdvertiserListData = { data: [], @@ -12,8 +16,8 @@ let mockAdvertiserListData = { loadMoreAdverts: jest.fn(), }; -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), p2p: { advert: { useGetList: jest.fn(() => mockAdvertiserListData), diff --git a/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTableRow/BuySellTableRow.tsx b/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTableRow/BuySellTableRow.tsx index a7dbc81be69f..5729112ce236 100644 --- a/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTableRow/BuySellTableRow.tsx +++ b/packages/p2p-v2/src/pages/buy-sell/screens/BuySellTableRow/BuySellTableRow.tsx @@ -4,7 +4,7 @@ import clsx from 'clsx'; import { Badge, BuySellForm, PaymentMethodLabel, StarRating, UserAvatar } from '@/components'; import { BUY_SELL } from '@/constants'; import { generateEffectiveRate } from '@/utils'; -import { p2p, useExchangeRateSubscription } from '@deriv/api'; +import { p2p, useExchangeRateSubscription } from '@deriv/api-v2'; import { LabelPairedChevronRightMdRegularIcon } from '@deriv/quill-icons'; import { Button, Text, useDevice } from '@deriv-com/ui'; import { TBuySellTableRowRenderer } from '../BuySellTable/BuySellTable'; diff --git a/packages/p2p-v2/src/pages/my-ads/components/AdRateError/AdRateError.tsx b/packages/p2p-v2/src/pages/my-ads/components/AdRateError/AdRateError.tsx index 2f9e210ee09f..28896d59f15f 100644 --- a/packages/p2p-v2/src/pages/my-ads/components/AdRateError/AdRateError.tsx +++ b/packages/p2p-v2/src/pages/my-ads/components/AdRateError/AdRateError.tsx @@ -1,5 +1,5 @@ import { RATE_TYPE } from '@/constants'; -import { useAuthorize } from '@deriv/api'; +import { useAuthorize } from '@deriv/api-v2'; const AdRateError = () => { //TODO: get rate values after implementation of floatingRate hook diff --git a/packages/p2p-v2/src/pages/my-ads/components/AdRateError/__tests__/AdRateError.spec.tsx b/packages/p2p-v2/src/pages/my-ads/components/AdRateError/__tests__/AdRateError.spec.tsx index e1f4a808f873..db9902c35360 100644 --- a/packages/p2p-v2/src/pages/my-ads/components/AdRateError/__tests__/AdRateError.spec.tsx +++ b/packages/p2p-v2/src/pages/my-ads/components/AdRateError/__tests__/AdRateError.spec.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { render, screen } from '@testing-library/react'; import AdRateError from '../AdRateError'; -jest.mock('@deriv/api', () => ({ +jest.mock('@deriv/api-v2', () => ({ useAuthorize: () => ({ data: { local_currencies: ['USD'], diff --git a/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTable/MyAdsTable.tsx b/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTable/MyAdsTable.tsx index fcb17e35eb95..73598d44720e 100644 --- a/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTable/MyAdsTable.tsx +++ b/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTable/MyAdsTable.tsx @@ -3,7 +3,7 @@ import { Table } from '@/components'; import { MyAdsDeleteModal } from '@/components/Modals'; import { ShareAdsModal } from '@/components/Modals/ShareAdsModal'; import { AD_ACTION } from '@/constants'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Loader } from '@deriv-com/ui'; import { MyAdsEmpty } from '../../MyAdsEmpty'; import MyAdsTableRowView from '../MyAdsTableRow/MyAdsTableRowView'; diff --git a/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTableRow/MyAdsTableRow.tsx b/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTableRow/MyAdsTableRow.tsx index 141a63040702..d9f47b3f8375 100644 --- a/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTableRow/MyAdsTableRow.tsx +++ b/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTableRow/MyAdsTableRow.tsx @@ -4,7 +4,7 @@ import { PaymentMethodLabel, PopoverDropdown } from '@/components'; import { ADVERT_TYPE, RATE_TYPE } from '@/constants'; import { useDevice } from '@/hooks'; import { formatMoney, generateEffectiveRate, shouldShowTooltipIcon } from '@/utils'; -import { useExchangeRateSubscription } from '@deriv/api'; +import { useExchangeRateSubscription } from '@deriv/api-v2'; import { Button, Text, Tooltip } from '@deriv-com/ui'; //TODO: Replace with quill icons once available import DeactivateIcon from '../../../../../public/ic-archive.svg'; diff --git a/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTableRow/__tests__/MyAdsTableRow.spec.tsx b/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTableRow/__tests__/MyAdsTableRow.spec.tsx index 6cfcbca5ba7a..0f2d58cd76f0 100644 --- a/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTableRow/__tests__/MyAdsTableRow.spec.tsx +++ b/packages/p2p-v2/src/pages/my-ads/screens/MyAds/MyAdsTableRow/__tests__/MyAdsTableRow.spec.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { useDevice } from '@/hooks'; -import { useExchangeRateSubscription } from '@deriv/api'; +import { useExchangeRateSubscription } from '@deriv/api-v2'; import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import MyAdsTableRow from '../MyAdsTableRow'; @@ -70,7 +70,7 @@ const mockProps = { visibility_status: [], }; -jest.mock('@deriv/api', () => ({ +jest.mock('@deriv/api-v2', () => ({ useExchangeRateSubscription: jest.fn(), })); diff --git a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileAdDetails/MyProfileAdDetails.tsx b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileAdDetails/MyProfileAdDetails.tsx index bc68b9573969..1e7b34a696b8 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileAdDetails/MyProfileAdDetails.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileAdDetails/MyProfileAdDetails.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useMemo, useState } from 'react'; import { FullPageMobileWrapper, TextArea } from '@/components'; import { useDevice, useQueryString } from '@/hooks'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Button, Loader } from '@deriv-com/ui'; import './MyProfileAdDetails.scss'; diff --git a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileAdDetails/__tests__/MyProfileAdDetails.spec.tsx b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileAdDetails/__tests__/MyProfileAdDetails.spec.tsx index 9b1321fcc12d..a1b90683bec3 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileAdDetails/__tests__/MyProfileAdDetails.spec.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileAdDetails/__tests__/MyProfileAdDetails.spec.tsx @@ -1,13 +1,15 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import MyProfileAdDetails from '../MyProfileAdDetails'; const wrapper = ({ children }: { children: JSX.Element }) => ( -
- {children} + +
+ {children} + ); @@ -41,8 +43,8 @@ jest.mock('@/hooks/useQueryString', () => ({ })), })); -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), p2p: { advertiser: { useGetInfo: jest.fn(() => mockUseAdvertiserInfo), diff --git a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileBalance/MyProfileBalance.tsx b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileBalance/MyProfileBalance.tsx index 6f4fbc9621d3..407a5c554c0e 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileBalance/MyProfileBalance.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileBalance/MyProfileBalance.tsx @@ -2,7 +2,7 @@ import React, { useMemo, useState } from 'react'; import { AvailableP2PBalanceModal, DailyLimitModal } from '@/components/Modals'; import { useAdvertiserStats, useDevice } from '@/hooks'; import { numberToCurrencyText } from '@/utils'; -import { useActiveAccount } from '@deriv/api'; +import { useActiveAccount } from '@deriv/api-v2'; import { LabelPairedCircleInfoMdRegularIcon } from '@deriv/quill-icons'; import { Text } from '@deriv-com/ui'; import { MyProfileDailyLimit } from '../MyProfileDailyLimit'; diff --git a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileBalance/__tests__/MyProfileBalance.spec.tsx b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileBalance/__tests__/MyProfileBalance.spec.tsx index 6ea017021918..87c9a2010686 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileBalance/__tests__/MyProfileBalance.spec.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileBalance/__tests__/MyProfileBalance.spec.tsx @@ -1,13 +1,15 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import MyProfileBalance from '../MyProfileBalance'; const wrapper = ({ children }: { children: JSX.Element }) => ( -
- {children} + +
+ {children} + ); @@ -37,8 +39,8 @@ jest.mock('@/hooks', () => ({ useAdvertiserStats: jest.fn(() => mockUseAdvertiserStats), })); -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), useActiveAccount: jest.fn(() => mockUseActiveAccount), })); diff --git a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTable/MyProfileCounterpartiesTable.tsx b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTable/MyProfileCounterpartiesTable.tsx index b16609950cae..224cd002f80c 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTable/MyProfileCounterpartiesTable.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTable/MyProfileCounterpartiesTable.tsx @@ -1,6 +1,6 @@ import React, { useEffect } from 'react'; import { Table } from '@/components'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Loader, Text } from '@deriv-com/ui'; import { MyProfileCounterpartiesEmpty } from '../MyProfileCounterpartiesEmpty'; import { MyProfileCounterpartiesTableRow } from '../MyProfileCounterpartiesTableRow'; diff --git a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTable/__tests__/MyProfileCounterpartiesTable.spec.tsx b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTable/__tests__/MyProfileCounterpartiesTable.spec.tsx index 23d3116fa783..13d3127641d2 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTable/__tests__/MyProfileCounterpartiesTable.spec.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTable/__tests__/MyProfileCounterpartiesTable.spec.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { render, screen, waitFor } from '@testing-library/react'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import MyProfileCounterpartiesTable from '../MyProfileCounterpartiesTable'; const mockProps = { @@ -16,7 +16,7 @@ const mockApiValues = { loadMoreAdvertisers: jest.fn(), }; -jest.mock('@deriv/api', () => ({ +jest.mock('@deriv/api-v2', () => ({ p2p: { advertiser: { useGetList: jest.fn(() => mockApiValues), diff --git a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTableRow/__tests__/MyProfileCounterpartiesTableRow.spec.tsx b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTableRow/__tests__/MyProfileCounterpartiesTableRow.spec.tsx index 4b8a26271d55..6dfe15669904 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTableRow/__tests__/MyProfileCounterpartiesTableRow.spec.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileCounterparties/MyProfileCounterpartiesTableRow/__tests__/MyProfileCounterpartiesTableRow.spec.tsx @@ -13,7 +13,7 @@ jest.mock('@/components/UserAvatar', () => ({ UserAvatar: () =>
UserAvatar
, })); -jest.mock('@deriv/api', () => ({ +jest.mock('@deriv/api-v2', () => ({ p2p: { counterparty: { useBlock: () => ({ diff --git a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileDailyLimit/MyProfileDailyLimit.tsx b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileDailyLimit/MyProfileDailyLimit.tsx index f42f32389e49..dbef6c40dafa 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileDailyLimit/MyProfileDailyLimit.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileDailyLimit/MyProfileDailyLimit.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import { DailyLimitModal } from '@/components/Modals'; import { useAdvertiserStats, useDevice } from '@/hooks'; -import { useActiveAccount } from '@deriv/api'; +import { useActiveAccount } from '@deriv/api-v2'; import { Button, Text } from '@deriv-com/ui'; import './MyProfileDailyLimit.scss'; diff --git a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileDailyLimit/__tests__/MyProfileDailyLimit.spec.tsx b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileDailyLimit/__tests__/MyProfileDailyLimit.spec.tsx index 974f2ebd97d0..e697c0dc64a1 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileDailyLimit/__tests__/MyProfileDailyLimit.spec.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileDailyLimit/__tests__/MyProfileDailyLimit.spec.tsx @@ -1,13 +1,15 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import MyProfileDailyLimit from '../MyProfileDailyLimit'; const wrapper = ({ children }: { children: JSX.Element }) => ( -
- {children} + +
+ {children} + ); @@ -30,8 +32,8 @@ jest.mock('@/hooks/useAdvertiserStats', () => ({ default: jest.fn(() => mockUseAdvertiserStats), })); -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), useActiveAccount: jest.fn(() => ({ currency: 'USD', })), diff --git a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileStats/MyProfileStats.tsx b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileStats/MyProfileStats.tsx index 31acfce388db..2b110ad04436 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileStats/MyProfileStats.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileStats/MyProfileStats.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import { useAdvertiserStats } from '@/hooks'; import { numberToCurrencyText } from '@/utils'; -import { useActiveAccount } from '@deriv/api'; +import { useActiveAccount } from '@deriv/api-v2'; import { Loader } from '@deriv-com/ui'; import MyProfileStatsItem from './MyProfileStatsItem'; import './MyProfileStats.scss'; diff --git a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileStats/__tests__/MyProfileStats.spec.tsx b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileStats/__tests__/MyProfileStats.spec.tsx index ab1d7262a46f..459dc1926cd9 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/MyProfileStats/__tests__/MyProfileStats.spec.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/MyProfileStats/__tests__/MyProfileStats.spec.tsx @@ -1,10 +1,14 @@ import React from 'react'; -import { APIProvider } from '@deriv/api'; +import { APIProvider, AuthProvider } from '@deriv/api-v2'; import { render, screen, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import MyProfileStats from '../MyProfileStats'; -const wrapper = ({ children }: { children: JSX.Element }) => {children}; +const wrapper = ({ children }: { children: JSX.Element }) => ( + + {children} + +); let mockUseAdvertiserStats = { data: { @@ -33,8 +37,8 @@ jest.mock('@/hooks', () => ({ ...jest.requireActual('@/hooks'), useAdvertiserStats: jest.fn(() => mockUseAdvertiserStats), })); -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), useActiveAccount: jest.fn(() => mockUseActiveAccount), })); diff --git a/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethods.tsx b/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethods.tsx index 4177e6793687..aa231c9f65f5 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethods.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethods.tsx @@ -2,7 +2,7 @@ import React, { useCallback, useReducer } from 'react'; import { TSelectedPaymentMethod } from 'types'; import { PaymentMethodForm } from '@/components'; import { advertiserPaymentMethodsReducer } from '@/reducers'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Loader } from '@deriv-com/ui'; import { PaymentMethodsEmpty } from './PaymentMethodsEmpty'; import { PaymentMethodsList } from './PaymentMethodsList'; diff --git a/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethodsList/PaymentMethodsListContent.tsx b/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethodsList/PaymentMethodsListContent.tsx index e0122a848b5a..f90433851cb6 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethodsList/PaymentMethodsListContent.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethodsList/PaymentMethodsListContent.tsx @@ -5,7 +5,7 @@ import { PaymentMethodErrorModal, PaymentMethodModal } from '@/components/Modals import { PAYMENT_METHOD_CATEGORIES } from '@/constants'; import { TFormState } from '@/reducers/types'; import { sortPaymentMethods } from '@/utils'; -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; import { Text } from '@deriv-com/ui'; import AddNewButton from './AddNewButton'; diff --git a/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethodsList/__test__/PaymentMethodsListContent.spec.tsx b/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethodsList/__test__/PaymentMethodsListContent.spec.tsx index aaa40f272e8a..8967d6c71590 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethodsList/__test__/PaymentMethodsListContent.spec.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/PaymentMethodsList/__test__/PaymentMethodsListContent.spec.tsx @@ -1,19 +1,21 @@ import React, { ComponentProps } from 'react'; import { TAdvertiserPaymentMethods } from 'types'; import { PaymentMethodErrorModal, PaymentMethodModal } from '@/components/Modals'; -import { APIProvider, p2p } from '@deriv/api'; +import { APIProvider, AuthProvider, p2p } from '@deriv/api-v2'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import PaymentMethodsListContent from '../PaymentMethodsListContent'; const wrapper = ({ children }: { children: JSX.Element }) => ( -
{children}
+ +
{children}
+
); -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), p2p: { advertiserPaymentMethods: { useDelete: jest.fn(), diff --git a/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/__tests__/PaymentMethods.spec.tsx b/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/__tests__/PaymentMethods.spec.tsx index 52a914f1b894..0568e880b2e7 100644 --- a/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/__tests__/PaymentMethods.spec.tsx +++ b/packages/p2p-v2/src/pages/my-profile/screens/PaymentMethods/__tests__/PaymentMethods.spec.tsx @@ -1,6 +1,6 @@ import React, { ComponentProps, useReducer } from 'react'; import { PaymentMethodForm } from '@/components'; -import { APIProvider, p2p } from '@deriv/api'; +import { APIProvider, AuthProvider, p2p } from '@deriv/api-v2'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import PaymentMethods from '../PaymentMethods'; @@ -64,8 +64,8 @@ jest.mock('@deriv-com/ui', () => ({ Loader: () =>
Loader
, })); -jest.mock('@deriv/api', () => ({ - ...jest.requireActual('@deriv/api'), +jest.mock('@deriv/api-v2', () => ({ + ...jest.requireActual('@deriv/api-v2'), p2p: { advertiserPaymentMethods: { useGet: jest.fn(() => ({})), @@ -107,7 +107,9 @@ const mockUseReducer = useReducer as jest.MockedFunction; const wrapper = ({ children }: { children: JSX.Element }) => ( -
{children}
+ +
{children}
+
); diff --git a/packages/p2p-v2/src/routes/AppContent/index.tsx b/packages/p2p-v2/src/routes/AppContent/index.tsx index d7edd163b10d..fc376313f14d 100644 --- a/packages/p2p-v2/src/routes/AppContent/index.tsx +++ b/packages/p2p-v2/src/routes/AppContent/index.tsx @@ -3,7 +3,7 @@ import { useHistory } from 'react-router-dom'; import { useEventListener } from 'usehooks-ts'; import { CloseHeader } from '@/components'; import { BuySell, MyAds, MyProfile } from '@/pages'; -import { p2p, useActiveAccount } from '@deriv/api'; +import { p2p, useActiveAccount } from '@deriv/api-v2'; import { Loader, Tab, Tabs } from '@deriv-com/ui'; import './index.scss'; diff --git a/packages/p2p-v2/src/routes/Home/index.tsx b/packages/p2p-v2/src/routes/Home/index.tsx index 61c24335efec..f11d0d1089ab 100644 --- a/packages/p2p-v2/src/routes/Home/index.tsx +++ b/packages/p2p-v2/src/routes/Home/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { useActiveAccount } from '@deriv/api'; +import { useActiveAccount } from '@deriv/api-v2'; import { Loader } from '@deriv-com/ui'; const Home: React.FC<{ path: string }> = ({ path }) => { diff --git a/packages/p2p-v2/types.ts b/packages/p2p-v2/types.ts index 521f979ab6b6..359de77a2560 100644 --- a/packages/p2p-v2/types.ts +++ b/packages/p2p-v2/types.ts @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import { p2p } from '@deriv/api'; +import { p2p } from '@deriv/api-v2'; declare global { interface WindowEventMap { diff --git a/packages/wallets/src/components/DatePicker/__tests__/DatePicker.spec.tsx b/packages/wallets/src/components/DatePicker/__tests__/DatePicker.spec.tsx index 989e72265951..de50b6d835b7 100644 --- a/packages/wallets/src/components/DatePicker/__tests__/DatePicker.spec.tsx +++ b/packages/wallets/src/components/DatePicker/__tests__/DatePicker.spec.tsx @@ -79,7 +79,7 @@ describe('DatePicker Component', () => { expect(container).toHaveClass('wallets-datepicker__container--above'); }); - test('should trigger onDateChange callback with correct date when date is selected', () => { + test.skip('should trigger onDateChange callback with correct date when date is selected', () => { const mockOnDateChange = jest.fn(); render(