Skip to content
Merged
Show file tree
Hide file tree
Changes from 19 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
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export const optimismToken1Address =
'0x0000000000000000000000000000000000000003' as Hex;

export const defaultBridgeControllerState = {
quoteRequest: {},
quoteRequest: [{}],
quotes: [],
quotesInitialLoadTime: null,
quotesLastFetched: null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,8 @@ export const useBridgeQuoteRequest = (
await Engine.context.BridgeController.updateBridgeQuoteRequestParams(
params,
context,
0,
1,
);
}, [
sourceToken,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,8 @@ describe('useBridgeQuoteRequest', () => {
srcTokenAmount: '1500000000000000000', // 1.5 ETH in wei
}),
undefined,
0,
1,
);
});

Expand All @@ -277,6 +279,8 @@ describe('useBridgeQuoteRequest', () => {
srcTokenAmount: '0',
}),
undefined,
0,
1,
);
});

Expand Down Expand Up @@ -312,6 +316,8 @@ describe('useBridgeQuoteRequest', () => {
srcTokenAmount: '1000500000', // 1000.5 with 6 decimals
}),
undefined,
0,
1,
);
});

Expand Down Expand Up @@ -386,6 +392,8 @@ describe('useBridgeQuoteRequest', () => {
destWalletAddress: destSolanaAddress,
}),
undefined,
0,
1,
);

// Reset mock
Expand Down Expand Up @@ -414,6 +422,8 @@ describe('useBridgeQuoteRequest', () => {
gasIncluded: true,
}),
undefined,
0,
1,
);
});

Expand All @@ -438,6 +448,8 @@ describe('useBridgeQuoteRequest', () => {
gasIncluded: false,
}),
undefined,
0,
1,
);
});

Expand Down Expand Up @@ -475,6 +487,8 @@ describe('useBridgeQuoteRequest', () => {
gasIncluded7702: true,
}),
undefined,
0,
1,
);
});

Expand All @@ -495,6 +509,8 @@ describe('useBridgeQuoteRequest', () => {
gasIncluded7702: false,
}),
undefined,
0,
1,
);
});
});
Expand Down Expand Up @@ -539,6 +555,8 @@ describe('useBridgeQuoteRequest', () => {
gasIncluded7702: false,
}),
undefined,
0,
1,
);
});
});
Expand Down Expand Up @@ -566,6 +584,8 @@ describe('useBridgeQuoteRequest', () => {
insufficientBal: false,
}),
undefined,
0,
1,
);
});

Expand Down Expand Up @@ -596,6 +616,8 @@ describe('useBridgeQuoteRequest', () => {
insufficientBal: true,
}),
undefined,
0,
1,
);
});

Expand Down Expand Up @@ -626,6 +648,8 @@ describe('useBridgeQuoteRequest', () => {
insufficientBal: true,
}),
undefined,
0,
1,
);
});

Expand Down
28 changes: 20 additions & 8 deletions app/components/UI/Bridge/testUtils/index.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,41 @@
import {
type BridgeControllerState,
getDefaultBridgeControllerState,
type GenericQuoteRequest,
} from '@metamask/bridge-controller';
import { initialState } from '../_mocks_/initialState';
import { mockBridgeReducerState } from '../_mocks_/bridgeReducerState';
import type { BridgeState } from '../../../../core/redux/slices/bridge';
import { RootState } from '../../../../reducers';
import { DeepPartial } from '../../../../util/test/renderWithProvider';
import { merge } from 'lodash';

// Re-export all fixtures (no heavy dependencies)
export * from './fixtures';

type BridgeControllerStateOverride = Partial<BridgeControllerState>;

type BridgeControllerStateOverride = Partial<
Omit<BridgeControllerState, 'quoteRequest'>
> & { quoteRequest?: Partial<GenericQuoteRequest> };
/**
* Creates a complete bridge controller state by merging default state with overrides
* @param overrides - Partial state to override default values
* @returns Complete bridge controller state
*/
export const createBridgeControllerState = (
overrides: BridgeControllerStateOverride = {},
): BridgeControllerState => ({
...getDefaultBridgeControllerState(),
...overrides,
});
export const createBridgeControllerState = ({
quoteRequest,
...overrides
}: BridgeControllerStateOverride = {}): BridgeControllerState =>
merge(
getDefaultBridgeControllerState(),
overrides,
quoteRequest
? {
quoteRequest: Array.isArray(quoteRequest)
? quoteRequest
: [quoteRequest],
}
: {},
);
Comment thread
cursor[bot] marked this conversation as resolved.

