import Clipboard from '@react-native-clipboard/clipboard' import { fireEvent, render, waitFor } from '@testing-library/react-native' import * as React from 'react' import 'react-native' import { Provider } from 'react-redux' import { recoveryPhraseInOnboardingCompleted } from 'src/account/actions' import { OnboardingEvents } from 'src/analytics/Events' import AppAnalytics from 'src/analytics/AppAnalytics' import { Screens } from 'src/navigator/Screens' import OnboardingRecoveryPhrase from 'src/onboarding/registration/OnboardingRecoveryPhrase' import { goToNextOnboardingScreen } from 'src/onboarding/steps' import { createMockStore, getMockStackScreenProps } from 'test/utils' import { mockOnboardingProps, mockTwelveWordMnemonic } from 'test/values' const mockUseAccountKey = jest.fn(() => mockTwelveWordMnemonic) const mockOnboardingPropsSelector = jest.fn(() => mockOnboardingProps) jest.mock('src/analytics/AppAnalytics') jest.mock('src/backup/utils', () => ({ useAccountKey: () => mockUseAccountKey(), })) jest.mock('src/onboarding/steps', () => ({ goToNextOnboardingScreen: jest.fn(), getOnboardingStepValues: () => ({ step: 3, totalSteps: 3 }), onboardingPropsSelector: () => mockOnboardingPropsSelector(), })) const mockScreenProps = getMockStackScreenProps(Screens.OnboardingRecoveryPhrase) describe('OnboardingRecoveryPhraseScreen', () => { const store = createMockStore({ web3: { account: '0xaccount', }, }) store.dispatch = jest.fn() beforeEach(() => { jest.clearAllMocks() }) it('navigates when button pressed', async () => { const { getByTestId } = render( ) fireEvent.press(getByTestId('protectWalletBottomSheetContinue')) expect(AppAnalytics.track).toHaveBeenCalledTimes(1) expect(AppAnalytics.track).toHaveBeenCalledWith(OnboardingEvents.protect_wallet_complete) expect(store.dispatch).toHaveBeenCalledWith(recoveryPhraseInOnboardingCompleted()) expect(goToNextOnboardingScreen).toBeCalledWith({ firstScreenInCurrentStep: Screens.ProtectWallet, onboardingProps: mockOnboardingProps, }) }) // eslint-disable-next-line jest/no-disabled-tests it.skip('opens bottom sheet when help pressed', async () => { // Un-skip when able to test behavior of useLayoutEffect hook const { getByTestId } = render( ) await waitFor(() => { expect(getByTestId('helpButton')).toBeTruthy() }) fireEvent.press(getByTestId('helpButton')) await waitFor(() => { expect(AppAnalytics.track).toHaveBeenCalledTimes(1) expect(AppAnalytics.track).toHaveBeenCalledWith(OnboardingEvents.protect_wallet_help) }) }) it('copies to clipboard', async () => { const { getByTestId } = render( ) fireEvent.press(getByTestId('protectWalletCopy')) expect(AppAnalytics.track).toHaveBeenCalledTimes(1) expect(AppAnalytics.track).toHaveBeenCalledWith(OnboardingEvents.protect_wallet_copy_phrase) expect(Clipboard.setString).toHaveBeenCalledWith(mockTwelveWordMnemonic) }) })