import * as React from 'react'
import {QueryClient} from 'react-query'
import {Text, View} from 'react-native'
import {render, waitFor} from '@testing-library/react-native'
import {queryClientFixture} from '@yoroi/common'
import {Chain} from '@yoroi/types'
import {wrapperMaker} from '../../fixtures/wrapperMaker'
import {tokenMocks} from '../../adapters/token.mocks'
import {tokenInfoMocks} from '../../adapters/token-info.mocks'
import {usePortfolioTokenInfo} from './usePortfolioTokenInfo'
import {createUnknownTokenInfo} from '../../helpers/create-unknown-token-info'
import {primaryTokenId} from '../../constants'
describe('usePortfolioTokenInfo', () => {
let queryClient: QueryClient
beforeEach(() => {
jest.clearAllMocks()
queryClient = queryClientFixture()
})
afterEach(() => {
queryClient.clear()
})
it('success', async () => {
const mockedGetTokenInfo = jest
.fn()
.mockResolvedValue(tokenInfoMocks.apiReponse.nftCryptoKitty.success)
const TestComponent = () => {
const {data} = usePortfolioTokenInfo(
{
id: tokenMocks.nftCryptoKitty.info.id,
network: Chain.Network.Mainnet,
getTokenInfo: mockedGetTokenInfo,
primaryTokenInfo: tokenInfoMocks.primaryETH,
},
{
suspense: true,
},
)
return (
{JSON.stringify(data)}
)
}
const wrapper = wrapperMaker({
queryClient,
})
const {getByTestId} = render(, {wrapper})
await waitFor(() => {
expect(getByTestId('data')).toBeDefined()
})
expect(getByTestId('data').props.children).toEqual(
JSON.stringify(tokenInfoMocks.nftCryptoKitty),
)
expect(mockedGetTokenInfo).toHaveBeenCalledWith(
tokenMocks.nftCryptoKitty.info.id,
)
})
it('success when PT', async () => {
const mockedGetTokenInfo = jest
.fn()
.mockResolvedValue(tokenInfoMocks.primaryETH)
const TestComponent = () => {
const {data} = usePortfolioTokenInfo(
{
id: primaryTokenId,
network: Chain.Network.Mainnet,
getTokenInfo: mockedGetTokenInfo,
primaryTokenInfo: tokenInfoMocks.primaryETH,
},
{
suspense: true,
},
)
return (
{JSON.stringify(data)}
)
}
const wrapper = wrapperMaker({
queryClient,
})
const {getByTestId} = render(, {wrapper})
await waitFor(() => {
expect(getByTestId('data')).toBeDefined()
})
expect(getByTestId('data').props.children).toEqual(
JSON.stringify(tokenInfoMocks.primaryETH),
)
expect(mockedGetTokenInfo).not.toHaveBeenCalled()
})
it('error should return unknonw token', async () => {
const unknownTokenInfo = createUnknownTokenInfo({
id: tokenMocks.nftCryptoKitty.info.id,
name: tokenInfoMocks.nftCryptoKitty.id.split('.')[1] ?? '',
})
const mockedGetTokenInfo = jest.fn().mockResolvedValue(unknownTokenInfo)
const TestComponent = () => {
const {data} = usePortfolioTokenInfo(
{
id: tokenMocks.nftCryptoKitty.info.id,
network: Chain.Network.Mainnet,
getTokenInfo: mockedGetTokenInfo,
primaryTokenInfo: tokenInfoMocks.primaryETH,
},
{
suspense: true,
},
)
return (
{JSON.stringify(data)}
)
}
const wrapper = wrapperMaker({
queryClient,
})
const {getByTestId} = render(, {wrapper})
await waitFor(() => {
expect(getByTestId('data')).toBeDefined()
})
expect(getByTestId('data').props.children).toEqual(
JSON.stringify(unknownTokenInfo),
)
})
})