import { fireEvent, render } from '@testing-library/react-native'
import * as React from 'react'
import 'react-native'
import { Provider } from 'react-redux'
import RecipientItem from 'src/recipients/RecipientItemV2'
import { createMockStore } from 'test/utils'
import {
mockAddressRecipient,
mockInvitableRecipient,
mockPhoneRecipient,
mockRecipient,
} from 'test/values'
describe('RecipientItemV2', () => {
it('renders correctly with no app icon if phone number recipient is not a known app user (number never looked up)', () => {
const { queryByTestId, getByText } = render(
)
expect(getByText(mockInvitableRecipient.name)).toBeTruthy()
expect(getByText(mockInvitableRecipient.displayNumber)).toBeTruthy()
expect(queryByTestId('RecipientItem/AppIcon')).toBeFalsy()
expect(queryByTestId('RecipientItem/ActivityIndicator')).toBeFalsy()
})
it('renders correctly with no app icon if phone number recipient is not a known app user (number looked up before)', () => {
const { queryByTestId, getByText } = render(
)
expect(getByText(mockInvitableRecipient.name)).toBeTruthy()
expect(getByText(mockInvitableRecipient.displayNumber)).toBeTruthy()
expect(queryByTestId('RecipientItem/AppIcon')).toBeFalsy()
expect(queryByTestId('RecipientItem/ActivityIndicator')).toBeFalsy()
})
it('renders correctly with app icon if phone number recipient is an app user', () => {
const { queryByTestId, getByText, getByTestId } = render(
// default store includes a cached mapping
)
expect(getByText(mockInvitableRecipient.name)).toBeTruthy()
expect(getByText(mockInvitableRecipient.displayNumber)).toBeTruthy()
expect(getByTestId('RecipientItem/AppIcon')).toBeTruthy()
expect(queryByTestId('RecipientItem/ActivityIndicator')).toBeFalsy()
})
it('renders correctly with app icon if address recipient is an app user', () => {
const { queryByTestId, getByText, getByTestId } = render(
// default store includes a cached mapping
)
expect(getByText(mockRecipient.name)).toBeTruthy()
expect(getByTestId('RecipientItem/AppIcon')).toBeTruthy()
expect(queryByTestId('RecipientItem/ActivityIndicator')).toBeFalsy()
})
it('renders correctly if loading is set to true', () => {
const { getByText, getByTestId } = render(
)
expect(getByText(mockInvitableRecipient.name)).toBeTruthy()
expect(getByText(mockInvitableRecipient.displayNumber)).toBeTruthy()
expect(getByTestId('RecipientItem/ActivityIndicator')).toBeTruthy()
})
it('tapping item invokes onSelectRecipient', () => {
const mockSelectRecipient = jest.fn()
const { getByTestId } = render(
)
fireEvent.press(getByTestId('RecipientItem'))
expect(mockSelectRecipient).toHaveBeenLastCalledWith(mockInvitableRecipient)
})
it('renders correct icon when recipient is a phone number', () => {
const { queryByTestId, getByTestId } = render(
)
expect(getByTestId('RecipientItem/PhoneIcon')).toBeTruthy()
expect(queryByTestId('RecipientItem/WalletIcon')).toBeFalsy()
})
it('renders correct icon when recipient is an address', () => {
const { queryByTestId, getByTestId } = render(
)
expect(getByTestId('RecipientItem/WalletIcon')).toBeTruthy()
expect(queryByTestId('RecipientItem/PhoneIcon')).toBeFalsy()
})
})