import { fireEvent, render } from '@testing-library/react-native'
import BigNumber from 'bignumber.js'
import React from 'react'
import { Provider } from 'react-redux'
import { AssetsEvents } from 'src/analytics/Events'
import AppAnalytics from 'src/analytics/AppAnalytics'
import { TokenBalance } from 'src/tokens/slice'
import { TokenBalanceItem } from 'src/tokens/TokenBalanceItem'
import { createMockStore } from 'test/utils'
import { mockCusdAddress } from 'test/values'
let mockTokenInfo: TokenBalance
describe('TokenBalanceItem', () => {
beforeEach(() => {
mockTokenInfo = {
balance: new BigNumber('10'),
priceUsd: new BigNumber('1'),
lastKnownPriceUsd: new BigNumber('1'),
symbol: 'cUSD',
isFeeCurrency: true,
canTransferWithComment: true,
priceFetchedAt: Date.now(),
decimals: 18,
name: 'Celo Dollar',
imageUrl: '',
tokenId: `celo-alfajores:${mockCusdAddress}`,
networkId: 'celo-alfajores',
} as any
})
it('displays correctly', () => {
const { getByText, getByTestId, queryByTestId } = render(
)
expect(getByText('Celo Dollar')).toBeTruthy()
expect(getByText('10.00 cUSD')).toBeTruthy()
expect(getByText('₱13.30')).toBeTruthy()
expect(getByTestId('NetworkLabel')).toBeTruthy()
expect(queryByTestId('BridgeLabel')).toBeFalsy()
})
it('displays correctly when balances are hidden', () => {
const { getByText, getByTestId, queryByTestId, queryByText } = render(
)
expect(getByText('Celo Dollar')).toBeTruthy()
expect(queryByText('10.00 cUSD')).toBeFalsy()
expect(queryByText('₱13.30')).toBeFalsy()
expect(getByTestId('NetworkLabel')).toBeTruthy()
expect(queryByTestId('BridgeLabel')).toBeFalsy()
})
it('displays correctly when token is bridged', () => {
mockTokenInfo.bridge = 'Bridge V2'
const { getByText, getByTestId } = render(
)
expect(getByText('Celo Dollar')).toBeTruthy()
expect(getByText('10.00 cUSD')).toBeTruthy()
expect(getByText('₱13.30')).toBeTruthy()
expect(getByTestId('BridgeLabel')).toBeTruthy()
})
it('displays correctly when the token network is provided', () => {
const { getByText, getByTestId } = render(
)
expect(getByText('Celo Dollar')).toBeTruthy()
expect(getByText('10.00 cUSD')).toBeTruthy()
expect(getByText('₱13.30')).toBeTruthy()
expect(getByTestId('NetworkLabel')).toBeTruthy()
})
it('correctly triggers optional onPress prop', () => {
const onPress = () => {
AppAnalytics.track(AssetsEvents.tap_asset, {
assetType: 'token',
tokenId: mockTokenInfo.tokenId,
networkId: mockTokenInfo.networkId,
address: mockTokenInfo.address,
title: mockTokenInfo.symbol,
description: mockTokenInfo.name,
balanceUsd: mockTokenInfo.balance.multipliedBy(mockTokenInfo.priceUsd ?? 0).toNumber(),
})
}
const { getByText } = render(
)
fireEvent.press(getByText('Celo Dollar'))
expect(AppAnalytics.track).toHaveBeenCalledTimes(1)
expect(AppAnalytics.track).toHaveBeenCalledWith(AssetsEvents.tap_asset, {
assetType: 'token',
tokenId: `celo-alfajores:${mockCusdAddress}`,
networkId: mockTokenInfo.networkId,
address: mockTokenInfo.address,
balanceUsd: 10,
description: 'Celo Dollar',
title: 'cUSD',
})
})
})