import Clipboard from '@react-native-clipboard/clipboard' import { fireEvent, render } from '@testing-library/react-native' import * as React from 'react' import { Provider } from 'react-redux' import AppAnalytics from 'src/analytics/AppAnalytics' import { FiatExchangeEvents } from 'src/analytics/Events' import ExchangeQR from 'src/fiatExchanges/ExchangeQR' import { ExternalExchangeProvider } from 'src/fiatExchanges/ExternalExchanges' import { CICOFlow } from 'src/fiatExchanges/types' import { navigate } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' import { createMockStore, getMockStackScreenProps } from 'test/utils' const mockStore = createMockStore({ web3: { account: '0x0000', }, account: { name: 'username', }, }) 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: [], }, ] function getProps() { return getMockStackScreenProps(Screens.ExchangeQR, { flow: CICOFlow.CashIn, exchanges, }) } describe('ExchangeQR', () => { beforeEach(() => { mockStore.dispatch = jest.fn() }) it('copies address when copy button pressed', async () => { const { queryByTestId, getByTestId } = render( ) expect(queryByTestId('copyButton')).toBeTruthy() await fireEvent.press(getByTestId('copyButton')) expect(AppAnalytics.track).toHaveBeenCalledWith( FiatExchangeEvents.cico_exchange_qr_copy_address, { flow: CICOFlow.CashIn, } ) expect(Clipboard.setString).toHaveBeenCalledWith('0x0000') }) it('opens bottom sheet and can press link', async () => { const { queryByTestId, getByTestId } = render( ) expect(queryByTestId('bottomSheetLink')).toBeTruthy() fireEvent.press(getByTestId('bottomSheetLink')) expect(AppAnalytics.track).toHaveBeenCalledWith( FiatExchangeEvents.cico_exchange_qr_bottom_sheet_open, { flow: CICOFlow.CashIn, } ) fireEvent.press(getByTestId('Coinbase Pro-Touchable')) expect(navigate).toHaveBeenCalledWith(Screens.WebViewScreen, { uri: 'https://example.com/0' }) expect(AppAnalytics.track).toHaveBeenCalledWith( FiatExchangeEvents.cico_exchange_qr_bottom_sheet_link_press, { flow: CICOFlow.CashIn, exchange: 'Coinbase Pro', } ) }) })