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