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
103 changes: 42 additions & 61 deletions packages/bridge-controller/src/bridge-controller.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ import mockBridgeQuotesErc20Native from '../tests/mock-quotes-erc20-native.json'
import mockBridgeQuotesNativeErc20Eth from '../tests/mock-quotes-native-erc20-eth.json';
import mockBridgeQuotesNativeErc20 from '../tests/mock-quotes-native-erc20.json';

const EMPTY_INIT_STATE = {
bridgeState: DEFAULT_BRIDGE_CONTROLLER_STATE,
};
const EMPTY_INIT_STATE = DEFAULT_BRIDGE_CONTROLLER_STATE;

const messengerMock = {
call: jest.fn(),
Expand Down Expand Up @@ -174,14 +172,14 @@ describe('BridgeController', function () {
);

await bridgeController.setBridgeFeatureFlags();
expect(bridgeController.state.bridgeState.bridgeFeatureFlags).toStrictEqual(
expect(bridgeController.state.bridgeFeatureFlags).toStrictEqual(
expectedFeatureFlagsResponse,
);
expect(setIntervalLengthSpy).toHaveBeenCalledTimes(1);
expect(setIntervalLengthSpy).toHaveBeenCalledWith(3);

bridgeController.resetState();
expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
bridgeFeatureFlags: expectedFeatureFlagsResponse,
quotes: DEFAULT_BRIDGE_CONTROLLER_STATE.quotes,
Expand All @@ -194,69 +192,61 @@ describe('BridgeController', function () {

it('updateBridgeQuoteRequestParams should update the quoteRequest state', async function () {
await bridgeController.updateBridgeQuoteRequestParams({ srcChainId: 1 });
expect(bridgeController.state.bridgeState.quoteRequest).toStrictEqual({
expect(bridgeController.state.quoteRequest).toStrictEqual({
srcChainId: 1,
slippage: 0.5,
srcTokenAddress: '0x0000000000000000000000000000000000000000',
walletAddress: undefined,
});

await bridgeController.updateBridgeQuoteRequestParams({ destChainId: 10 });
expect(bridgeController.state.bridgeState.quoteRequest).toStrictEqual({
expect(bridgeController.state.quoteRequest).toStrictEqual({
destChainId: 10,
slippage: 0.5,
srcTokenAddress: '0x0000000000000000000000000000000000000000',
walletAddress: undefined,
});

await bridgeController.updateBridgeQuoteRequestParams({
destChainId: undefined,
});
expect(bridgeController.state.bridgeState.quoteRequest).toStrictEqual({
expect(bridgeController.state.quoteRequest).toStrictEqual({
destChainId: undefined,
slippage: 0.5,
srcTokenAddress: '0x0000000000000000000000000000000000000000',
walletAddress: undefined,
});

await bridgeController.updateBridgeQuoteRequestParams({
srcTokenAddress: undefined,
});
expect(bridgeController.state.bridgeState.quoteRequest).toStrictEqual({
expect(bridgeController.state.quoteRequest).toStrictEqual({
slippage: 0.5,
srcTokenAddress: undefined,
walletAddress: undefined,
});

await bridgeController.updateBridgeQuoteRequestParams({
srcTokenAmount: '100000',
destTokenAddress: '0x123',
slippage: 0.5,
srcTokenAddress: '0x0000000000000000000000000000000000000000',
walletAddress: undefined,
});
expect(bridgeController.state.bridgeState.quoteRequest).toStrictEqual({
expect(bridgeController.state.quoteRequest).toStrictEqual({
srcTokenAmount: '100000',
destTokenAddress: '0x123',
slippage: 0.5,
srcTokenAddress: '0x0000000000000000000000000000000000000000',
walletAddress: undefined,
});

await bridgeController.updateBridgeQuoteRequestParams({
srcTokenAddress: '0x2ABC',
});
expect(bridgeController.state.bridgeState.quoteRequest).toStrictEqual({
expect(bridgeController.state.quoteRequest).toStrictEqual({
slippage: 0.5,
srcTokenAddress: '0x2ABC',
walletAddress: undefined,
});

bridgeController.resetState();
expect(bridgeController.state.bridgeState.quoteRequest).toStrictEqual({
expect(bridgeController.state.quoteRequest).toStrictEqual({
slippage: 0.5,
srcTokenAddress: '0x0000000000000000000000000000000000000000',
walletAddress: undefined,
});
});

Expand Down Expand Up @@ -326,7 +316,7 @@ describe('BridgeController', function () {
},
});

expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, walletAddress: undefined },
quotes: DEFAULT_BRIDGE_CONTROLLER_STATE.quotes,
Expand All @@ -349,11 +339,9 @@ describe('BridgeController', function () {
BridgeClientId.EXTENSION,
mockFetchFn,
);
expect(
bridgeController.state.bridgeState.quotesLastFetched,
).toBeUndefined();
expect(bridgeController.state.quotesLastFetched).toBeNull();

expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, insufficientBal: false },
quotes: [],
Expand All @@ -364,42 +352,41 @@ describe('BridgeController', function () {
// After first fetch
jest.advanceTimersByTime(10000);
await flushPromises();
expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, insufficientBal: false },
quotes: mockBridgeQuotesNativeErc20Eth,
quotesLoadingStatus: 1,
}),
);
const firstFetchTime = bridgeController.state.bridgeState.quotesLastFetched;
const firstFetchTime = bridgeController.state.quotesLastFetched;
expect(firstFetchTime).toBeGreaterThan(0);

// After 2nd fetch
jest.advanceTimersByTime(50000);
await flushPromises();
expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, insufficientBal: false },
quotes: [
...mockBridgeQuotesNativeErc20Eth,
...mockBridgeQuotesNativeErc20Eth,
],
quotesLoadingStatus: 1,
quoteFetchError: undefined,
quoteFetchError: null,
quotesRefreshCount: 2,
}),
);
expect(fetchBridgeQuotesSpy).toHaveBeenCalledTimes(2);
const secondFetchTime =
bridgeController.state.bridgeState.quotesLastFetched;
const secondFetchTime = bridgeController.state.quotesLastFetched;
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
expect(secondFetchTime).toBeGreaterThan(firstFetchTime!);

// After 3nd fetch throws an error
jest.advanceTimersByTime(50000);
await flushPromises();
expect(fetchBridgeQuotesSpy).toHaveBeenCalledTimes(3);
expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, insufficientBal: false },
quotes: [
Expand All @@ -412,7 +399,7 @@ describe('BridgeController', function () {
}),
);
expect(
bridgeController.state.bridgeState.quotesLastFetched,
bridgeController.state.quotesLastFetched,
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
).toBeGreaterThan(secondFetchTime!);

Expand Down Expand Up @@ -478,12 +465,12 @@ describe('BridgeController', function () {
},
});

expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, walletAddress: undefined },
quotes: DEFAULT_BRIDGE_CONTROLLER_STATE.quotes,
quotesLastFetched: DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLastFetched,
quotesInitialLoadTime: undefined,
quotesInitialLoadTime: null,
quotesLoadingStatus:
DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLoadingStatus,
}),
Expand All @@ -502,11 +489,9 @@ describe('BridgeController', function () {
BridgeClientId.EXTENSION,
mockFetchFn,
);
expect(
bridgeController.state.bridgeState.quotesLastFetched,
).toBeUndefined();
expect(bridgeController.state.quotesLastFetched).toBeNull();

expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, insufficientBal: true },
quotes: [],
Expand All @@ -517,7 +502,7 @@ describe('BridgeController', function () {
// After first fetch
jest.advanceTimersByTime(10000);
await flushPromises();
expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, insufficientBal: true },
quotes: mockBridgeQuotesNativeErc20Eth,
Expand All @@ -526,14 +511,14 @@ describe('BridgeController', function () {
quotesInitialLoadTime: 11000,
}),
);
const firstFetchTime = bridgeController.state.bridgeState.quotesLastFetched;
const firstFetchTime = bridgeController.state.quotesLastFetched;
expect(firstFetchTime).toBeGreaterThan(0);

// After 2nd fetch
jest.advanceTimersByTime(50000);
await flushPromises();
expect(fetchBridgeQuotesSpy).toHaveBeenCalledTimes(1);
expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, insufficientBal: true },
quotes: mockBridgeQuotesNativeErc20Eth,
Expand All @@ -542,8 +527,7 @@ describe('BridgeController', function () {
quotesInitialLoadTime: 11000,
}),
);
const secondFetchTime =
bridgeController.state.bridgeState.quotesLastFetched;
const secondFetchTime = bridgeController.state.quotesLastFetched;
expect(secondFetchTime).toStrictEqual(firstFetchTime);
expect(getLayer1GasFeeMock).not.toHaveBeenCalled();
});
Expand All @@ -566,7 +550,7 @@ describe('BridgeController', function () {
expect(stopAllPollingSpy).toHaveBeenCalledTimes(1);
expect(startPollingSpy).not.toHaveBeenCalled();

expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: {
srcChainId: 1,
Expand Down Expand Up @@ -709,7 +693,7 @@ describe('BridgeController', function () {
},
});

expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, walletAddress: undefined },
quotes: DEFAULT_BRIDGE_CONTROLLER_STATE.quotes,
Expand All @@ -732,11 +716,9 @@ describe('BridgeController', function () {
BridgeClientId.EXTENSION,
mockFetchFn,
);
expect(
bridgeController.state.bridgeState.quotesLastFetched,
).toBeUndefined();
expect(bridgeController.state.quotesLastFetched).toBeNull();

expect(bridgeController.state.bridgeState).toStrictEqual(
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, insufficientBal: true },
quotes: [],
Expand All @@ -747,8 +729,8 @@ describe('BridgeController', function () {
// After first fetch
jest.advanceTimersByTime(1500);
await flushPromises();
const { quotes } = bridgeController.state.bridgeState;
expect(bridgeController.state.bridgeState).toStrictEqual(
const { quotes } = bridgeController.state;
expect(bridgeController.state).toStrictEqual(
expect.objectContaining({
quoteRequest: { ...quoteRequest, insufficientBal: true },
quotesLoadingStatus: 1,
Expand All @@ -761,8 +743,7 @@ describe('BridgeController', function () {
expect(quote).toEqual(expectedQuote);
});

const firstFetchTime =
bridgeController.state.bridgeState.quotesLastFetched;
const firstFetchTime = bridgeController.state.quotesLastFetched;
expect(firstFetchTime).toBeGreaterThan(0);

expect(getLayer1GasFeeMock).toHaveBeenCalledTimes(
Expand Down Expand Up @@ -799,7 +780,7 @@ describe('BridgeController', function () {

expect(fetchBridgeQuotesSpy).not.toHaveBeenCalled();
expect(hasSufficientBalanceSpy).toHaveBeenCalledTimes(1);
expect(bridgeController.state.bridgeState.quotesLoadingStatus).toBe(
expect(bridgeController.state.quotesLoadingStatus).toBe(
DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLoadingStatus,
);
});
Expand Down Expand Up @@ -836,9 +817,9 @@ describe('BridgeController', function () {
await flushPromises();

// Verify state wasn't updated due to abort
expect(bridgeController.state.bridgeState.quoteFetchError).toBeUndefined();
expect(bridgeController.state.bridgeState.quotesLoadingStatus).toBe(0);
expect(bridgeController.state.bridgeState.quotes).toStrictEqual([]);
expect(bridgeController.state.quoteFetchError).toBeNull();
expect(bridgeController.state.quotesLoadingStatus).toBe(0);
expect(bridgeController.state.quotes).toStrictEqual([]);

// Test reset abort
fetchBridgeQuotesSpy.mockRejectedValueOnce('Reset controller state');
Expand All @@ -849,8 +830,8 @@ describe('BridgeController', function () {
await flushPromises();

// Verify state wasn't updated due to reset
expect(bridgeController.state.bridgeState.quoteFetchError).toBeUndefined();
expect(bridgeController.state.bridgeState.quotesLoadingStatus).toBe(0);
expect(bridgeController.state.bridgeState.quotes).toStrictEqual([]);
expect(bridgeController.state.quoteFetchError).toBeNull();
expect(bridgeController.state.quotesLoadingStatus).toBe(0);
expect(bridgeController.state.quotes).toStrictEqual([]);
});
});
Loading
Loading