import { fireEvent, render } from '@testing-library/react-native' import * as React from 'react' import ExchangesBottomSheet from 'src/components/ExchangesBottomSheet' import { ExternalExchangeProvider } from 'src/fiatExchanges/ExternalExchanges' import { navigate } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' jest.mock('src/components/useShowOrHideAnimation') const exchanges: ExternalExchangeProvider[] = [ { name: 'Coinbase Pro', link: 'https://example.com/0', currencies: [], supportedRegions: [], }, { name: 'Bittrex', link: 'https://example.com/1', currencies: [], supportedRegions: [], }, { name: 'KuCoin', link: 'https://example.com/2', currencies: [], supportedRegions: [], }, ] const onExchangeSelectedMock = jest.fn() const onCloseMock = jest.fn() describe('ExchangesBottomSheet', () => { beforeEach(() => { jest.clearAllMocks() }) it('renders correctly', () => { const { getByTestId } = render( ) expect(getByTestId('Coinbase Pro-Touchable')).toHaveTextContent('Coinbase Pro') expect(getByTestId('Bittrex-Touchable')).toHaveTextContent('Bittrex') expect(getByTestId('KuCoin-Touchable')).toHaveTextContent('KuCoin') }) it('fires callback on exchange press and navigates', () => { const { getByTestId } = render( ) fireEvent.press(getByTestId('Coinbase Pro-Touchable')) expect(onExchangeSelectedMock).toHaveBeenLastCalledWith(exchanges[0]) expect(navigate).toHaveBeenLastCalledWith(Screens.WebViewScreen, { uri: exchanges[0].link, }) fireEvent.press(getByTestId('Bittrex-Touchable')) expect(onExchangeSelectedMock).toHaveBeenLastCalledWith(exchanges[1]) expect(navigate).toHaveBeenLastCalledWith(Screens.WebViewScreen, { uri: exchanges[1].link, }) fireEvent.press(getByTestId('KuCoin-Touchable')) expect(onExchangeSelectedMock).toHaveBeenLastCalledWith(exchanges[2]) expect(navigate).toHaveBeenLastCalledWith(Screens.WebViewScreen, { uri: exchanges[2].link, }) }) })