import { fireEvent, render } from '@testing-library/react-native'
import * as React from 'react'
import 'react-native'
import { Provider } from 'react-redux'
import { cancelCreateOrRestoreAccount } from 'src/account/actions'
import { OnboardingEvents } from 'src/analytics/Events'
import AppAnalytics from 'src/analytics/AppAnalytics'
import { Actions } from 'src/import/actions'
import ImportWallet from 'src/import/ImportWallet'
import { navigate, navigateClearingStack } from 'src/navigator/NavigationService'
import { Screens } from 'src/navigator/Screens'
import MockedNavigator from 'test/MockedNavigator'
import { createMockStore } from 'test/utils'
import { mockMnemonic } from 'test/values'
import { ONBOARDING_FEATURES_ENABLED } from 'src/config'
import { ToggleableOnboardingFeatures } from 'src/onboarding/types'
const mockScreenProps = { clean: true }
jest.mock('src/statsig')
jest.mock('src/config', () => ({
...jest.requireActual('src/config'),
ONBOARDING_FEATURES_ENABLED: { CloudBackup: false },
}))
describe('ImportWallet', () => {
beforeEach(() => {
jest.replaceProperty(
ONBOARDING_FEATURES_ENABLED,
ToggleableOnboardingFeatures.CloudBackup,
false
)
jest.clearAllMocks()
})
it('renders correctly and is disabled with no text', () => {
const wrapper = render(
)
expect(wrapper.queryByTestId('HeaderSubTitle')).toBeFalsy()
expect(wrapper.getByTestId('ImportWalletBackupKeyInputField')).toHaveTextContent('')
expect(wrapper.getByTestId('ImportWalletButton')).toBeDisabled()
})
it('calls import with the mnemonic', () => {
const store = createMockStore()
const wrapper = render(
)
fireEvent(wrapper.getByTestId('ImportWalletBackupKeyInputField'), 'inputChange', mockMnemonic)
fireEvent.press(wrapper.getByTestId('ImportWalletButton'))
const allActions = store.getActions()
const importAction = allActions.filter((action) => action.type === Actions.IMPORT_BACKUP_PHRASE)
// expecting importBackupPhrases function to be called once
expect(importAction.length).toBe(1)
})
it('navigates to the welcome screen on cancel when cloud backup is disabled', () => {
const store = createMockStore()
const wrapper = render(
)
fireEvent.press(wrapper.getByText('cancel'))
expect(navigateClearingStack).toHaveBeenCalledWith(Screens.Welcome)
expect(AppAnalytics.track).toHaveBeenCalledWith(OnboardingEvents.restore_account_cancel)
expect(store.getActions()).toEqual([cancelCreateOrRestoreAccount()])
})
it('navigates to the import select screen on cancel when cloud backup is enabled', () => {
jest.replaceProperty(
ONBOARDING_FEATURES_ENABLED,
ToggleableOnboardingFeatures.CloudBackup,
true
)
const store = createMockStore()
const wrapper = render(
)
fireEvent.press(wrapper.getByText('cancel'))
expect(navigate).toHaveBeenCalledWith(Screens.ImportSelect)
expect(AppAnalytics.track).toHaveBeenCalledWith(OnboardingEvents.restore_account_cancel)
expect(store.getActions()).toEqual([])
})
})