import { FiatAccountType } from '@fiatconnect/fiatconnect-types'
import { fireEvent, render } from '@testing-library/react-native'
import _ from 'lodash'
import * as React from 'react'
import { Provider } from 'react-redux'
import { FiatConnectQuoteSuccess } from 'src/fiatconnect'
import FiatConnectLinkAccountScreen from 'src/fiatconnect/LinkAccountScreen'
import FiatConnectQuote from 'src/fiatExchanges/quotes/FiatConnectQuote'
import { CICOFlow } from 'src/fiatExchanges/types'
import { navigate } from 'src/navigator/NavigationService'
import { Screens } from 'src/navigator/Screens'
import { createMockStore, getMockStackScreenProps } from 'test/utils'
import { mockCusdTokenId, mockFiatConnectQuotes } from 'test/values'
describe('LinkAccountScreen', () => {
const store = createMockStore()
const normalizedQuote = new FiatConnectQuote({
quote: mockFiatConnectQuotes[1] as FiatConnectQuoteSuccess,
fiatAccountType: FiatAccountType.BankAccount,
flow: CICOFlow.CashOut,
tokenId: mockCusdTokenId,
})
const props = getMockStackScreenProps(Screens.FiatConnectLinkAccount, {
flow: CICOFlow.CashOut,
quote: normalizedQuote,
})
afterEach(() => {
jest.clearAllMocks()
})
it('shows description and continue button', () => {
const { queryByTestId, queryByText } = render(
)
expect(queryByText('fiatConnectLinkAccountScreen.bankAccount.bodyTitle')).toBeTruthy()
expect(queryByTestId('descriptionText')).toBeTruthy()
expect(queryByTestId('providerNameText')).toBeTruthy()
expect(queryByTestId('continueButton')).toBeTruthy()
expect(queryByTestId('termsAndConditionsText')).toBeTruthy()
expect(queryByTestId('privacyPolicyText')).toBeTruthy()
})
it.each`
testId | uri
${'providerNameText'} | ${'https://fakewebsite.example.com'}
${'termsAndConditionsText'} | ${'https://fakewebsite.example.com/terms'}
${'privacyPolicyText'} | ${'https://fakewebsite.example.com/privacy'}
`('Navigate to $uri when tapping text with testId $testId', async ({ testId, uri }) => {
const { getByTestId } = render(
)
await fireEvent.press(getByTestId(testId))
expect(navigate).toHaveBeenCalledWith(Screens.WebViewScreen, {
uri,
})
})
it('navigates to FiatDetails screen on clicking continue', async () => {
const { getByTestId } = render(
)
await fireEvent.press(getByTestId('continueButton'))
expect(navigate).toHaveBeenCalledWith(Screens.FiatDetailsScreen, {
flow: CICOFlow.CashOut,
quote: normalizedQuote,
})
})
it.each`
accountType | translationName
${FiatAccountType.BankAccount} | ${'bankAccount'}
${FiatAccountType.MobileMoney} | ${'mobileMoney'}
`(
'shows correct text for account type $accountType',
async ({ accountType, translationName }) => {
const accountTypeQuote = _.cloneDeep(normalizedQuote)
accountTypeQuote.fiatAccountType = accountType
const accountTypeProps = getMockStackScreenProps(Screens.FiatConnectLinkAccount, {
flow: CICOFlow.CashOut,
quote: accountTypeQuote,
})
const { queryByText } = render(
)
expect(queryByText(`fiatConnectLinkAccountScreen.${translationName}.bodyTitle`)).toBeTruthy()
}
)
})