Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 0 additions & 96 deletions app/components/UI/Ramp/Views/BuildQuote/BuildQuote.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2010,54 +2010,6 @@ describe('BuildQuote', () => {
expect(continueButton.props.accessibilityState?.disabled).not.toBe(true);
});

it('matches quote when API returns prefixed provider ID', () => {
mockUseRampsQuotes.mockReturnValue({
data: {
success: [
{ ...WIDGET_PROVIDER_QUOTE, provider: '/providers/moonpay' },
],
},
loading: false,
error: null,
});

const { getByText, queryByText } = renderWithProvider(<BuildQuote />, {
state: initialRootState,
});

expect(getByText('Powered by MoonPay')).toBeOnTheScreen();
expect(queryByText(noQuotesErrorPattern)).not.toBeOnTheScreen();
});

it('matches quote when selected provider has prefixed ID and quote has short ID', () => {
mockUseRampsController.mockReturnValue({
userRegion: USER_REGION,
providers: [
{ ...WIDGET_PROVIDER, id: '/providers/moonpay' },
NATIVE_PROVIDER,
],
selectedProvider: { ...WIDGET_PROVIDER, id: '/providers/moonpay' },
setSelectedProvider: mockSetSelectedProvider,
selectedToken: SELECTED_TOKEN,
paymentMethods: [SELECTED_PAYMENT_METHOD],
getBuyWidgetData: mockGetBuyWidgetData,
addPrecreatedOrder: mockAddPrecreatedOrder,
addOrder: mockAddOrder,
getOrderFromCallback: mockGetOrderFromCallback,
paymentMethodsLoading: false,
paymentMethodsFetching: false,
paymentMethodsStatus: 'success',
selectedPaymentMethod: SELECTED_PAYMENT_METHOD,
});

const { getByText, queryByText } = renderWithProvider(<BuildQuote />, {
state: initialRootState,
});

expect(getByText('Powered by MoonPay')).toBeOnTheScreen();
expect(queryByText(noQuotesErrorPattern)).not.toBeOnTheScreen();
});

