import { fireEvent, render } from '@testing-library/react-native'
import * as React from 'react'
import { Provider } from 'react-redux'
import ExternalExchanges from 'src/fiatExchanges/ExternalExchanges'
import { navigate } from 'src/navigator/NavigationService'
import { Screens } from 'src/navigator/Screens'
import { navigateToURI } from 'src/utils/linking'
import { createMockStore, getMockStackScreenProps } from 'test/utils'
import { mockAccount, mockCusdTokenId, mockExchanges } from 'test/values'
const mockStore = createMockStore({
web3: {
account: mockAccount,
},
networkInfo: {
userLocationData: {
countryCodeAlpha2: 'US',
region: null,
ipAddress: null,
},
},
})
describe('ExternalExchanges', () => {
beforeEach(() => {
jest.clearAllMocks()
})
// ExternalExchanges Screen will always have providers passed in via props
it('shows list of available exchanges', async () => {
const mockScreenProps = getMockStackScreenProps(Screens.ExternalExchanges, {
tokenId: mockCusdTokenId,
exchanges: mockExchanges,
})
const { getByTestId } = render(
)
expect(getByTestId('provider-0')).toBeTruthy()
expect(getByTestId('provider-1')).toBeTruthy()
expect(getByTestId('provider-2')).toBeTruthy()
await fireEvent.press(getByTestId('provider-1'))
expect(navigateToURI).toBeCalledWith('https://coinlist.co/asset/celo')
})
it('navigates to the correct screen when send is tapped', async () => {
const mockScreenProps = getMockStackScreenProps(Screens.ExternalExchanges, {
tokenId: mockCusdTokenId,
exchanges: mockExchanges,
})
const { getByTestId } = render(
)
await fireEvent.press(getByTestId('SendBar/SendButton'))
expect(navigate).toHaveBeenCalledWith(Screens.SendSelectRecipient, {
defaultTokenIdOverride: mockCusdTokenId,
forceTokenId: true,
})
})
})