import { fireEvent, render } from '@testing-library/react-native' import React from 'react' import { StyleSheet } from 'react-native' import { Provider } from 'react-redux' import AppAnalytics from 'src/analytics/AppAnalytics' import { HomeEvents } from 'src/analytics/Events' import { openDeepLink } from 'src/app/actions' import { nftRewardDisplayed } from 'src/home/actions' import { getFeatureGate } from 'src/statsig/index' import Colors from 'src/styles/colors' import { createMockStore } from 'test/utils' import { mockNftAllFields, mockStoreReminderReady, mockStoreRewardReady } from 'test/values' import NftReward from './NftReward' jest.mock('src/analytics/AppAnalytics') jest.mock('src/statsig') describe('NftReward', () => { beforeEach(() => { jest.mocked(getFeatureGate).mockReturnValue(true) }) afterEach(() => { jest.clearAllMocks() jest.useFakeTimers({ doNotFake: ['Date'] }) }) it('handles the cta correctly', () => { jest.useFakeTimers({ now: new Date('3000-11-01T00:00:00.000Z') }) const store = createMockStore(mockStoreReminderReady) store.dispatch = jest.fn() const { getByText } = render( ) fireEvent.press(getByText('nftCelebration.rewardReminderBottomSheet.cta')) expect(store.dispatch).toHaveBeenCalledWith( openDeepLink(mockStoreRewardReady.home.nftCelebration.deepLink, true) ) expect(store.dispatch).toHaveBeenCalledWith(nftRewardDisplayed()) expect(AppAnalytics.track).toHaveBeenCalledWith(HomeEvents.nft_reward_accept, { networkId: mockNftAllFields.networkId, contractAddress: mockNftAllFields.contractAddress, remainingDays: 30, }) }) it('renders correct expiration pill when reward is not about to expire', () => { jest.useFakeTimers({ now: new Date('2900-12-01T00:00:00.000Z') }) const { getByTestId } = render( ) const pillLabel = getByTestId('NftReward/PillLabel') expect(pillLabel).toHaveTextContent( 'nftCelebration.rewardBottomSheet.expirationLabel, {"expirationLabelText":"in about 100 years"}' ) expect(StyleSheet.flatten(pillLabel.props.style)).toHaveProperty('color', Colors.contentPrimary) expect(StyleSheet.flatten(getByTestId('NftReward/Pill').props.style)).toHaveProperty( 'backgroundColor', Colors.info ) }) it('renders correct expiration pill when reward is about to expire', () => { jest.useFakeTimers({ now: new Date('3000-11-01T00:00:00.000Z') }) const { getByTestId } = render( ) const pillLabel = getByTestId('NftReward/PillLabel') expect(pillLabel).toHaveTextContent( 'nftCelebration.rewardReminderBottomSheet.expirationLabel, {"expirationLabelText":"in about 1 month"}' ) expect(StyleSheet.flatten(pillLabel.props.style)).toHaveProperty('color', Colors.warningPrimary) expect(StyleSheet.flatten(getByTestId('NftReward/Pill').props.style)).toHaveProperty( 'backgroundColor', Colors.warningSecondary ) }) })