import { render } from '@testing-library/react-native'
import * as React from 'react'
import { WebView } from 'react-native-webview'
import { Provider } from 'react-redux'
import BidaliScreen from 'src/fiatExchanges/BidaliScreen'
import { Screens } from 'src/navigator/Screens'
import { Currency } from 'src/utils/currencies'
import { createMockStore, getMockStackScreenProps } from 'test/utils'
import { mockCeurTokenId, mockCusdTokenId, mockTokenBalances } from 'test/values'
const mockScreenProps = getMockStackScreenProps(Screens.BidaliScreen, {
currency: Currency.Dollar,
})
declare global {
interface Window {
valora: any
}
}
describe(BidaliScreen, () => {
beforeEach(() => {
// Reset injected JS effect
window.valora = undefined
})
it('renders correctly when no phone number is provided', () => {
const mockStore = createMockStore({
account: { e164PhoneNumber: null },
tokens: {
tokenBalances: {
[mockCusdTokenId]: {
...mockTokenBalances[mockCusdTokenId],
balance: '10',
},
[mockCeurTokenId]: {
...mockTokenBalances[mockCeurTokenId],
balance: '5',
},
},
},
})
const { UNSAFE_getByType } = render(
)
const webView = UNSAFE_getByType(WebView)
expect(webView).toBeDefined()
// eslint-disable-next-line no-eval
expect(eval(webView.props.injectedJavaScriptBeforeContentLoaded)).toBe(true)
expect(window.valora).toMatchInlineSnapshot(`
{
"balances": {
"CEUR": "5",
"CUSD": "10",
},
"onPaymentRequest": [Function],
"openUrl": [Function],
"paymentCurrency": "CUSD",
"phoneNumber": null,
}
`)
})
it('renders correctly when a phone number is provided', () => {
const mockStore = createMockStore({
account: { e164PhoneNumber: '+14155556666' },
tokens: {
tokenBalances: {
[mockCusdTokenId]: {
...mockTokenBalances[mockCusdTokenId],
balance: '10',
},
[mockCeurTokenId]: {
...mockTokenBalances[mockCeurTokenId],
balance: '5',
},
},
},
})
const { UNSAFE_getByType } = render(
)
const webView = UNSAFE_getByType(WebView)
expect(webView).toBeDefined()
// eslint-disable-next-line no-eval
expect(eval(webView.props.injectedJavaScriptBeforeContentLoaded)).toBe(true)
expect(window.valora).toMatchInlineSnapshot(`
{
"balances": {
"CEUR": "5",
"CUSD": "10",
},
"onPaymentRequest": [Function],
"openUrl": [Function],
"paymentCurrency": "CUSD",
"phoneNumber": "+14155556666",
}
`)
})
it('renders correctly when no currency is passed', () => {
const mockStore = createMockStore({
account: { e164PhoneNumber: '+14155556666' },
tokens: {
tokenBalances: {
[mockCusdTokenId]: {
...mockTokenBalances[mockCusdTokenId],
balance: '10',
},
[mockCeurTokenId]: {
...mockTokenBalances[mockCeurTokenId],
balance: '9',
},
},
},
})
const { UNSAFE_getByType } = render(
)
const webView = UNSAFE_getByType(WebView)
expect(webView).toBeDefined()
// eslint-disable-next-line no-eval
expect(eval(webView.props.injectedJavaScriptBeforeContentLoaded)).toBe(true)
// `paymentCurrency` is CEUR here because it has the highest balance in the local currency
expect(window.valora).toMatchInlineSnapshot(`
{
"balances": {
"CEUR": "9",
"CUSD": "10",
},
"onPaymentRequest": [Function],
"openUrl": [Function],
"paymentCurrency": "CEUR",
"phoneNumber": "+14155556666",
}
`)
})
})