import { fireEvent, render } from '@testing-library/react-native' import React from 'react' import { Provider } from 'react-redux' import { navigate } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' import SwapFeedItem from 'src/transactions/feed/SwapFeedItem' import { NetworkId, TokenExchange, TokenTransactionTypeV2, TransactionStatus, } from 'src/transactions/types' import { createMockStore } from 'test/utils' import { mockCeurTokenId, mockCusdTokenId, mockEthTokenId, mockTokenBalances } from 'test/values' const MOCK_TX_HASH = '0x006b866d20452a24d1d90c7514422188cc7c5d873e2f1ed661ec3f810ad5331c' const swapTransaction: TokenExchange = { networkId: NetworkId['celo-alfajores'], type: TokenTransactionTypeV2.SwapTransaction, transactionHash: MOCK_TX_HASH, timestamp: 1234, block: '2345', inAmount: { tokenId: mockCeurTokenId, value: '2.93', }, outAmount: { tokenId: mockCusdTokenId, value: '2.87', }, fees: [], status: TransactionStatus.Complete, } const crossChainSwapTransaction: TokenExchange = { ...swapTransaction, type: TokenTransactionTypeV2.CrossChainSwapTransaction, inAmount: { tokenId: mockEthTokenId, value: '0.000002', }, } describe('SwapFeedItem', () => { beforeEach(() => { jest.clearAllMocks() }) it('renders correctly for completed same-chain swap from cUSD to cEUR', () => { const { getByTestId } = render( ) expect(getByTestId('SwapFeedItem/title')).toHaveTextContent('swapScreen.title') expect(getByTestId('SwapFeedItem/subtitle')).toHaveTextContent( 'feedItemSwapPath, {"token1":"cUSD","token2":"cEUR"}' ) expect(getByTestId('SwapFeedItem/incomingAmount')).toHaveTextContent('+2.93 cEUR') expect(getByTestId('SwapFeedItem/outgoingAmount')).toHaveTextContent('-2.87 cUSD') fireEvent.press(getByTestId('SwapFeedItem')) expect(navigate).toHaveBeenCalledTimes(1) expect(navigate).toHaveBeenCalledWith(Screens.TransactionDetailsScreen, { transaction: swapTransaction, }) }) it('renders correctly for completed cross-chain swap from cUSD to ETH', () => { const { getByTestId } = render( ) expect(getByTestId('SwapFeedItem/title')).toHaveTextContent('swapScreen.title') expect(getByTestId('SwapFeedItem/subtitle')).toHaveTextContent( 'transactionFeed.crossChainSwapTransactionLabel' ) expect(getByTestId('SwapFeedItem/incomingAmount')).toHaveTextContent('+0.000002 ETH') expect(getByTestId('SwapFeedItem/outgoingAmount')).toHaveTextContent('-2.87 cUSD') fireEvent.press(getByTestId('SwapFeedItem')) expect(navigate).toHaveBeenCalledTimes(1) expect(navigate).toHaveBeenCalledWith(Screens.TransactionDetailsScreen, { transaction: crossChainSwapTransaction, }) }) it('renders correctly for pending cross-chain swap with no inAmount value', async () => { const { getByTestId, queryByTestId } = render( ) expect(getByTestId('SwapFeedItem/title')).toHaveTextContent('swapScreen.title') expect(getByTestId('SwapFeedItem/subtitle')).toHaveTextContent( 'transactionFeed.crossChainSwapTransactionLabel' ) expect(queryByTestId('SwapFeedItem/incomingAmount')).toBeFalsy() expect(getByTestId('SwapFeedItem/outgoingAmount')).toHaveTextContent('-2.87 cUSD') }) })