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 {tokenDiscoveryMocks} from '../../adapters/token-discovery.mocks'
import {usePortfolioTokenDiscovery} from './usePortfolioTokenDiscovery'
import {wrapperMaker} from '../../fixtures/wrapperMaker'
describe('usePortfolioTokenDiscovery', () => {
let queryClient: QueryClient
beforeEach(() => {
jest.clearAllMocks()
queryClient = queryClientFixture()
})
afterEach(() => {
queryClient.clear()
})
it('success', async () => {
const mockedGetTokenDiscovery = jest
.fn()
.mockResolvedValue(tokenDiscoveryMocks.apiResponseResult.success)
const TestComponent = () => {
const {data} = usePortfolioTokenDiscovery(
{
id: tokenDiscoveryMocks.nftCryptoKitty.id,
network: Chain.Network.Mainnet,
getTokenDiscovery: mockedGetTokenDiscovery,
},
{
suspense: true,
},
)
return (
{JSON.stringify(data?.id)}
)
}
const wrapper = wrapperMaker({
queryClient,
})
const {getByTestId} = render(, {wrapper})
await waitFor(() => {
expect(getByTestId('data')).toBeDefined()
})
expect(getByTestId('data').props.children).toEqual(
JSON.stringify(tokenDiscoveryMocks.nftCryptoKitty.id),
)
expect(mockedGetTokenDiscovery).toHaveBeenCalled()
expect(mockedGetTokenDiscovery).toHaveBeenCalledWith(
tokenDiscoveryMocks.nftCryptoKitty.id,
)
})
it('error', async () => {
const mockedGetTokenDiscovery = jest
.fn()
.mockResolvedValue(tokenDiscoveryMocks.apiResponseResult.error)
const TestComponent = () => {
const {data} = usePortfolioTokenDiscovery(
{
id: tokenDiscoveryMocks.nftCryptoKitty.id,
network: Chain.Network.Mainnet,
getTokenDiscovery: mockedGetTokenDiscovery,
},
{
suspense: true,
},
)
return (
{JSON.stringify(data?.id)}
)
}
const wrapper = wrapperMaker({
queryClient,
})
const {getByTestId} = render(, {wrapper})
await waitFor(() => {
expect(getByTestId('hasError')).toBeDefined()
})
})
})