Skip to content

Commit 36c4044

Browse files
committed
feat: fixed breaking tests
1 parent 9f02611 commit 36c4044

File tree

3 files changed

+140
-87
lines changed

3 files changed

+140
-87
lines changed

app/components/UI/AssetOverview/TokenDetails/TokenDetails.test.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ import { selectMultichainAssetsRates } from '../../../../selectors/multichain';
2121
import { selectIsEvmNetworkSelected } from '../../../../selectors/multichainNetworkController';
2222
import { selectStablecoinLendingEnabledFlag } from '../../Earn/selectors/featureFlags';
2323

24+
jest.mock('../../Earn/constants/tempLendingConstants', () => ({
25+
USER_HAS_LENDING_POSITIONS: false,
26+
}));
27+
2428
jest.mock('../../../../core/Engine', () => ({
2529
getTotalEvmFiatAccountBalance: jest.fn(),
2630
context: {
@@ -329,7 +333,7 @@ describe('TokenDetails', () => {
329333
expect(getByText('Market details')).toBeDefined();
330334
});
331335

332-
it('renders EarnEmptyStateCta if asset can be lent and balance is not zero', () => {
336+
it('renders EarnEmptyStateCta if asset can be lent and balance is not zero and user does not have existing positions', () => {
333337
const useSelectorSpy = jest.spyOn(reactRedux, 'useSelector');
334338
const SELECTOR_MOCKS = {
335339
selectTokenMarketDataByChainId: {},

app/components/UI/Stake/components/StakeButton/StakeButton.test.tsx

Lines changed: 135 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import { WalletViewSelectorsIDs } from '../../../../../../e2e/selectors/wallet/W
44
import StakeButton from './index';
55
import Routes from '../../../../../constants/navigation/Routes';
66
import renderWithProvider from '../../../../../util/test/renderWithProvider';
7-
import { MOCK_ETH_MAINNET_ASSET } from '../../__mocks__/stakeMockData';
7+
import {
8+
MOCK_ETH_MAINNET_ASSET,
9+
MOCK_USDC_MAINNET_ASSET,
10+
} from '../../__mocks__/stakeMockData';
811
import { useMetrics } from '../../../../hooks/useMetrics';
912
import { MetricsEventBuilder } from '../../../../../core/Analytics/MetricsEventBuilder';
1013
import { mockNetworkState } from '../../../../../util/test/network';
@@ -17,9 +20,32 @@ import {
1720
selectPooledStakingEnabledFlag,
1821
selectStablecoinLendingEnabledFlag,
1922
} from '../../../Earn/selectors/featureFlags';
23+
import { TokenI } from '../../../Tokens/types';
2024

2125
const mockNavigate = jest.fn();
2226

27+
const MOCK_APR_VALUES: { [symbol: string]: string } = {
28+
Ethereum: '2.3',
29+
USDC: '4.5',
30+
USDT: '4.1',
31+
DAI: '5.0',
32+
};
33+
34+
jest.mock('../../../Earn/hooks/useEarnTokenDetails', () => ({
35+
useEarnTokenDetails: () => ({
36+
getTokenWithBalanceAndApr: (token: TokenI) => ({
37+
...token,
38+
apr: MOCK_APR_VALUES[token.symbol] ?? '0.0',
39+
balanceFormatted: token.symbol === 'USDC' ? '6.84314 USDC' : '0',
40+
balanceFiat: token.symbol === 'USDC' ? '$6.84' : '$0.00',
41+
balanceMinimalUnit: token.symbol === 'USDC' ? '6.84314' : '0',
42+
balanceFiatNumber: token.symbol === 'USDC' ? 6.84314 : 0,
43+
experience:
44+
token.symbol === 'USDC' ? 'STABLECOIN_LENDING' : 'POOLED_STAKING',
45+
}),
46+
}),
47+
}));
48+
2349
jest.mock('@react-navigation/native', () => {
2450
const actualReactNavigation = jest.requireActual('@react-navigation/native');
2551
return {
@@ -148,103 +174,127 @@ describe('StakeButton', () => {
148174
expect(getByTestId(WalletViewSelectorsIDs.STAKE_BUTTON)).toBeDefined();
149175
});
150176

151-
it('navigates to Web view when stake button is pressed and user is not eligible', async () => {
152-
(useStakingEligibility as jest.Mock).mockReturnValue({
153-
isEligible: false,
154-
isLoadingEligibility: false,
155-
refreshPooledStakingEligibility: jest
156-
.fn()
157-
.mockResolvedValue({ isEligible: false }),
158-
error: false,
159-
});
160-
const { getByTestId } = renderComponent();
177+
describe('Pooled-Staking', () => {
178+
it('navigates to Web view when earn button is pressed and user is not eligible', async () => {
179+
(useStakingEligibility as jest.Mock).mockReturnValue({
180+
isEligible: false,
181+
isLoadingEligibility: false,
182+
refreshPooledStakingEligibility: jest
183+
.fn()
184+
.mockResolvedValue({ isEligible: false }),
185+
error: false,
186+
});
187+
const { getByTestId } = renderComponent();
161188

162-
fireEvent.press(getByTestId(WalletViewSelectorsIDs.STAKE_BUTTON));
163-
await waitFor(() => {
164-
expect(mockNavigate).toHaveBeenCalledWith(Routes.BROWSER.HOME, {
165-
params: {
166-
newTabUrl: `${AppConstants.STAKE.URL}?metamaskEntry=mobile`,
167-
timestamp: expect.any(Number),
168-
},
169-
screen: Routes.BROWSER.VIEW,
189+
fireEvent.press(getByTestId(WalletViewSelectorsIDs.STAKE_BUTTON));
190+
await waitFor(() => {
191+
expect(mockNavigate).toHaveBeenCalledWith(Routes.BROWSER.HOME, {
192+
params: {
193+
newTabUrl: `${AppConstants.STAKE.URL}?metamaskEntry=mobile`,
194+
timestamp: expect.any(Number),
195+
},
196+
screen: Routes.BROWSER.VIEW,
197+
});
170198
});
171199
});
172-
});
173200

174-
it('navigates to Stake Input screen when stake button is pressed and user is eligible', async () => {
175-
(useStakingEligibility as jest.Mock).mockReturnValue({
176-
isEligible: true,
177-
isLoadingEligibility: false,
178-
refreshPooledStakingEligibility: jest
179-
.fn()
180-
.mockResolvedValue({ isEligible: true }),
181-
error: false,
182-
});
183-
const { getByTestId } = renderComponent();
201+
it('navigates to Stake Input screen when stake button is pressed and user is eligible', async () => {
202+
(useStakingEligibility as jest.Mock).mockReturnValue({
203+
isEligible: true,
204+
isLoadingEligibility: false,
205+
refreshPooledStakingEligibility: jest
206+
.fn()
207+
.mockResolvedValue({ isEligible: true }),
208+
error: false,
209+
});
210+
const { getByTestId } = renderComponent();
184211

185-
fireEvent.press(getByTestId(WalletViewSelectorsIDs.STAKE_BUTTON));
186-
await waitFor(() => {
187-
expect(mockNavigate).toHaveBeenCalledWith('StakeScreens', {
188-
screen: Routes.STAKING.STAKE,
189-
params: {
190-
token: MOCK_ETH_MAINNET_ASSET,
191-
},
212+
fireEvent.press(getByTestId(WalletViewSelectorsIDs.STAKE_BUTTON));
213+
await waitFor(() => {
214+
expect(mockNavigate).toHaveBeenCalledWith('StakeScreens', {
215+
screen: Routes.STAKING.STAKE,
216+
params: {
217+
token: MOCK_ETH_MAINNET_ASSET,
218+
},
219+
});
192220
});
193221
});
194-
});
195222

196-
it('navigates to Stake Input screen when on unsupported network', async () => {
197-
// Update the mock for this specific test
198-
useStakingChain.mockImplementation(() => ({
199-
isStakingSupportedChain: false,
200-
}));
201-
202-
const UNSUPPORTED_NETWORK_STATE = {
203-
engine: {
204-
backgroundState: {
205-
NetworkController: {
206-
...mockNetworkState({
207-
chainId: '0x89', // Polygon
208-
}),
209-
},
210-
MultichainNetworkController: {
211-
isEvmSelected: true,
212-
selectedMultichainNetworkChainId: SolScope.Mainnet,
213-
214-
multichainNetworkConfigurationsByChainId: {
215-
'bip122:000000000019d6689c085ae165831e93': {
216-
chainId: 'bip122:000000000019d6689c085ae165831e93',
217-
name: 'Bitcoin Mainnet',
218-
nativeCurrency:
219-
'bip122:000000000019d6689c085ae165831e93/slip44:0',
220-
isEvm: false,
221-
},
222-
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': {
223-
chainId: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
224-
name: 'Solana Mainnet',
225-
nativeCurrency:
226-
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
227-
isEvm: false,
223+
it('navigates to Stake Input screen when on unsupported network', async () => {
224+
// Update the mock for this specific test
225+
useStakingChain.mockImplementation(() => ({
226+
isStakingSupportedChain: false,
227+
}));
228+
229+
const UNSUPPORTED_NETWORK_STATE = {
230+
engine: {
231+
backgroundState: {
232+
NetworkController: {
233+
...mockNetworkState({
234+
chainId: '0x89', // Polygon
235+
}),
236+
},
237+
MultichainNetworkController: {
238+
isEvmSelected: true,
239+
selectedMultichainNetworkChainId: SolScope.Mainnet,
240+
241+
multichainNetworkConfigurationsByChainId: {
242+
'bip122:000000000019d6689c085ae165831e93': {
243+
chainId: 'bip122:000000000019d6689c085ae165831e93',
244+
name: 'Bitcoin Mainnet',
245+
nativeCurrency:
246+
'bip122:000000000019d6689c085ae165831e93/slip44:0',
247+
isEvm: false,
248+
},
249+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': {
250+
chainId: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
251+
name: 'Solana Mainnet',
252+
nativeCurrency:
253+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
254+
isEvm: false,
255+
},
228256
},
229257
},
230258
},
231259
},
232-
},
233-
} as unknown as RootState;
234-
235-
const spySetActiveNetwork = jest.spyOn(
236-
Engine.context.MultichainNetworkController,
237-
'setActiveNetwork',
238-
);
239-
const { getByTestId } = renderComponent(UNSUPPORTED_NETWORK_STATE);
240-
fireEvent.press(getByTestId(WalletViewSelectorsIDs.STAKE_BUTTON));
241-
await waitFor(() => {
242-
expect(spySetActiveNetwork).toHaveBeenCalled();
243-
expect(mockNavigate).toHaveBeenCalledWith('StakeScreens', {
244-
screen: Routes.STAKING.STAKE,
245-
params: {
246-
token: MOCK_ETH_MAINNET_ASSET,
260+
} as unknown as RootState;
261+
262+
const spySetActiveNetwork = jest.spyOn(
263+
Engine.context.MultichainNetworkController,
264+
'setActiveNetwork',
265+
);
266+
const { getByTestId } = renderComponent(UNSUPPORTED_NETWORK_STATE);
267+
fireEvent.press(getByTestId(WalletViewSelectorsIDs.STAKE_BUTTON));
268+
await waitFor(() => {
269+
expect(spySetActiveNetwork).toHaveBeenCalled();
270+
expect(mockNavigate).toHaveBeenCalledWith('StakeScreens', {
271+
screen: Routes.STAKING.STAKE,
272+
params: {
273+
token: MOCK_ETH_MAINNET_ASSET,
274+
},
275+
});
276+
});
277+
});
278+
});
279+
280+
describe('Stablecoin Lending', () => {
281+
it('navigates to Lending Input View when earn button is pressed', async () => {
282+
const { getByTestId } = renderWithProvider(
283+
<StakeButton asset={MOCK_USDC_MAINNET_ASSET} />,
284+
{
285+
state: STATE_MOCK,
247286
},
287+
);
288+
289+
fireEvent.press(getByTestId(WalletViewSelectorsIDs.STAKE_BUTTON));
290+
291+
await waitFor(() => {
292+
expect(mockNavigate).toHaveBeenCalledWith('StakeScreens', {
293+
screen: Routes.STAKING.STAKE,
294+
params: {
295+
token: MOCK_USDC_MAINNET_ASSET,
296+
},
297+
});
248298
});
249299
});
250300
});

app/components/UI/Stake/components/StakeButton/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ const StakeButtonContent = ({ asset }: StakeButtonProps) => {
130130
screen: Routes.STAKING.STAKE,
131131
params: {
132132
token: asset,
133-
action: EARN_INPUT_VIEW_ACTIONS.LEND,
134133
},
135134
});
136135
};

0 commit comments

Comments
 (0)