it('finds matching quote even if it is not the first in the array', () => {
mockUseRampsQuotes.mockReturnValue({
data: {
Expand Down Expand Up @@ -2162,54 +2114,6 @@ describe('BuildQuote', () => {
expect(continueButton.props.accessibilityState?.disabled).not.toBe(true);
});

it('matches quote when API returns prefixed provider ID', () => {
mockUseRampsQuotes.mockReturnValue({
data: {
success: [
{ ...WIDGET_PROVIDER_QUOTE, provider: '/providers/moonpay' },
],
},
loading: false,
error: null,
});

const { getByText, queryByText } = renderWithProvider(<BuildQuote />, {
state: initialRootState,
});

expect(getByText('Powered by MoonPay')).toBeOnTheScreen();
expect(queryByText(noQuotesErrorPattern)).not.toBeOnTheScreen();
});

it('matches quote when selected provider has prefixed ID and quote has short ID', () => {
mockUseRampsController.mockReturnValue({
userRegion: USER_REGION,
providers: [
{ ...WIDGET_PROVIDER, id: '/providers/moonpay' },
NATIVE_PROVIDER,
],
selectedProvider: { ...WIDGET_PROVIDER, id: '/providers/moonpay' },
setSelectedProvider: mockSetSelectedProvider,
selectedToken: SELECTED_TOKEN,
paymentMethods: [SELECTED_PAYMENT_METHOD],
getBuyWidgetData: mockGetBuyWidgetData,
addPrecreatedOrder: mockAddPrecreatedOrder,
addOrder: mockAddOrder,
getOrderFromCallback: mockGetOrderFromCallback,
paymentMethodsLoading: false,
paymentMethodsFetching: false,
paymentMethodsStatus: 'success',
selectedPaymentMethod: SELECTED_PAYMENT_METHOD,
});

const { getByText, queryByText } = renderWithProvider(<BuildQuote />, {
state: initialRootState,
});

expect(getByText('Powered by MoonPay')).toBeOnTheScreen();
expect(queryByText(noQuotesErrorPattern)).not.toBeOnTheScreen();
});

it('finds matching quote even if it is not the first in the array', () => {
mockUseRampsQuotes.mockReturnValue({
data: {
Expand Down
9 changes: 3 additions & 6 deletions app/components/UI/Ramp/Views/BuildQuote/BuildQuote.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,7 @@ import styleSheet from './BuildQuote.styles';
import { getFontSizeForInputLength } from './getFontSizeForInputLength';
import { useFormatters } from '../../../../hooks/useFormatters';
import { useTokenNetworkInfo } from '../../hooks/useTokenNetworkInfo';
import {
RampsOrderStatus,
normalizeProviderCode,
} from '@metamask/ramps-controller';
import { RampsOrderStatus } from '@metamask/ramps-controller';
import { useRampsController } from '../../hooks/useRampsController';
import { useRampsQuotes } from '../../hooks/useRampsQuotes';
import { useContinueWithQuote } from '../../hooks/useContinueWithQuote';
Expand Down Expand Up @@ -477,10 +474,10 @@ function BuildQuote() {
) {
return null;
}
const targetProvider = normalizeProviderCode(selectedProvider.id);
const targetProvider = selectedProvider.id;
return (
quotesResponse.success.find(
(quote) => normalizeProviderCode(quote.provider) === targetProvider,
(quote) => quote.provider === targetProvider,
) ?? null
);
}, [quotesResponse, selectedProvider, selectedPaymentMethod]);
Expand Down
3 changes: 1 addition & 2 deletions app/components/UI/Ramp/Views/Checkout/Checkout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import { useNavigation } from '@react-navigation/native';
import { useAnalytics } from '../../../../hooks/useAnalytics/useAnalytics';
import { MetaMetricsEvents } from '../../../../../core/Analytics';
import { callbackBaseUrl } from '../../Aggregator/sdk';
import { normalizeProviderCode } from '@metamask/ramps-controller';
import { FIAT_ORDER_PROVIDERS } from '../../../../../constants/on-ramp';
import { strings } from '../../../../../../locales/i18n';
import Routes from '../../../../../constants/navigation/Routes';
Expand Down Expand Up @@ -301,7 +300,7 @@ const Checkout = () => {
registeredOrderIdsRef.current.add(effectiveOrderId);
addPrecreatedOrder({
orderId: effectiveOrderId,
providerCode: normalizeProviderCode(providerCode),
providerCode,
walletAddress,
chainId: network || undefined,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ const MOCK_SUPPORT_URL = 'https://support.test-provider.com';
const MOCK_TRANSAK_SUPPORT_URL = 'https://support.transak.com';

const createMockProvider = (overrides?: Partial<Provider>): Provider => ({
id: '/providers/test-provider',
id: 'test-provider',
name: 'Test Provider',
environmentType: 'PRODUCTION',
description: 'Test Provider Description',
Expand All @@ -33,8 +33,8 @@ const createMockProvider = (overrides?: Partial<Provider>): Provider => ({
...overrides,
});

const TRANSAK_PROVIDER_ID = '/providers/transak-native';
const TRANSAK_STAGING_PROVIDER_ID = '/providers/transak-native-staging';
const TRANSAK_PROVIDER_ID = 'transak-native';
const TRANSAK_STAGING_PROVIDER_ID = 'transak-native-staging';

const createMockTransakProvider = (
overrides?: Partial<Provider>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,14 @@ import {
import { PROVIDER_LINKS } from '../../../Aggregator/types';

/**
* Transak native provider path prefix - matches both production
* ('/providers/transak-native') and staging ('/providers/transak-native-staging')
* Transak native provider code. Provider ids are canonical (non-prefixed), so
* `transak-native` matches both the native provider and its staging variant
* (`transak-native-staging`).
*/
const TRANSAK_NATIVE_PREFIX = '/providers/transak-native';
const TRANSAK_NATIVE_CODE = 'transak-native';

const isTransakNativeProvider = (providerId?: string): boolean =>
providerId?.startsWith(TRANSAK_NATIVE_PREFIX) ?? false;
providerId?.startsWith(TRANSAK_NATIVE_CODE) ?? false;

export const createSettingsModalNavDetails = createNavigationDetails(
Routes.RAMP.MODALS.ID,
Expand Down
3 changes: 1 addition & 2 deletions app/components/UI/Ramp/Views/NativeFlow/BankDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import BankDetailRow from '../../components/BankDetailRow';
import {
RampsOrderStatus,
type TransakDepositOrder,
normalizeProviderCode,
} from '@metamask/ramps-controller';
import { useTheme } from '../../../../../util/theme';
import PrivacySection from '../../components/PrivacySection';
Expand Down Expand Up @@ -115,7 +114,7 @@ const V2BankDetails = () => {
setDepositOrder(updatedDepositOrder);
}

const providerCode = normalizeProviderCode(order.provider?.id ?? '');
const providerCode = order.provider?.id ?? '';
await refreshOrder(
providerCode,
order.providerOrderId,
Expand Down
7 changes: 2 additions & 5 deletions app/components/UI/Ramp/Views/OrderDetails/OrderDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,7 @@ import {
ButtonSize,
HeaderStandard,
} from '@metamask/design-system-react-native';
import {
normalizeProviderCode,
RampsOrderStatus,
} from '@metamask/ramps-controller';
import { RampsOrderStatus } from '@metamask/ramps-controller';
import { isBailedOrderStatus } from '../BuildQuote/BuildQuote';
import { extractOrderCode } from '../../utils/extractOrderCode';
import {
Expand Down Expand Up @@ -204,7 +201,7 @@ const OrderDetails = () => {
try {
setError(null);
setIsRefreshing(true);
const providerCode = normalizeProviderCode(order.provider?.id ?? '');
const providerCode = order.provider?.id ?? '';
await refreshOrder(
providerCode,
order.providerOrderId,
Expand Down
3 changes: 1 addition & 2 deletions app/components/UI/Ramp/hooks/useContinueWithQuote.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { useNavigation } from '@react-navigation/native';
import { useSelector } from 'react-redux';
import InAppBrowser from 'react-native-inappbrowser-reborn';
import type { CaipChainId } from '@metamask/utils';
import { normalizeProviderCode } from '@metamask/ramps-controller';

import { strings } from '../../../../../locales/i18n';
import { FIAT_ORDER_PROVIDERS } from '../../../../constants/on-ramp';
Expand Down Expand Up @@ -244,7 +243,7 @@ export function useContinueWithQuote(
let redirectUrl: string;
let buyWidget: Awaited<ReturnType<typeof getBuyWidgetData>>;
try {
providerCode = normalizeProviderCode(quote.provider);
providerCode = quote.provider;
const isCustom = isCustomAction(quote);
const redirectConfig = getWidgetRedirectConfig(
quote,
Expand Down
3 changes: 1 addition & 2 deletions app/components/UI/Ramp/hooks/useTransakRouting.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ jest.mock('./useRampsOrders', () => ({
}));

const MOCK_SELECTED_PROVIDER = {
id: '/providers/transak-native-staging',
id: 'transak-native-staging',
name: 'Transak',
};

Expand Down Expand Up @@ -256,7 +256,6 @@ jest.mock('@metamask/ramps-controller', () => ({
(orderId: string, _env: string) => `transformed-${orderId}`,
),
},
normalizeProviderCode: (code: string) => code.replace(/^\/providers\//, ''),
RampsOrderStatus: {
Pending: 'PENDING',
Completed: 'COMPLETED',
Expand Down
11 changes: 5 additions & 6 deletions app/components/UI/Ramp/hooks/useTransakRouting.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import type { CaipChainId } from '@metamask/utils';
import { strings } from '../../../../../locales/i18n';
import { useTheme } from '../../../../util/theme';
import {
normalizeProviderCode,
RampsOrderStatus,
type TransakBuyQuote,
} from '@metamask/ramps-controller';
Expand Down Expand Up @@ -492,8 +491,8 @@ export const useTransakRouting = (config?: UseTransakRoutingConfig) => {
throw new Error('Missing order');
}

const providerCode = normalizeProviderCode(
String(depositOrder.provider ?? 'transak-native'),
const providerCode = String(
depositOrder.provider ?? 'transak-native',
);
const rampsOrder = await refreshOrder(
providerCode,
Expand Down Expand Up @@ -614,7 +613,7 @@ export const useTransakRouting = (config?: UseTransakRoutingConfig) => {
name: Routes.RAMP.RAMPS_ORDER_DETAILS,
params: {
callbackUrl: url,
providerCode: normalizeProviderCode(selectedProvider.id),
providerCode: selectedProvider.id,
walletAddress: walletAddress || '',
showCloseButton: true,
...(cryptoSymbol ? { cryptocurrency: cryptoSymbol } : {}),
Expand Down Expand Up @@ -756,8 +755,8 @@ export const useTransakRouting = (config?: UseTransakRoutingConfig) => {
throw new Error('Missing order');
}

const providerCode = normalizeProviderCode(
String(depositOrder.provider ?? 'transak-native'),
const providerCode = String(
depositOrder.provider ?? 'transak-native',
);
const rampsOrder = await refreshOrder(
providerCode,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ const mockRampsOrder: RampsOrder = {
isOnlyLink: false,
status: RampsOrderStatus.Pending,
provider: {
id: '/providers/transak',
id: 'transak',
name: 'Transak',
environmentType: 'PRODUCTION' as const,
description: 'Test provider',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
import {
normalizeProviderCode,
type RampsOrder,
} from '@metamask/ramps-controller';
import { type RampsOrder } from '@metamask/ramps-controller';
import {
FIAT_ORDER_PROVIDERS,
FIAT_ORDER_STATES,
Expand Down Expand Up @@ -104,7 +101,7 @@ export async function processUnifiedOrder(
try {
const data = order.data as RampsOrder;
const orderCode = data.providerOrderId;
const providerCode = normalizeProviderCode(data.provider?.id ?? '');
const providerCode = data.provider?.id ?? '';

if (!providerCode || !orderCode) {
throw new Error(
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@
"@metamask/preinstalled-example-snap": "^0.8.1",
"@metamask/profile-metrics-controller": "^4.0.1",
"@metamask/profile-sync-controller": "^28.3.0",
"@metamask/ramps-controller": "^15.1.0",
"@metamask/ramps-controller": "^16.0.0",
"@metamask/react-data-query": "^0.2.0",
"@metamask/react-native-acm": "patch:@metamask/react-native-acm@npm%3A1.2.0#~/.yarn/patches/@metamask-react-native-acm-npm-1.2.0-944bf863eb.patch",
"@metamask/react-native-actionsheet": "2.4.2",
Expand Down
14 changes: 13 additions & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -9931,6 +9931,18 @@ __metadata:
languageName: node
linkType: hard

"@metamask/ramps-controller@npm:^16.0.0":
version: 16.0.0
resolution: "@metamask/ramps-controller@npm:16.0.0"
dependencies:
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/controller-utils": "npm:^12.3.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/profile-sync-controller": "npm:^28.3.0"
checksum: 10/a918edf198ede829ec51edc56898b2118b9da55e8091b2fe3616858038c9a28947467b31e73e89745ee76f67766476e8653a88a440a876cc54c119167acab576
languageName: node
linkType: hard

"@metamask/react-data-query@npm:^0.2.0":
version: 0.2.0
resolution: "@metamask/react-data-query@npm:0.2.0"
Expand Down Expand Up @@ -35903,7 +35915,7 @@ __metadata:
"@metamask/profile-metrics-controller": "npm:^4.0.1"
"@metamask/profile-sync-controller": "npm:^28.3.0"
"@metamask/providers": "npm:^18.3.1"
"@metamask/ramps-controller": "npm:^15.1.0"
"@metamask/ramps-controller": "npm:^16.0.0"
"@metamask/react-data-query": "npm:^0.2.0"
"@metamask/react-native-acm": "patch:@metamask/react-native-acm@npm%3A1.2.0#~/.yarn/patches/@metamask-react-native-acm-npm-1.2.0-944bf863eb.patch"
"@metamask/react-native-actionsheet": "npm:2.4.2"
Expand Down
Loading