/**
* Creates a complete test state for bridge components/hooks
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -256,10 +256,12 @@ export function useQuickBuyQuotes({
const controllerFields = {
...metadataDeps.bridgeController,
quotes: rawQuotes,
quoteRequest: {
...metadataDeps.bridgeController.quoteRequest,
...quoteRequestPatch,
},
quoteRequest: [
{
...(metadataDeps.bridgeController.quoteRequest?.[0] ?? {}),
...quoteRequestPatch,
},
],
gasFeeEstimatesByChainId: metadataDeps.gasFeeEstimatesByChainId,
...metadataDeps.multichainAssetsRates,
...metadataDeps.tokenRates,
Expand Down
2 changes: 1 addition & 1 deletion app/selectors/bridgeController/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export const selectBridgeControllerState = (state: RootState) =>
export const selectQuoteRequest = createSelector(
selectBridgeControllerState,
(bridgeControllerState: BridgeControllerState) =>
bridgeControllerState.quoteRequest,
bridgeControllerState.quoteRequest[0],
);

// Create the BridgeAppState selector following the same pattern as in bridge slice
Expand Down
8 changes: 5 additions & 3 deletions app/util/bridge/hooks/useSubmitBridgeTx.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,11 @@ describe('useSubmitBridgeTx', () => {
backgroundState: {
...backgroundState,
BridgeController: {
quoteRequest: {
slippage: 0.5,
},
quoteRequest: [
{
slippage: 0.5,
},
],
},
BridgeStatusController: {
startPollingForBridgeTxStatus: jest.fn(),
Expand Down
8 changes: 5 additions & 3 deletions app/util/test/initial-background-state.json
Original file line number Diff line number Diff line change
Expand Up @@ -698,9 +698,11 @@
"assetExchangeRates": {},
"minimumBalanceForRentExemptionInLamports": "0",
"quoteFetchError": null,
"quoteRequest": {
"srcTokenAddress": "0x0000000000000000000000000000000000000000"
},
"quoteRequest": [
{
"srcTokenAddress": "0x0000000000000000000000000000000000000000"
}
],
"quotes": [],
"quotesInitialLoadTime": null,
"quotesLastFetched": null,
Expand Down
5 changes: 2 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,6 @@
"@metamask/keyring-api@npm:^21.4.0": "23.1.0",
"@metamask/keyring-api@npm:^21.6.0": "23.1.0",
"@metamask/keyring-api@npm:^22.0.0": "23.1.0",
"@metamask/bridge-status-controller@npm:^71.0.0": "patch:@metamask/bridge-status-controller@npm%3A71.1.0#~/.yarn/patches/@metamask-bridge-status-controller-npm-71.1.0-6140a0bdf3.patch",
"@metamask/permission-controller": "^13.1.1"
},
"dependencies": {
Expand Down Expand Up @@ -249,8 +248,8 @@
"@metamask/authenticated-user-storage": "^1.0.0",
"@metamask/base-controller": "^9.0.1",
"@metamask/bitcoin-wallet-snap": "^1.10.1",
"@metamask/bridge-controller": "^71.1.0",
"@metamask/bridge-status-controller": "patch:@metamask/bridge-status-controller@npm%3A71.1.0#~/.yarn/patches/@metamask-bridge-status-controller-npm-71.1.0-6140a0bdf3.patch",
"@metamask/bridge-controller": "^72.0.0",
"@metamask/bridge-status-controller": "^71.1.1",
"@metamask/chain-agnostic-permission": "^1.5.0",
"@metamask/chomp-api-service": "^3.1.0",
"@metamask/client-controller": "^1.0.1",
Expand Down
40 changes: 22 additions & 18 deletions tests/component-view/stateFixture.ts
Original file line number Diff line number Diff line change
Expand Up @@ -307,15 +307,17 @@ export function createStateFixture(): StateFixtureBuilder {
conversionRates: {},
},
BridgeController: {
quoteRequest: {
srcChainId: numericChainId,
srcTokenAddress,
destChainId: numericChainId,
destTokenAddress,
destAddress: '',
srcAmount,
slippage: 0.005,
},
quoteRequest: [
{
srcChainId: numericChainId,
srcTokenAddress,
destChainId: numericChainId,
destTokenAddress,
destAddress: '',
srcAmount,
slippage: 0.005,
},
],
quotes: [quoteResponse],
recommendedQuote: quoteResponse,
quotesLastFetched: now,
Expand Down Expand Up @@ -446,15 +448,17 @@ export function createStateFixture(): StateFixtureBuilder {
backgroundState: {
...bg,
BridgeController: {
quoteRequest: {
srcChainId: undefined,
srcTokenAddress: undefined,
destChainId: undefined,
destTokenAddress: undefined,
destAddress: undefined,
srcAmount: undefined,
slippage: 0.005,
},
quoteRequest: [
{
srcChainId: undefined,
srcTokenAddress: undefined,
destChainId: undefined,
destTokenAddress: undefined,
destAddress: undefined,
srcAmount: undefined,
slippage: 0.005,
},
],
isInPolling: false,
quotesLastFetched: 0,
quotes: [],
Expand Down
16 changes: 13 additions & 3 deletions tests/smoke/swap/swap-deeplink-smoke.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,13 @@ import { SmokeSwap } from '../../tags';
import Assertions from '../../framework/Assertions';
import { asDetoxElement } from '../../framework';
import QuoteView from '../../page-objects/swaps/QuoteView';
import { testSpecificMock } from '../../helpers/swap/swap-mocks';
import {
mockSwapPopularTokens,
testSpecificMock,
} from '../../helpers/swap/swap-mocks';
import TestHelpers from '../../helpers';
import WalletView from '../../page-objects/wallet/WalletView';
import { Mockttp } from 'mockttp';

// Deep link URLs for testing unified swap/bridge experience
// Note: URLs use 'swap' terminology for backward compatibility but redirect to unified bridge experience
Expand Down Expand Up @@ -57,7 +61,10 @@ describe(
},
},
],
testSpecificMock,
testSpecificMock: async (mockServer: Mockttp) => {
await testSpecificMock(mockServer);
await mockSwapPopularTokens(mockServer);
},
restartDevice: true,
},
async () => {
Expand Down Expand Up @@ -176,7 +183,10 @@ describe(
},
},
],
testSpecificMock,
testSpecificMock: async (mockServer: Mockttp) => {
await testSpecificMock(mockServer);
await mockSwapPopularTokens(mockServer);
},
restartDevice: true,
},
async () => {
Expand Down
Loading
Loading