import { render } from '@testing-library/react-native'
import React from 'react'
import { Text } from 'react-native'
import { Provider } from 'react-redux'
import { NftEvents } from 'src/analytics/Events'
import AppAnalytics from 'src/analytics/AppAnalytics'
import NftMedia from 'src/nfts/NftMedia'
import { NftOrigin } from 'src/nfts/types'
import { createMockStore } from 'test/utils'
import { mockNftAllFields, mockNftNullMetadata } from 'test/values'
describe('Given NftMedia', () => {
beforeEach(() => {
jest.clearAllMocks()
})
const ErrorComponent = Some error state
describe('When mediaType is image', () => {
it('Then should initially display a loading state', () => {
const { getByTestId, queryByText } = render(
)
expect(getByTestId('NftImage')).toBeTruthy()
expect(getByTestId('NftImage/ImagePlaceholder')).toBeTruthy()
expect(queryByText('Some error state')).toBeFalsy()
expect(AppAnalytics.track).not.toHaveBeenCalled()
})
it('Then should display an error state if there is no nft metadata', () => {
const { getByText, queryByTestId } = render(
)
expect(queryByTestId('NftImage')).toBeFalsy()
expect(queryByTestId('NftImage/ImagePlaceholder')).toBeFalsy()
expect(getByText('Some error state')).toBeTruthy()
expect(AppAnalytics.track).toHaveBeenCalledTimes(1)
expect(AppAnalytics.track).toHaveBeenCalledWith(NftEvents.nft_media_load, {
contractAddress: '0x000000000000000000000000000000000000CE10',
error: 'No nft metadata',
origin: 'nftsInfoCarouselMain',
tokenId: '4',
url: undefined,
mediaType: 'image',
})
})
})
describe('When mediaType is video', () => {
it('should initially display a loading state', () => {
const { getByTestId, queryByText } = render(
)
expect(getByTestId('NftVideo')).toBeTruthy()
expect(getByTestId('NftVideo/VideoPlaceholder')).toBeTruthy()
expect(queryByText('Some error state')).toBeFalsy()
expect(AppAnalytics.track).not.toHaveBeenCalled()
})
it('should display an error state if there is no nft metadata', () => {
const { getByText, queryByTestId } = render(
)
expect(queryByTestId('NftVideo')).toBeFalsy()
expect(queryByTestId('NftVideo/ImagePlaceholder')).toBeFalsy()
expect(getByText('Some error state')).toBeTruthy()
expect(AppAnalytics.track).toHaveBeenCalledTimes(1)
expect(AppAnalytics.track).toHaveBeenCalledWith(NftEvents.nft_media_load, {
contractAddress: '0x000000000000000000000000000000000000CE10',
error: 'No nft metadata',
origin: 'nftsInfoCarouselMain',
tokenId: '4',
url: undefined,
mediaType: 'video',
})
})
})
})