import { render } from '@testing-library/react-native'
import React from 'react'
import { Provider } from 'react-redux'
import { NftCelebrationStatus } from 'src/home/reducers'
import { getFeatureGate } from 'src/statsig/index'
import { createMockStore } from 'test/utils'
import { mockNftAllFields } from 'test/values'
import NftCelebration from './NftCelebration'
jest.mock('src/analytics/AppAnalytics')
jest.mock('src/statsig')
const mockStoreWithoutNft = {
nfts: {
nfts: [],
nftsLoading: false,
nftsError: null,
},
home: { nftCelebration: null },
}
const mockStoreWithNft = {
nfts: {
nfts: [mockNftAllFields],
nftsLoading: false,
nftsError: null,
},
home: {
nftCelebration: {
networkId: mockNftAllFields.networkId,
contractAddress: mockNftAllFields.contractAddress,
status: NftCelebrationStatus.celebrationReadyToDisplay,
},
},
}
const mockStoreWithNftAndCelebrationDisplayed = {
nfts: {
nfts: [mockNftAllFields],
nftsLoading: false,
nftsError: null,
},
home: {
nftCelebration: {
networkId: mockNftAllFields.networkId,
contractAddress: mockNftAllFields.contractAddress,
status: NftCelebrationStatus.celebrationDisplayed,
},
},
}
const mockStoreWithDifferentNft = {
nfts: {
nfts: [{ ...mockNftAllFields, contractAddress: '0xNFT' }],
nftsLoading: false,
nftsError: null,
},
home: {
nftCelebration: {
networkId: mockNftAllFields.networkId,
contractAddress: mockNftAllFields.contractAddress,
status: NftCelebrationStatus.celebrationReadyToDisplay,
},
},
}
describe('NftCelebration', () => {
beforeEach(() => {
jest.mocked(getFeatureGate).mockReturnValue(true)
})
afterEach(() => {
jest.clearAllMocks()
})
it('renders correctly when it should', () => {
const { getByText } = render(
)
expect(getByText('nftCelebration.bottomSheet.title')).toBeTruthy()
expect(getByText('nftCelebration.bottomSheet.description')).toBeTruthy()
expect(getByText('nftCelebration.bottomSheet.cta')).toBeTruthy()
})
it('does not render when user has no nfts', () => {
const { queryByText } = render(
)
expect(queryByText('nftCelebration.bottomSheet.title')).toBeNull()
expect(queryByText('nftCelebration.bottomSheet.description')).toBeNull()
expect(queryByText('nftCelebration.bottomSheet.cta')).toBeNull()
})
it('does not render when celebrated contract does not match with user nft', () => {
const { queryByText } = render(
)
expect(queryByText('nftCelebration.bottomSheet.title')).toBeNull()
expect(queryByText('nftCelebration.bottomSheet.description')).toBeNull()
expect(queryByText('nftCelebration.bottomSheet.cta')).toBeNull()
})
it('does not render when feature gate is closed', () => {
jest.mocked(getFeatureGate).mockReturnValue(false)
const { queryByText } = render(
)
expect(queryByText('nftCelebration.bottomSheet.title')).toBeNull()
expect(queryByText('nftCelebration.bottomSheet.description')).toBeNull()
expect(queryByText('nftCelebration.bottomSheet.cta')).toBeNull()
})
it('does not render when user has alredy seen celebration for this contract', () => {
const { queryByText } = render(
)
expect(queryByText('nftCelebration.bottomSheet.title')).toBeNull()
expect(queryByText('nftCelebration.bottomSheet.description')).toBeNull()
expect(queryByText('nftCelebration.bottomSheet.cta')).toBeNull()
})
})