import { fireEvent, render } from '@testing-library/react-native' import * as React from 'react' import 'react-native' import { Provider } from 'react-redux' import AppAnalytics from 'src/analytics/AppAnalytics' import { OnboardingEvents } from 'src/analytics/Events' import { FiatExchangeFlow } from 'src/fiatExchanges/types' import { navigate, navigateHome, navigateHomeAndThenToScreen, } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' import ChooseYourAdventure from 'src/onboarding/ChooseYourAdventure' import { AdventureCardName } from 'src/onboarding/types' import { createMockStore } from 'test/utils' import { mockAccount, mockAccount2 } from 'test/values' describe('ChooseYourAdventure', () => { const orderOptions = [ { address: mockAccount, testIDs: [ 'AdventureCard/0/chooseYourAdventure.options.earn', 'AdventureCard/1/chooseYourAdventure.options.add', 'AdventureCard/2/chooseYourAdventure.options.learnPoints', 'AdventureCard/3/chooseYourAdventure.options.profile', ], }, { address: mockAccount2, testIDs: [ 'AdventureCard/0/chooseYourAdventure.options.learnPoints', 'AdventureCard/1/chooseYourAdventure.options.profile', 'AdventureCard/2/chooseYourAdventure.options.earn', 'AdventureCard/3/chooseYourAdventure.options.add', ], }, ] const expectedCardOrder = [ AdventureCardName.Earn, AdventureCardName.Add, AdventureCardName.LearnPoints, AdventureCardName.Profile, ] const store = createMockStore({ web3: { account: mockAccount, }, }) beforeEach(() => { jest.clearAllMocks() }) it.each(orderOptions)( 'shows the elements in a random order seeded by walletAddress', ({ address, testIDs }) => { const store = createMockStore({ web3: { account: address, }, }) const { getByTestId } = render( ) testIDs.forEach((id) => { expect(getByTestId(id)).toBeTruthy() }) } ) it('navigates to the correct screen for earn', () => { const { getByTestId } = render( ) fireEvent.press(getByTestId('AdventureCard/0/chooseYourAdventure.options.earn')) expect(navigateHomeAndThenToScreen).toHaveBeenLastCalledWith(Screens.EarnInfoScreen) expect(AppAnalytics.track).toHaveBeenLastCalledWith(OnboardingEvents.cya_button_press, { position: 1, cardName: AdventureCardName.Earn, cardOrder: expectedCardOrder, }) }) it('navigates to the correct screen for add', () => { const { getByTestId } = render( ) fireEvent.press(getByTestId('AdventureCard/1/chooseYourAdventure.options.add')) expect(navigateHome).toHaveBeenLastCalledWith() expect(navigate).toHaveBeenCalledWith(Screens.FiatExchangeCurrencyBottomSheet, { flow: FiatExchangeFlow.CashIn, }) expect(AppAnalytics.track).toHaveBeenLastCalledWith(OnboardingEvents.cya_button_press, { position: 2, cardName: AdventureCardName.Add, cardOrder: expectedCardOrder, }) }) it('navigates to the correct screen for learn', () => { const { getByTestId } = render( ) fireEvent.press(getByTestId('AdventureCard/2/chooseYourAdventure.options.learnPoints')) expect(navigateHomeAndThenToScreen).toHaveBeenLastCalledWith(Screens.PointsIntro) expect(AppAnalytics.track).toHaveBeenLastCalledWith(OnboardingEvents.cya_button_press, { position: 3, cardName: AdventureCardName.LearnPoints, cardOrder: expectedCardOrder, }) }) it('navigates to the correct screen for profile', () => { const { getByTestId } = render( ) fireEvent.press(getByTestId('AdventureCard/3/chooseYourAdventure.options.profile')) expect(navigateHomeAndThenToScreen).toHaveBeenLastCalledWith(Screens.Profile) expect(AppAnalytics.track).toHaveBeenLastCalledWith(OnboardingEvents.cya_button_press, { position: 4, cardName: AdventureCardName.Profile, cardOrder: expectedCardOrder, }) }) it('navigates to the correct screen for later', () => { const { getByTestId } = render( ) fireEvent.press(getByTestId('ChooseYourAdventure/Later')) expect(navigateHome).toHaveBeenLastCalledWith() expect(AppAnalytics.track).toHaveBeenLastCalledWith(OnboardingEvents.cya_later, { cardOrder: expectedCardOrder, }) }) })