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 { navigate } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' import QRCode from 'src/qrcode/QRCode' import { createMockStore } from 'test/utils' import { mockExchanges } from 'test/values' const mockStore = createMockStore({ web3: { account: '0x0000', }, account: { name: 'username', }, }) function getProps() { return { qrSvgRef: jest.fn() as any, exchanges: mockExchanges, onCloseBottomSheet: jest.fn(), onPressCopy: jest.fn(), onPressInfo: jest.fn(), onPressExchange: jest.fn(), } } describe('ExchangeQR', () => { beforeEach(() => { mockStore.dispatch = jest.fn() jest.clearAllMocks() }) it('displays QR code, name, and address', () => { const { queryByTestId } = render( ) expect(queryByTestId('styledQRCode')).toBeTruthy() expect(queryByTestId('displayName')).toBeTruthy() expect(queryByTestId('address')).toBeTruthy() }) it('does not display name when it has not been set', () => { const store = createMockStore({ web3: { account: '0x000', }, account: { name: undefined, }, }) store.dispatch = jest.fn() const { queryByTestId } = render( ) expect(queryByTestId('displayName')).toBeFalsy() }) it('displays inline notification instead of exchange info when exchanges is not set', () => { const store = createMockStore({ web3: { account: '0x000', }, account: { name: undefined, }, }) store.dispatch = jest.fn() const { queryByTestId } = render( ) expect(queryByTestId('bottomSheetLink')).toBeFalsy() expect(queryByTestId('supportedNetworksNotification')).toBeTruthy() }) it('copies address when copy button pressed', async () => { const props = getProps() const { queryByTestId, getByTestId } = render( ) expect(queryByTestId('copyButton')).toBeTruthy() await fireEvent.press(getByTestId('copyButton')) expect(props.onPressCopy).toHaveBeenCalledTimes(1) expect(Clipboard.setString).toHaveBeenCalledWith('0x0000') }) it('opens bottom sheet and can press link', async () => { const props = getProps() const { queryByTestId, getByTestId } = render( ) expect(queryByTestId('bottomSheetLink')).toBeTruthy() fireEvent.press(getByTestId('bottomSheetLink')) expect(props.onPressInfo).toHaveBeenCalledTimes(1) fireEvent.press(getByTestId('Bittrex-Touchable')) expect(navigate).toHaveBeenCalledWith(Screens.WebViewScreen, { uri: 'https://bittrex.com/Market/Index?MarketName=USD-CELO', }) expect(props.onPressExchange).toHaveBeenCalledTimes(1) expect(props.onPressExchange).toHaveBeenCalledWith(mockExchanges[0]) }) })