From c5a173054e7b4e30c52dc0c1686eab06e53b746d Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:15:57 -0800 Subject: [PATCH 01/33] Onboarding Welcome component test --- .../onboarding-flow/welcome/welcome.test.js | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 ui/pages/onboarding-flow/welcome/welcome.test.js diff --git a/ui/pages/onboarding-flow/welcome/welcome.test.js b/ui/pages/onboarding-flow/welcome/welcome.test.js new file mode 100644 index 000000000000..db1565f8f0af --- /dev/null +++ b/ui/pages/onboarding-flow/welcome/welcome.test.js @@ -0,0 +1,101 @@ +import React from 'react'; +import { fireEvent, screen } from '@testing-library/react'; +import configureMockStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; +import initializedMockState from '../../../../test/data/mock-state.json'; +import { renderWithProvider } from '../../../../test/lib/render-helpers'; +import { setFirstTimeFlowType } from '../../../store/actions'; +import { + ONBOARDING_METAMETRICS, + ONBOARDING_SECURE_YOUR_WALLET_ROUTE, + ONBOARDING_COMPLETION_ROUTE, +} from '../../../helpers/constants/routes'; +import OnboardingWelcome from './welcome'; + +const mockHistoryReplace = jest.fn(); +const mockHistoryPush = jest.fn(); + +jest.mock('../../../store/actions.js', () => ({ + setFirstTimeFlowType: jest.fn().mockReturnValue( + jest.fn((type) => { + return type; + }), + ), +})); + +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useHistory: () => ({ + push: mockHistoryPush, + replace: mockHistoryReplace, + }), +})); + +describe('Onboarding Welcome Component', () => { + const mockState = { + metamask: { + identities: {}, + selectedAddress: '', + }, + }; + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('Initialized State Conditionals with keyrings and firstTimeFlowType', () => { + it('should route to secure your wallet when keyring is present but not imported first time flow type', () => { + const mockStore = configureMockStore([thunk])(initializedMockState); + + renderWithProvider(, mockStore); + expect(mockHistoryReplace).toHaveBeenCalledWith( + ONBOARDING_SECURE_YOUR_WALLET_ROUTE, + ); + }); + + it('should route to completion when keyring is present and imported first time flow type', () => { + const importFirstTimeFlowState = { + ...initializedMockState, + metamask: { + ...initializedMockState.metamask, + firstTimeFlowType: 'import', + }, + }; + const mockStore = configureMockStore([thunk])(importFirstTimeFlowState); + + renderWithProvider(, mockStore); + expect(mockHistoryReplace).toHaveBeenCalledWith( + ONBOARDING_COMPLETION_ROUTE, + ); + }); + }); + + describe('Welcome Component', () => { + const mockStore = configureMockStore([thunk])(mockState); + + it('should render', () => { + renderWithProvider(, mockStore); + const onboardingWelcome = screen.queryByTestId('onboarding-welcome'); + expect(onboardingWelcome).toBeInTheDocument(); + }); + + it('should set first time flow to create and route to metametrics', () => { + renderWithProvider(, mockStore); + + const createWallet = screen.getByTestId('onboarding-create-wallet'); + fireEvent.click(createWallet); + + expect(setFirstTimeFlowType).toHaveBeenCalledWith('create'); + }); + + it('should set first time flow to import and route to metametrics', () => { + renderWithProvider(, mockStore); + + const createWallet = screen.getByTestId('onboarding-import-wallet'); + fireEvent.click(createWallet); + + expect(setFirstTimeFlowType).toHaveBeenCalledWith('import'); + expect(mockHistoryPush).toHaveBeenCalledWith(ONBOARDING_METAMETRICS); + }); + }); +}); From 3a6384dd855757e0dc0c742e2f3f2fd16fb04b79 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:16:29 -0800 Subject: [PATCH 02/33] Onboarding Add Network Modal component test --- .../add-network-modal.test.js.snap | 241 ++++++++++++++++++ .../add-network-modal.test.js | 35 +++ 2 files changed, 276 insertions(+) create mode 100644 ui/pages/onboarding-flow/add-network-modal/__snapshots__/add-network-modal.test.js.snap create mode 100644 ui/pages/onboarding-flow/add-network-modal/add-network-modal.test.js diff --git a/ui/pages/onboarding-flow/add-network-modal/__snapshots__/add-network-modal.test.js.snap b/ui/pages/onboarding-flow/add-network-modal/__snapshots__/add-network-modal.test.js.snap new file mode 100644 index 000000000000..8ec11aaaf8be --- /dev/null +++ b/ui/pages/onboarding-flow/add-network-modal/__snapshots__/add-network-modal.test.js.snap @@ -0,0 +1,241 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Add Network Modal should render 1`] = ` +
+
+

+ Add custom network +

+
+
+
+ + + + +
+ A malicious network provider can lie about the state of the blockchain and record your network activity. Only add custom networks you trust. +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+`; + +exports[`Add Network Modal should render 2`] = `
`; diff --git a/ui/pages/onboarding-flow/add-network-modal/add-network-modal.test.js b/ui/pages/onboarding-flow/add-network-modal/add-network-modal.test.js new file mode 100644 index 000000000000..eb2a62fb9acf --- /dev/null +++ b/ui/pages/onboarding-flow/add-network-modal/add-network-modal.test.js @@ -0,0 +1,35 @@ +import React from 'react'; +import { fireEvent, waitFor } from '@testing-library/react'; +import configureMockStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; +import { renderWithProvider } from '../../../../test/lib/render-helpers'; +import AddNetworkModal from '.'; + +const mockHideModal = jest.fn(); +jest.mock('../../../store/actions', () => ({ + ...jest.requireActual('../../../store/actions'), + hideModal: () => mockHideModal, +})); + +describe('Add Network Modal', () => { + it('should render', async () => { + const mockStore = configureMockStore()(); + const { container } = renderWithProvider(, mockStore); + + await waitFor(() => { + expect(container).toMatchSnapshot(); + }); + }); + + it('should handle callback', async () => { + const mockStore = configureMockStore([thunk])(); + const { queryByText } = renderWithProvider(, mockStore); + + const cancelButton = queryByText('Cancel'); + fireEvent.click(cancelButton); + + await waitFor(() => { + expect(mockHideModal).toHaveBeenCalledTimes(1); + }); + }); +}); From e57eb98aed584ae8f071ecfe90604126d27b9c9b Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:17:22 -0800 Subject: [PATCH 03/33] Onboarding Create Password component tests, data-testid, and snapshot. --- .../create-password.test.js.snap | 172 ++++++++ .../create-password/create-password.js | 11 +- .../create-password/create-password.test.js | 391 ++++++++++++++++++ 3 files changed, 573 insertions(+), 1 deletion(-) create mode 100644 ui/pages/onboarding-flow/create-password/__snapshots__/create-password.test.js.snap create mode 100644 ui/pages/onboarding-flow/create-password/create-password.test.js diff --git a/ui/pages/onboarding-flow/create-password/__snapshots__/create-password.test.js.snap b/ui/pages/onboarding-flow/create-password/__snapshots__/create-password.test.js.snap new file mode 100644 index 000000000000..34f4959d9ced --- /dev/null +++ b/ui/pages/onboarding-flow/create-password/__snapshots__/create-password.test.js.snap @@ -0,0 +1,172 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Onboarding Create Password Render should match snapshot 1`] = ` +
+
+
+
    +
  • + Create password +
  • +
  • + Secure wallet +
  • +
  • + Confirm secret recovery phrase +
  • +
+
+

+ Create password +

+

+ This password will unlock your MetaMask wallet only on this device. MetaMask can not recover this password. +

+
+
+
+ +
+
+ +
+
+ +
+ +
+
+
+
+`; diff --git a/ui/pages/onboarding-flow/create-password/create-password.js b/ui/pages/onboarding-flow/create-password/create-password.js index 02f8e1e0d28a..7d1cf2840fcd 100644 --- a/ui/pages/onboarding-flow/create-password/create-password.js +++ b/ui/pages/onboarding-flow/create-password/create-password.js @@ -78,6 +78,7 @@ export default function CreatePassword({ if (isTooShort) { return { className: 'create-password__weak', + dataTestId: 'short-password-error', text: t('passwordNotLongEnough'), description: '', }; @@ -85,6 +86,7 @@ export default function CreatePassword({ if (score >= 4) { return { className: 'create-password__strong', + dataTestId: 'strong-password', text: t('strong'), description: '', }; @@ -92,12 +94,14 @@ export default function CreatePassword({ if (score === 3) { return { className: 'create-password__average', + dataTestId: 'average-password', text: t('average'), description: t('passwordStrengthDescription'), }; } return { className: 'create-password__weak', + dataTestId: 'weak-password', text: t('weak'), description: t('passwordStrengthDescription'), }; @@ -109,7 +113,11 @@ export default function CreatePassword({ const { score } = zxcvbn(passwordInput); const passwordStrengthLabel = getPasswordStrengthLabel(isTooShort, score); const passwordStrengthComponent = t('passwordStrength', [ - + {passwordStrengthLabel.text} , ]); @@ -199,6 +207,7 @@ export default function CreatePassword({ { e.preventDefault(); diff --git a/ui/pages/onboarding-flow/create-password/create-password.test.js b/ui/pages/onboarding-flow/create-password/create-password.test.js new file mode 100644 index 000000000000..6120d0d839c2 --- /dev/null +++ b/ui/pages/onboarding-flow/create-password/create-password.test.js @@ -0,0 +1,391 @@ +import React from 'react'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; +import configureMockStore from 'redux-mock-store'; +import { renderWithProvider } from '../../../../test/lib/render-helpers'; +import initializedMockState from '../../../../test/data/mock-send-state.json'; +import { + ONBOARDING_SECURE_YOUR_WALLET_ROUTE, + ONBOARDING_COMPLETION_ROUTE, +} from '../../../helpers/constants/routes'; +import { FIRST_TIME_FLOW_TYPES } from '../../../helpers/constants/onboarding'; +import CreatePassword from './create-password'; + +const mockHistoryPush = jest.fn(); +const mockHistoryReplace = jest.fn(); + +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useHistory: () => ({ + push: mockHistoryPush, + replace: mockHistoryReplace, + }), +})); + +describe('Onboarding Create Password', () => { + const mockState = { + metamask: { + identities: {}, + selectedAddress: '', + }, + }; + + const mockCreateNewAccount = jest.fn().mockResolvedValue(); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('Initialized State Conditionals with keyrings and firstTimeFlowType', () => { + it('should route to secure your wallet when keyring is present but not imported first time flow type', () => { + const mockStore = configureMockStore()(initializedMockState); + + renderWithProvider(, mockStore); + expect(mockHistoryReplace).toHaveBeenCalledWith( + ONBOARDING_SECURE_YOUR_WALLET_ROUTE, + ); + }); + + it('should route to completion when keyring is present and imported first time flow type', () => { + const importFirstTimeFlowState = { + ...initializedMockState, + metamask: { + ...initializedMockState.metamask, + firstTimeFlowType: 'import', + }, + }; + const mockStore = configureMockStore()(importFirstTimeFlowState); + + renderWithProvider(, mockStore); + expect(mockHistoryReplace).toHaveBeenCalledWith( + ONBOARDING_COMPLETION_ROUTE, + ); + }); + }); + + describe('Render', () => { + it('should match snapshot', () => { + const mockStore = configureMockStore()(mockState); + const { container } = renderWithProvider(, mockStore); + + expect(container).toMatchSnapshot(); + }); + }); + + describe('Password Validation Checks', () => { + it('should show password as text when click Show under password', () => { + const mockStore = configureMockStore()(mockState); + const { queryByTestId } = renderWithProvider( + , + mockStore, + ); + + const createPassword = queryByTestId('create-password-new'); + const event = { + target: { + value: '1234567', + }, + }; + + fireEvent.change(createPassword, event); + + expect(createPassword).toHaveAttribute('type', 'password'); + + const showPassword = queryByTestId('show-password'); + + fireEvent.click(showPassword); + + expect(createPassword).toHaveAttribute('type', 'text'); + }); + it('should disable create new account button and show short password error with password length of 7', () => { + const mockStore = configureMockStore()(mockState); + const { queryByTestId } = renderWithProvider( + , + mockStore, + ); + + const createPassword = queryByTestId('create-password-new'); + const event = { + target: { + value: '1234567', + }, + }; + + fireEvent.change(createPassword, event); + + const shortPasswordError = queryByTestId('short-password-error'); + expect(shortPasswordError).toBeInTheDocument(); + + const createNewWalletButton = queryByTestId('create-password-wallet'); + + expect(createNewWalletButton).toBeDisabled(); + + fireEvent.click(createNewWalletButton); + expect(mockCreateNewAccount).not.toHaveBeenCalled(); + }); + + it('should show weak password strength', () => { + const mockStore = configureMockStore()(mockState); + const { queryByTestId } = renderWithProvider( + , + mockStore, + ); + + const createNewWalletButton = queryByTestId('create-password-wallet'); + + const createPassword = queryByTestId('create-password-new'); + const event = { + target: { + value: '12345678', + }, + }; + + fireEvent.change(createPassword, event); + + const weakPasswordError = queryByTestId('weak-password'); + expect(weakPasswordError).toBeInTheDocument(); + + expect(createNewWalletButton).toBeDisabled(); + + fireEvent.click(createNewWalletButton); + + expect(mockCreateNewAccount).not.toHaveBeenCalled(); + }); + + it('should show average password strength', () => { + const mockStore = configureMockStore()(mockState); + const { queryByTestId } = renderWithProvider( + , + mockStore, + ); + + const createNewWalletButton = queryByTestId('create-password-wallet'); + + const createPassword = queryByTestId('create-password-new'); + const event = { + target: { + value: 'ZsE(!6679', + }, + }; + + fireEvent.change(createPassword, event); + + const weakPasswordError = queryByTestId('average-password'); + expect(weakPasswordError).toBeInTheDocument(); + + expect(createNewWalletButton).toBeDisabled(); + + fireEvent.click(createNewWalletButton); + + expect(mockCreateNewAccount).not.toHaveBeenCalled(); + }); + + it('should show strong password strength', () => { + const mockStore = configureMockStore()(mockState); + const { queryByTestId } = renderWithProvider( + , + mockStore, + ); + + const createPassword = queryByTestId('create-password-new'); + const event = { + target: { + value: 'E}URkDoV|/*,pxI', + }, + }; + + fireEvent.change(createPassword, event); + + const weakPasswordError = queryByTestId('strong-password'); + expect(weakPasswordError).toBeInTheDocument(); + + const createNewWalletButton = queryByTestId('create-password-wallet'); + + expect(createNewWalletButton).toBeDisabled(); + + fireEvent.click(createNewWalletButton); + + expect(mockCreateNewAccount).not.toHaveBeenCalled(); + }); + + it('should show mismatch password error', () => { + const mockStore = configureMockStore()(mockState); + const { queryByTestId, queryByText } = renderWithProvider( + , + mockStore, + ); + + const createPassword = queryByTestId('create-password-new'); + const confirmPassword = queryByTestId('create-password-confirm'); + + const createPasswordEvent = { + target: { + value: '123456789', + }, + }; + const confirmPasswordEvent = { + target: { + value: '12345678', + }, + }; + + fireEvent.change(createPassword, createPasswordEvent); + fireEvent.change(confirmPassword, confirmPasswordEvent); + + const passwordMismatchError = queryByText("Passwords don't match"); + + expect(passwordMismatchError).toBeInTheDocument(); + + const createNewWalletButton = queryByTestId('create-password-wallet'); + + expect(createNewWalletButton).toBeDisabled(); + + fireEvent.click(createNewWalletButton); + + expect(mockCreateNewAccount).not.toHaveBeenCalled(); + }); + + it('should not create new wallet without terms checked', () => { + const mockStore = configureMockStore()(mockState); + const { queryByTestId } = renderWithProvider( + , + mockStore, + ); + + const createPassword = queryByTestId('create-password-new'); + const confirmPassword = queryByTestId('create-password-confirm'); + + const createPasswordEvent = { + target: { + value: '12345678', + }, + }; + const confirmPasswordEvent = { + target: { + value: '12345678', + }, + }; + + fireEvent.change(createPassword, createPasswordEvent); + fireEvent.change(confirmPassword, confirmPasswordEvent); + + const terms = queryByTestId('create-password-terms'); + + expect(terms).not.toBeChecked(); + + const createNewWalletButton = queryByTestId('create-password-wallet'); + + expect(createNewWalletButton).toBeDisabled(); + + fireEvent.click(createNewWalletButton); + + expect(mockCreateNewAccount).not.toHaveBeenCalled(); + }); + }); + + describe('Create New Account', () => { + it('should create new account with correct passwords and terms checked', async () => { + const mockStore = configureMockStore()(mockState); + const { queryByTestId } = renderWithProvider( + , + mockStore, + ); + + const createPassword = queryByTestId('create-password-new'); + const confirmPassword = queryByTestId('create-password-confirm'); + + const password = '12345678'; + + const createPasswordEvent = { + target: { + value: password, + }, + }; + const confirmPasswordEvent = { + target: { + value: password, + }, + }; + + fireEvent.change(createPassword, createPasswordEvent); + fireEvent.change(confirmPassword, confirmPasswordEvent); + + const terms = queryByTestId('create-password-terms'); + fireEvent.click(terms); + + const createNewWalletButton = queryByTestId('create-password-wallet'); + + expect(createNewWalletButton).not.toBeDisabled(); + + fireEvent.click(createNewWalletButton); + + expect(mockCreateNewAccount).toHaveBeenCalledWith(password); + + await waitFor(() => { + expect(mockHistoryPush).toHaveBeenCalledWith( + ONBOARDING_SECURE_YOUR_WALLET_ROUTE, + ); + }); + }); + }); + + describe('Import Wallet', () => { + const importMockState = { + ...mockState, + metamask: { + ...mockState.metamask, + firstTimeFlowType: FIRST_TIME_FLOW_TYPES.IMPORT, + }, + }; + + it('should import wallet', async () => { + const mockStore = configureMockStore()(importMockState); + + const props = { + importWithRecoveryPhrase: jest.fn().mockResolvedValue(), + secretRecoveryPhrase: 'SRP', + }; + + const { queryByTestId } = renderWithProvider( + , + mockStore, + ); + + const createPassword = queryByTestId('create-password-new'); + const confirmPassword = queryByTestId('create-password-confirm'); + + const password = '12345678'; + + const createPasswordEvent = { + target: { + value: password, + }, + }; + const confirmPasswordEvent = { + target: { + value: password, + }, + }; + + fireEvent.change(createPassword, createPasswordEvent); + fireEvent.change(confirmPassword, confirmPasswordEvent); + + const terms = queryByTestId('create-password-terms'); + fireEvent.click(terms); + + const importWalletButton = queryByTestId('create-password-import'); + + fireEvent.click(importWalletButton); + + expect(props.importWithRecoveryPhrase).toHaveBeenCalledWith( + password, + props.secretRecoveryPhrase, + ); + + await waitFor(() => { + expect(mockHistoryPush).toHaveBeenCalledWith( + ONBOARDING_COMPLETION_ROUTE, + ); + }); + }); + }); +}); From ca8e2ec95fadca034745a1268dc54375bfcecf30 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:18:39 -0800 Subject: [PATCH 04/33] Onboarding Creation Successful test --- .../creation-successful.test.js | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/ui/pages/onboarding-flow/creation-successful/creation-successful.test.js b/ui/pages/onboarding-flow/creation-successful/creation-successful.test.js index 81581d779884..126d90dad842 100644 --- a/ui/pages/onboarding-flow/creation-successful/creation-successful.test.js +++ b/ui/pages/onboarding-flow/creation-successful/creation-successful.test.js @@ -1,19 +1,30 @@ import React from 'react'; import { fireEvent } from '@testing-library/react'; -import reactRouterDom from 'react-router-dom'; import configureMockStore from 'redux-mock-store'; import thunk from 'redux-thunk'; -import { ONBOARDING_PRIVACY_SETTINGS_ROUTE } from '../../../helpers/constants/routes'; +import { + ONBOARDING_PRIVACY_SETTINGS_ROUTE, + ONBOARDING_PIN_EXTENSION_ROUTE, +} from '../../../helpers/constants/routes'; import { renderWithProvider, setBackgroundConnection, } from '../../../../test/jest'; import CreationSuccessful from './creation-successful'; +const mockHistoryPush = jest.fn(); + const completeOnboardingStub = jest .fn() .mockImplementation(() => Promise.resolve()); +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useHistory: () => ({ + push: mockHistoryPush, + }), +})); + describe('Creation Successful Onboarding View', () => { const mockStore = { metamask: { @@ -25,18 +36,25 @@ describe('Creation Successful Onboarding View', () => { const store = configureMockStore([thunk])(mockStore); setBackgroundConnection({ completeOnboarding: completeOnboardingStub }); - const pushMock = jest.fn(); - beforeAll(() => { - jest - .spyOn(reactRouterDom, 'useHistory') - .mockImplementation() - .mockReturnValue({ push: pushMock }); + afterEach(() => { + jest.resetAllMocks(); }); it('should redirect to privacy-settings view when "Advanced configuration" button is clicked', () => { const { getByText } = renderWithProvider(, store); const privacySettingsButton = getByText('Advanced configuration'); fireEvent.click(privacySettingsButton); - expect(pushMock).toHaveBeenCalledWith(ONBOARDING_PRIVACY_SETTINGS_ROUTE); + expect(mockHistoryPush).toHaveBeenCalledWith( + ONBOARDING_PRIVACY_SETTINGS_ROUTE, + ); + }); + + it('should route to pin extension route when "Got it" button is clicked', () => { + const { getByText } = renderWithProvider(, store); + const gotItButton = getByText('Got it!'); + fireEvent.click(gotItButton); + expect(mockHistoryPush).toHaveBeenCalledWith( + ONBOARDING_PIN_EXTENSION_ROUTE, + ); }); }); From 72d3ba189c8163ab200fe4318cb6006068b94d6c Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:18:56 -0800 Subject: [PATCH 05/33] Onboarding Import SRP component test --- .../import-srp/import-srp.test.js | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 ui/pages/onboarding-flow/import-srp/import-srp.test.js diff --git a/ui/pages/onboarding-flow/import-srp/import-srp.test.js b/ui/pages/onboarding-flow/import-srp/import-srp.test.js new file mode 100644 index 000000000000..ef88f715eab3 --- /dev/null +++ b/ui/pages/onboarding-flow/import-srp/import-srp.test.js @@ -0,0 +1,83 @@ +import { fireEvent } from '@testing-library/react'; +import React from 'react'; +import configureMockStore from 'redux-mock-store'; +import initializedMockState from '../../../../test/data/mock-state.json'; +import { ONBOARDING_CREATE_PASSWORD_ROUTE } from '../../../helpers/constants/routes'; +import { renderWithProvider } from '../../../../test/lib/render-helpers'; +import ImportSrp from './import-srp'; + +const mockHistoryReplace = jest.fn(); + +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useHistory: () => ({ + replace: mockHistoryReplace, + }), +})); + +const TEST_SEED = + 'debris dizzy just program just float decrease vacant alarm reduce speak stadium'; + +describe('Import SRP', () => { + const mockState = { + metamask: { + identities: {}, + selectedAddress: '', + }, + }; + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should route to create password route when keyring is already initialized', () => { + const mockStore = configureMockStore()(initializedMockState); + renderWithProvider(, mockStore); + + expect(mockHistoryReplace).toHaveBeenCalledWith( + ONBOARDING_CREATE_PASSWORD_ROUTE, + ); + }); + + it('should render import srp and disable confirm srp button', () => { + const mockStore = configureMockStore()(mockState); + const { queryByTestId } = renderWithProvider(, mockStore); + + const importSrpTestId = queryByTestId('import-srp'); + expect(importSrpTestId).toBeInTheDocument(); + + const confirmSrpButton = queryByTestId('import-srp-confirm'); + + expect(confirmSrpButton).toBeDisabled(); + }); + + it('should input and submit srp', () => { + const mockStore = configureMockStore()(mockState); + const mockSubmitSecretRecoveryPhrase = jest.fn(); + + const { queryByTestId } = renderWithProvider( + , + mockStore, + ); + + inputSRP(TEST_SEED, queryByTestId); + + const confirmSrpButton = queryByTestId('import-srp-confirm'); + + expect(confirmSrpButton).not.toBeDisabled(); + + fireEvent.click(confirmSrpButton); + + expect(mockSubmitSecretRecoveryPhrase).toHaveBeenCalledWith(TEST_SEED); + expect(mockHistoryReplace).toHaveBeenCalledWith( + ONBOARDING_CREATE_PASSWORD_ROUTE, + ); + }); + + function inputSRP(seedStr, queryByTestId) { + for (const [index, word] of seedStr.split(' ').entries()) { + const srpInput = queryByTestId(`import-srp__srp-word-${index}`); + fireEvent.change(srpInput, { target: { value: word } }); + } + } +}); From 1a0b9cefcafe69d4217518802d1f3e66e3df43d1 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:19:16 -0800 Subject: [PATCH 06/33] Onboarding MetaMetrics component test --- .../__snapshots__/metametrics.test.js.snap | 138 ++++++++++++++++++ .../metametrics/metametrics.test.js | 69 +++++++++ 2 files changed, 207 insertions(+) create mode 100644 ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap create mode 100644 ui/pages/onboarding-flow/metametrics/metametrics.test.js diff --git a/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap b/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap new file mode 100644 index 000000000000..0401d50252f0 --- /dev/null +++ b/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap @@ -0,0 +1,138 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Name of the group should match snapshot 1`] = ` +
+ +
+`; diff --git a/ui/pages/onboarding-flow/metametrics/metametrics.test.js b/ui/pages/onboarding-flow/metametrics/metametrics.test.js new file mode 100644 index 000000000000..613605c01c5f --- /dev/null +++ b/ui/pages/onboarding-flow/metametrics/metametrics.test.js @@ -0,0 +1,69 @@ +import React from 'react'; +import configureMockStore from 'redux-mock-store'; +import { fireEvent } from '@testing-library/react'; +import thunk from 'redux-thunk'; +import { renderWithProvider } from '../../../../test/lib/render-helpers'; +import { + onboardingMetametricsAgree, + onboardingMetametricsDisagree, +} from '../../../../app/_locales/en/messages.json'; +import { setParticipateInMetaMetrics } from '../../../store/actions'; +import OnboardingMetametrics from './metametrics'; + +jest.mock('../../../store/actions.js', () => ({ + setParticipateInMetaMetrics: jest + .fn() + .mockReturnValue(jest.fn((val) => Promise.resolve([val]))), +})); + +describe('Name of the group', () => { + let mockStore; + + const mockState = { + metamask: { + firstTimeFlowType: '', + participateInMetaMetrics: '', + }, + }; + + beforeEach(() => { + mockStore = configureMockStore([thunk])(mockState); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should match snapshot', () => { + const { container } = renderWithProvider( + , + mockStore, + ); + + expect(container).toMatchSnapshot(); + }); + + it('should set setParticipateInMetaMetrics to true when clicking agree', () => { + const { queryByText } = renderWithProvider( + , + mockStore, + ); + + const confirmAgree = queryByText(onboardingMetametricsAgree.message); + + fireEvent.click(confirmAgree); + expect(setParticipateInMetaMetrics).toHaveBeenCalledWith(true); + }); + + it('should set setParticipateInMetaMetrics to false when clicking cancel', () => { + const { queryByText } = renderWithProvider( + , + mockStore, + ); + + const confirmCancel = queryByText(onboardingMetametricsDisagree.message); + + fireEvent.click(confirmCancel); + expect(setParticipateInMetaMetrics).toHaveBeenCalledWith(false); + }); +}); From de671f1a621d7209265a5d8c82ff0ab27ade9287 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:19:40 -0800 Subject: [PATCH 07/33] Onboarding App Header component test --- .../onboarding-app-header.test.js.snap | 231 ++++++++++++++++++ .../onboarding-app-header.test.js | 41 ++++ 2 files changed, 272 insertions(+) create mode 100644 ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap create mode 100644 ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js diff --git a/ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap b/ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap new file mode 100644 index 000000000000..7575c8b6a107 --- /dev/null +++ b/ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap @@ -0,0 +1,231 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`OnboardingAppHeader should match snapshot 1`] = ` +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+`; diff --git a/ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js b/ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js new file mode 100644 index 000000000000..76f1be38e7e4 --- /dev/null +++ b/ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js @@ -0,0 +1,41 @@ +import { fireEvent } from '@testing-library/react'; +import React from 'react'; +import configureMockStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; +import { renderWithProvider } from '../../../../test/lib/render-helpers'; +import OnboardingAppHeader from './onboarding-app-header'; + +const mockUpdateCurrentLocale = jest.fn(); + +jest.mock('../../../../app/_locales/index.json', () => { + return [{ code: 'en', name: 'English' }]; +}); + +jest.mock('../../../store/actions.js', () => ({ + updateCurrentLocale: () => mockUpdateCurrentLocale, +})); + +describe('OnboardingAppHeader', () => { + const mockState = { + metamask: { + currentLocale: 'en', + }, + }; + + const store = configureMockStore([thunk])(mockState); + + it('should match snapshot', () => { + const { container } = renderWithProvider(, store); + + expect(container).toMatchSnapshot(); + }); + + it('should call updateCurrentLocale action', () => { + const { getByRole } = renderWithProvider(, store); + + const selectCombobox = getByRole('combobox'); + fireEvent.change(selectCombobox); + + expect(mockUpdateCurrentLocale).toHaveBeenCalled(); + }); +}); From e61b83385a253e075299f4689df08f8c60a988c1 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:20:02 -0800 Subject: [PATCH 08/33] Onboarding Flow Switch Test --- .../onboarding-flow-switch.test.js | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 ui/pages/onboarding-flow/onboarding-flow-switch/onboarding-flow-switch.test.js diff --git a/ui/pages/onboarding-flow/onboarding-flow-switch/onboarding-flow-switch.test.js b/ui/pages/onboarding-flow/onboarding-flow-switch/onboarding-flow-switch.test.js new file mode 100644 index 000000000000..e4d6e844e664 --- /dev/null +++ b/ui/pages/onboarding-flow/onboarding-flow-switch/onboarding-flow-switch.test.js @@ -0,0 +1,85 @@ +import React from 'react'; +import configureMockStore from 'redux-mock-store'; +import { + DEFAULT_ROUTE, + ONBOARDING_COMPLETION_ROUTE, + ONBOARDING_UNLOCK_ROUTE, + LOCK_ROUTE, + ONBOARDING_WELCOME_ROUTE, +} from '../../../helpers/constants/routes'; +import { renderWithProvider } from '../../../../test/lib/render-helpers'; +import OnboardingFlowSwitch from './onboarding-flow-switch'; + +describe('Name of the group', () => { + it('should route to default route when completed onboarding', () => { + const mockState = { + metamask: { + completedOnboarding: true, + }, + }; + + const mockStore = configureMockStore()(mockState); + const { history } = renderWithProvider(, mockStore); + + expect(history.location.pathname).toStrictEqual(DEFAULT_ROUTE); + }); + + it('should route to completed onboarding route when seed phrase is other than null', () => { + const mockState = { + metamask: { + seedPhraseBackedUp: false, + }, + }; + + const mockStore = configureMockStore()(mockState); + const { history } = renderWithProvider(, mockStore); + + expect(history.location.pathname).toStrictEqual( + ONBOARDING_COMPLETION_ROUTE, + ); + }); + + it('should route to lock when seedPhrase is not backed up and unlocked', () => { + const mockState = { + metamask: { + seedPhraseBackedUp: null, + isUnlocked: true, + }, + }; + + const mockStore = configureMockStore()(mockState); + const { history } = renderWithProvider(, mockStore); + + expect(history.location.pathname).toStrictEqual(LOCK_ROUTE); + }); + + it('should route to unlock when with appropriate state', () => { + const mockState = { + metamask: { + seedPhraseBackedUp: null, + isUnlocked: false, + isInitialized: true, + }, + }; + + const mockStore = configureMockStore()(mockState); + const { history } = renderWithProvider(, mockStore); + + expect(history.location.pathname).toStrictEqual(ONBOARDING_UNLOCK_ROUTE); + }); + + it('should route to welcom route when not initialized', () => { + const mockState = { + metamask: { + seedPhraseBackedUp: null, + isUnlocked: false, + isInitialized: false, + }, + }; + + const mockStore = configureMockStore()(mockState); + const { history } = renderWithProvider(, mockStore); + + expect(history.location.pathname).toStrictEqual(ONBOARDING_WELCOME_ROUTE); + }); +}); From f45d2546f3a8339677ca2666f21e9faffaf81f62 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:20:35 -0800 Subject: [PATCH 09/33] Onboarding Privacy Settings IPFS input test --- .../privacy-settings/privacy-settings.js | 1 + .../privacy-settings/privacy-settings.test.js | 68 +++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/ui/pages/onboarding-flow/privacy-settings/privacy-settings.js b/ui/pages/onboarding-flow/privacy-settings/privacy-settings.js index e25bfb14c7c3..9bd0bdb20a47 100644 --- a/ui/pages/onboarding-flow/privacy-settings/privacy-settings.js +++ b/ui/pages/onboarding-flow/privacy-settings/privacy-settings.js @@ -246,6 +246,7 @@ export default function PrivacySettings() { { handleIPFSChange(e.target.value); }} diff --git a/ui/pages/onboarding-flow/privacy-settings/privacy-settings.test.js b/ui/pages/onboarding-flow/privacy-settings/privacy-settings.test.js index 70eb4f61267b..0af9648783ad 100644 --- a/ui/pages/onboarding-flow/privacy-settings/privacy-settings.test.js +++ b/ui/pages/onboarding-flow/privacy-settings/privacy-settings.test.js @@ -23,6 +23,7 @@ describe('Privacy Settings Onboarding View', () => { const setUsePhishDetectStub = jest.fn(); const setUseTokenDetectionStub = jest.fn(); const setUseCurrencyRateCheckStub = jest.fn(); + const setIpfsGatewayStub = jest.fn(); const completeOnboardingStub = jest .fn() .mockImplementation(() => Promise.resolve()); @@ -33,6 +34,7 @@ describe('Privacy Settings Onboarding View', () => { setUsePhishDetect: setUsePhishDetectStub, setUseTokenDetection: setUseTokenDetectionStub, setUseCurrencyRateCheck: setUseCurrencyRateCheckStub, + setIpfsGateway: setIpfsGatewayStub, completeOnboarding: completeOnboardingStub, setUseMultiAccountBalanceChecker: setUseMultiAccountBalanceCheckerStub, }); @@ -95,4 +97,70 @@ describe('Privacy Settings Onboarding View', () => { ); expect(setUseCurrencyRateCheckStub.mock.calls[1][0]).toStrictEqual(true); }); + + describe('IPFS', () => { + it('should handle proper IPFS input', () => { + const { queryByTestId, queryByText } = renderWithProvider( + , + store, + ); + + const ipfsInput = queryByTestId('ipfs-input'); + const ipfsEvent = { + target: { + value: 'ipfs.io', + }, + }; + + fireEvent.change(ipfsInput, ipfsEvent); + + const validIpfsUrl = queryByText('IPFS gateway URL is valid'); + expect(validIpfsUrl).toBeInTheDocument(); + + const submitButton = queryByText('Done'); + fireEvent.click(submitButton); + + expect(setIpfsGatewayStub).toHaveBeenCalled(); + }); + + it('should error with gateway.ipfs.io IPFS input', () => { + const { queryByTestId, queryByText } = renderWithProvider( + , + store, + ); + + const ipfsInput = queryByTestId('ipfs-input'); + const ipfsEvent = { + target: { + value: 'gateway.ipfs.io', + }, + }; + + fireEvent.change(ipfsInput, ipfsEvent); + + const invalidErrorMsg = queryByText('Please enter a valid URL'); + + expect(invalidErrorMsg).toBeInTheDocument(); + }); + + it('should error with improper IPFS input', () => { + const { queryByTestId, queryByText } = renderWithProvider( + , + store, + ); + + const ipfsInput = queryByTestId('ipfs-input'); + const ipfsEvent = { + target: { + value: ' ', + }, + }; + + fireEvent.change(ipfsInput, ipfsEvent); + + const invalidErrorMsg = queryByText('Please enter a valid URL'); + + expect(invalidErrorMsg).toBeInTheDocument(); + }); + }); }); From bbc280f0cd14b8ca70eb25830fc7731150a86f1a Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:21:01 -0800 Subject: [PATCH 10/33] Onboarding Review Recovery Phrase component test --- .../review-recovery-phrase.test.js.snap | 632 ++++++++++++++++++ .../review-recovery-phrase.test.js | 107 +++ 2 files changed, 739 insertions(+) create mode 100644 ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap create mode 100644 ui/pages/onboarding-flow/recovery-phrase/review-recovery-phrase.test.js diff --git a/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap b/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap new file mode 100644 index 000000000000..79be0e2decd0 --- /dev/null +++ b/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap @@ -0,0 +1,632 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Name of the group should match snapshot 1`] = ` +
+
+
+
    +
  • + Create password +
  • +
  • + Secure wallet +
  • +
  • + Confirm secret recovery phrase +
  • +
+
+
+

+ Write down your Secret Recovery Phrase +

+
+
+

+ Write down this 12-word Secret Recovery Phrase and save it in a place that you trust and only you can access. +

+
+
+

+ Tips + : +

+
    +
  • +

    + Save in a password manager +

    +
  • +
  • +

    + Store in a safe deposit box +

    +
  • +
  • +

    + Write down and store in multiple secret places +

    +
  • +
+
+
+
+
+
+ 1. +
+
+ debris +
+
+
+
+ 2. +
+
+ dizzy +
+
+
+
+ 3. +
+
+ just +
+
+
+
+ 4. +
+
+ program +
+
+
+
+ 5. +
+
+ just +
+
+
+
+ 6. +
+
+ float +
+
+
+
+ 7. +
+
+ decrease +
+
+
+
+ 8. +
+
+ vacant +
+
+
+
+ 9. +
+
+ alarm +
+
+
+
+ 10. +
+
+ reduce +
+
+
+
+ 11. +
+
+ speak +
+
+
+
+ 12. +
+
+ stadium +
+
+
+
+ +
+ Make sure no one is watching your screen +
+
+
+ +
+
+`; + +exports[`Name of the group should match snapshot after reveal recovery button is clicked 1`] = ` +
+
+
+
    +
  • + Create password +
  • +
  • + Secure wallet +
  • +
  • + Confirm secret recovery phrase +
  • +
+
+
+

+ Write down your Secret Recovery Phrase +

+
+
+

+ Write down this 12-word Secret Recovery Phrase and save it in a place that you trust and only you can access. +

+
+
+

+ Tips + : +

+
    +
  • +

    + Save in a password manager +

    +
  • +
  • +

    + Store in a safe deposit box +

    +
  • +
  • +

    + Write down and store in multiple secret places +

    +
  • +
+
+
+
+
+
+ 1. +
+
+ debris +
+
+
+
+ 2. +
+
+ dizzy +
+
+
+
+ 3. +
+
+ just +
+
+
+
+ 4. +
+
+ program +
+
+
+
+ 5. +
+
+ just +
+
+
+
+ 6. +
+
+ float +
+
+
+
+ 7. +
+
+ decrease +
+
+
+
+ 8. +
+
+ vacant +
+
+
+
+ 9. +
+
+ alarm +
+
+
+
+ 10. +
+
+ reduce +
+
+
+
+ 11. +
+
+ speak +
+
+
+
+ 12. +
+
+ stadium +
+
+
+
+ +
+
+`; diff --git a/ui/pages/onboarding-flow/recovery-phrase/review-recovery-phrase.test.js b/ui/pages/onboarding-flow/recovery-phrase/review-recovery-phrase.test.js new file mode 100644 index 000000000000..cd35aec03fcd --- /dev/null +++ b/ui/pages/onboarding-flow/recovery-phrase/review-recovery-phrase.test.js @@ -0,0 +1,107 @@ +import { fireEvent } from '@testing-library/react'; +import React from 'react'; +import configureMockStore from 'redux-mock-store'; +import { renderWithProvider } from '../../../../test/lib/render-helpers'; +import { ONBOARDING_CONFIRM_SRP_ROUTE } from '../../../helpers/constants/routes'; +import RecoveryPhrase from './review-recovery-phrase'; + +const mockHistoryPush = jest.fn(); +const mockHistoryReplace = jest.fn(); + +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useHistory: () => ({ + push: mockHistoryPush, + replace: mockHistoryReplace, + }), +})); + +const mockStore = configureMockStore()(); + +describe('Name of the group', () => { + const TEST_SEED = + 'debris dizzy just program just float decrease vacant alarm reduce speak stadium'; + + const props = { + secretRecoveryPhrase: TEST_SEED, + }; + + it('should match snapshot', () => { + const { container } = renderWithProvider( + , + mockStore, + ); + + expect(container).toMatchSnapshot(); + }); + + it('should match snapshot after reveal recovery button is clicked', () => { + const { container, queryByTestId } = renderWithProvider( + , + mockStore, + ); + + const revealRecoveryPhraseButton = queryByTestId('recovery-phrase-reveal'); + + fireEvent.click(revealRecoveryPhraseButton); + + expect(container).toMatchSnapshot(); + }); + + it('should click copy to cliboard', () => { + const { queryByText, queryByTestId } = renderWithProvider( + , + mockStore, + ); + + jest.spyOn(window, 'prompt').mockImplementation(); + // eslint-disable-next-line jest/prefer-spy-on + document.execCommand = jest.fn(); + + const revealRecoveryPhraseButton = queryByTestId('recovery-phrase-reveal'); + + fireEvent.click(revealRecoveryPhraseButton); + + const copyToClipboard = queryByText('Copy to clipboard'); + + fireEvent.click(copyToClipboard); + + expect(document.execCommand).toHaveBeenCalledWith('copy'); + }); + + it('should hide seed after revealing', () => { + const { queryByText, queryByTestId } = renderWithProvider( + , + mockStore, + ); + + const revealRecoveryPhraseButton = queryByTestId('recovery-phrase-reveal'); + + fireEvent.click(revealRecoveryPhraseButton); + + const hideSeedPhrase = queryByText('Hide seed phrase'); + + fireEvent.click(hideSeedPhrase); + + const revealSeedPhrase = queryByText('Reveal seed phrase'); + + expect(revealSeedPhrase).toBeInTheDocument(); + }); + + it('should click next after revealing seed phrase', () => { + const { queryByTestId } = renderWithProvider( + , + mockStore, + ); + + const revealRecoveryPhraseButton = queryByTestId('recovery-phrase-reveal'); + + fireEvent.click(revealRecoveryPhraseButton); + + const nextButton = queryByTestId('recovery-phrase-next'); + + fireEvent.click(nextButton); + + expect(mockHistoryPush).toHaveBeenCalledWith(ONBOARDING_CONFIRM_SRP_ROUTE); + }); +}); From 9a40f2f6682ff24e64fe670f95e505e848c6f43b Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:21:26 -0800 Subject: [PATCH 11/33] Onboarding Recovery Phrase Chips component test --- .../recovery-phrase-chips.test.js | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 ui/pages/onboarding-flow/recovery-phrase/recovery-phrase-chips.test.js diff --git a/ui/pages/onboarding-flow/recovery-phrase/recovery-phrase-chips.test.js b/ui/pages/onboarding-flow/recovery-phrase/recovery-phrase-chips.test.js new file mode 100644 index 000000000000..1c7d2d23e7d9 --- /dev/null +++ b/ui/pages/onboarding-flow/recovery-phrase/recovery-phrase-chips.test.js @@ -0,0 +1,20 @@ +import React from 'react'; +import { renderWithProvider } from '../../../../test/lib/render-helpers'; +import RecoveryPhraseChips from './recovery-phrase-chips'; + +describe('Name of the group', () => { + const TEST_SEED = + 'debris dizzy just program just float decrease vacant alarm reduce speak stadium'; + + it('should', () => { + const props = { + secretRecoveryPhrase: TEST_SEED.split(' '), + }; + + const { queryAllByTestId } = renderWithProvider( + , + ); + + expect(queryAllByTestId(/recovery-phrase-chip-/u)).toHaveLength(12); + }); +}); From 87d3ed8be1c89c050e78e1af864dceb4341d2a30 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:21:53 -0800 Subject: [PATCH 12/33] Onboarding Confirm Recovery Phrase component test --- .../confirm-recovery-phrase.test.js | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js diff --git a/ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js b/ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js new file mode 100644 index 000000000000..4d33510a4693 --- /dev/null +++ b/ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js @@ -0,0 +1,154 @@ +import { fireEvent, waitFor } from '@testing-library/react'; +import React from 'react'; +import configureMockStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; +import { renderWithProvider } from '../../../../test/lib/render-helpers'; +import { setSeedPhraseBackedUp } from '../../../store/actions'; +import ConfirmRecoveryPhrase from './confirm-recovery-phrase'; + +jest.mock('../../../store/actions.js', () => ({ + ...jest.requireActual('../../../store/actions.js'), + setSeedPhraseBackedUp: jest.fn().mockReturnValue(jest.fn()), +})); + +describe('Name of the group', () => { + const TEST_SEED = + 'debris dizzy just program just float decrease vacant alarm reduce speak stadium'; + + const props = { + secretRecoveryPhrase: TEST_SEED, + }; + + const mockState = { + metamask: {}, + }; + + const mockStore = configureMockStore([thunk])(mockState); + + it('should have 3 recovery phrase inputs', () => { + const { queryAllByTestId } = renderWithProvider( + , + mockStore, + ); + + expect(queryAllByTestId(/recovery-phrase-input-/u)).toHaveLength(3); + }); + + it('should not enable confirm recovery phrase with two missing words', () => { + const { queryByTestId, queryAllByTestId } = renderWithProvider( + , + mockStore, + ); + + const recoveryPhraseInputs = queryAllByTestId(/recovery-phrase-input-/u); + + const wrongInputEvent = { + target: { + value: 'wrong', + }, + }; + + fireEvent.change(recoveryPhraseInputs[0], wrongInputEvent); + + const confirmRecoveryPhraseButton = queryByTestId( + 'recovery-phrase-confirm', + ); + expect(confirmRecoveryPhraseButton).toBeDisabled(); + }); + + it('should not enable confirm recovery phrase with one missing words', () => { + const { queryByTestId, queryAllByTestId } = renderWithProvider( + , + mockStore, + ); + + const recoveryPhraseInputs = queryAllByTestId(/recovery-phrase-input-/u); + + const wrongInputEvent = { + target: { + value: 'wrong', + }, + }; + + fireEvent.change(recoveryPhraseInputs[0], wrongInputEvent); + fireEvent.change(recoveryPhraseInputs[1], wrongInputEvent); + + const confirmRecoveryPhraseButton = queryByTestId( + 'recovery-phrase-confirm', + ); + + expect(confirmRecoveryPhraseButton).toBeDisabled(); + }); + + it('should not enable confirm recovery phrase with wrong word inputs', () => { + const { queryByTestId, queryAllByTestId } = renderWithProvider( + , + mockStore, + ); + + const recoveryPhraseInputs = queryAllByTestId(/recovery-phrase-input-/u); + + const wrongInputEvent = { + target: { + value: 'wrong', + }, + }; + + fireEvent.change(recoveryPhraseInputs[0], wrongInputEvent); + fireEvent.change(recoveryPhraseInputs[1], wrongInputEvent); + fireEvent.change(recoveryPhraseInputs[2], wrongInputEvent); + + const confirmRecoveryPhraseButton = queryByTestId( + 'recovery-phrase-confirm', + ); + + expect(confirmRecoveryPhraseButton).toBeDisabled(); + }); + + it('should enable confirm recovery phrase with correct word inputs', async () => { + const clock = jest.useFakeTimers(); + + const { queryByTestId, queryAllByTestId } = renderWithProvider( + , + mockStore, + ); + + const recoveryPhraseInputs = queryAllByTestId(/recovery-phrase-input-/u); + + const correctInputEvent1 = { + target: { + value: 'just', + }, + }; + + const correctInputEvent2 = { + target: { + value: 'program', + }, + }; + + const correctInputEvent3 = { + target: { + value: 'vacant', + }, + }; + + fireEvent.change(recoveryPhraseInputs[0], correctInputEvent1); + fireEvent.change(recoveryPhraseInputs[1], correctInputEvent2); + fireEvent.change(recoveryPhraseInputs[2], correctInputEvent3); + + const confirmRecoveryPhraseButton = queryByTestId( + 'recovery-phrase-confirm', + ); + + await waitFor(() => { + clock.advanceTimersByTime(500); // Wait for debounce + + expect(confirmRecoveryPhraseButton).not.toBeDisabled(); + + fireEvent.click(confirmRecoveryPhraseButton); + + expect(setSeedPhraseBackedUp).toHaveBeenCalledWith(true); + }); + }); +}); From cc6fa64d4139bbb73957a1cdaac885ae4a048668 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 10:25:26 -0800 Subject: [PATCH 13/33] Proper describe component test names --- ui/pages/onboarding-flow/metametrics/metametrics.test.js | 2 +- .../onboarding-flow-switch/onboarding-flow-switch.test.js | 2 +- .../recovery-phrase/confirm-recovery-phrase.test.js | 2 +- .../recovery-phrase/recovery-phrase-chips.test.js | 4 ++-- .../recovery-phrase/review-recovery-phrase.test.js | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ui/pages/onboarding-flow/metametrics/metametrics.test.js b/ui/pages/onboarding-flow/metametrics/metametrics.test.js index 613605c01c5f..a7fdd5d0c443 100644 --- a/ui/pages/onboarding-flow/metametrics/metametrics.test.js +++ b/ui/pages/onboarding-flow/metametrics/metametrics.test.js @@ -16,7 +16,7 @@ jest.mock('../../../store/actions.js', () => ({ .mockReturnValue(jest.fn((val) => Promise.resolve([val]))), })); -describe('Name of the group', () => { +describe('Onboarding Metametrics Component', () => { let mockStore; const mockState = { diff --git a/ui/pages/onboarding-flow/onboarding-flow-switch/onboarding-flow-switch.test.js b/ui/pages/onboarding-flow/onboarding-flow-switch/onboarding-flow-switch.test.js index e4d6e844e664..0d9dc41a36aa 100644 --- a/ui/pages/onboarding-flow/onboarding-flow-switch/onboarding-flow-switch.test.js +++ b/ui/pages/onboarding-flow/onboarding-flow-switch/onboarding-flow-switch.test.js @@ -10,7 +10,7 @@ import { import { renderWithProvider } from '../../../../test/lib/render-helpers'; import OnboardingFlowSwitch from './onboarding-flow-switch'; -describe('Name of the group', () => { +describe('Onboaring Flow Switch Component', () => { it('should route to default route when completed onboarding', () => { const mockState = { metamask: { diff --git a/ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js b/ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js index 4d33510a4693..ebf765b8d292 100644 --- a/ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js +++ b/ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js @@ -11,7 +11,7 @@ jest.mock('../../../store/actions.js', () => ({ setSeedPhraseBackedUp: jest.fn().mockReturnValue(jest.fn()), })); -describe('Name of the group', () => { +describe('Confirm Recovery Phrase Component', () => { const TEST_SEED = 'debris dizzy just program just float decrease vacant alarm reduce speak stadium'; diff --git a/ui/pages/onboarding-flow/recovery-phrase/recovery-phrase-chips.test.js b/ui/pages/onboarding-flow/recovery-phrase/recovery-phrase-chips.test.js index 1c7d2d23e7d9..ae7b418f4306 100644 --- a/ui/pages/onboarding-flow/recovery-phrase/recovery-phrase-chips.test.js +++ b/ui/pages/onboarding-flow/recovery-phrase/recovery-phrase-chips.test.js @@ -2,11 +2,11 @@ import React from 'react'; import { renderWithProvider } from '../../../../test/lib/render-helpers'; import RecoveryPhraseChips from './recovery-phrase-chips'; -describe('Name of the group', () => { +describe('Recovery Phrase Chips Component', () => { const TEST_SEED = 'debris dizzy just program just float decrease vacant alarm reduce speak stadium'; - it('should', () => { + it('should have seed phrase as proper element length', () => { const props = { secretRecoveryPhrase: TEST_SEED.split(' '), }; diff --git a/ui/pages/onboarding-flow/recovery-phrase/review-recovery-phrase.test.js b/ui/pages/onboarding-flow/recovery-phrase/review-recovery-phrase.test.js index cd35aec03fcd..20e8476939bc 100644 --- a/ui/pages/onboarding-flow/recovery-phrase/review-recovery-phrase.test.js +++ b/ui/pages/onboarding-flow/recovery-phrase/review-recovery-phrase.test.js @@ -18,7 +18,7 @@ jest.mock('react-router-dom', () => ({ const mockStore = configureMockStore()(); -describe('Name of the group', () => { +describe('Review Recovery Phrase Component', () => { const TEST_SEED = 'debris dizzy just program just float decrease vacant alarm reduce speak stadium'; From 330711a6616f6d14d6a2516e629b233942fc2f0b Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 23 Jan 2023 11:49:12 -0800 Subject: [PATCH 14/33] Create New Vault tests --- .../app/create-new-vault/create-new-vault.js | 3 + .../create-new-vault/create-new-vault.test.js | 149 +++++++++++++++++- 2 files changed, 148 insertions(+), 4 deletions(-) diff --git a/ui/components/app/create-new-vault/create-new-vault.js b/ui/components/app/create-new-vault/create-new-vault.js index b8ad32670dc9..ce1d33710396 100644 --- a/ui/components/app/create-new-vault/create-new-vault.js +++ b/ui/components/app/create-new-vault/create-new-vault.js @@ -101,6 +101,7 @@ export default function CreateNewVault({
) : null}
`; -exports[`Name of the group should match snapshot after reveal recovery button is clicked 1`] = ` +exports[`Review Recovery Phrase Component should match snapshot after reveal recovery button is clicked 1`] = `
Date: Mon, 23 Jan 2023 11:49:51 -0800 Subject: [PATCH 16/33] Lint --- .../onboarding-flow/create-password/create-password.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/pages/onboarding-flow/create-password/create-password.test.js b/ui/pages/onboarding-flow/create-password/create-password.test.js index 6120d0d839c2..bf53ab85360b 100644 --- a/ui/pages/onboarding-flow/create-password/create-password.test.js +++ b/ui/pages/onboarding-flow/create-password/create-password.test.js @@ -1,5 +1,5 @@ import React from 'react'; -import { fireEvent, screen, waitFor } from '@testing-library/react'; +import { fireEvent, waitFor } from '@testing-library/react'; import configureMockStore from 'redux-mock-store'; import { renderWithProvider } from '../../../../test/lib/render-helpers'; import initializedMockState from '../../../../test/data/mock-send-state.json'; From 7a12453a083e9d52faad7fe0c4ba63154862cf49 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Tue, 31 Jan 2023 11:04:22 -0800 Subject: [PATCH 17/33] Update Review Recovery Phrase test snapshot --- .../review-recovery-phrase.test.js.snap | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap b/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap index 9000ad529ead..c085047e8d01 100644 --- a/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap +++ b/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap @@ -599,20 +599,10 @@ exports[`Review Recovery Phrase Component should match snapshot after reveal rec - - - +
Copy to clipboard From af7d7eeca1b263ef410e05aee161dff9b285cf2d Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Wed, 1 Feb 2023 14:47:34 -0800 Subject: [PATCH 18/33] Update Onboarding App Header with change in local messages in state --- .../onboarding-app-header/onboarding-app-header.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js b/ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js index 76f1be38e7e4..a293f79c9c2b 100644 --- a/ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js +++ b/ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js @@ -17,7 +17,7 @@ jest.mock('../../../store/actions.js', () => ({ describe('OnboardingAppHeader', () => { const mockState = { - metamask: { + localeMessages: { currentLocale: 'en', }, }; From 528121a8a0916323bf6cc8e61b64c1385a5657e6 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Fri, 3 Feb 2023 08:34:58 -0800 Subject: [PATCH 19/33] Update Metametrics snapshot --- .../__snapshots__/metametrics.test.js.snap | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap b/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap index 8ba3f7e888b7..4d12dcdae1ac 100644 --- a/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap +++ b/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap @@ -41,11 +41,11 @@ exports[`Onboarding Metametrics Component should match snapshot 1`] = ` - Never - +

collect information we don’t need to provide the service (such as keys, addresses, transaction hashes, or balances)
@@ -57,11 +57,11 @@ exports[`Onboarding Metametrics Component should match snapshot 1`] = ` - Never - +

collect your full IP address*
@@ -73,11 +73,11 @@ exports[`Onboarding Metametrics Component should match snapshot 1`] = ` - Never - +

sell data. Ever!
From 84c7489fa587000ba95dcdcf2920333a044a9490 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Fri, 3 Feb 2023 08:58:59 -0800 Subject: [PATCH 20/33] Bump coverage targets --- coverage-targets.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/coverage-targets.js b/coverage-targets.js index ada91d29ac51..468eb0c29849 100644 --- a/coverage-targets.js +++ b/coverage-targets.js @@ -7,8 +7,8 @@ module.exports = { global: { lines: 62.25, - branches: 50.5, - statements: 61.5, + branches: 50.25, + statements: 61.75, functions: 55, }, transforms: { From 55493686f39ff08f43b25d526cd746412b045989 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Fri, 3 Feb 2023 11:27:24 -0800 Subject: [PATCH 21/33] Update actions.js filename to actions.ts in tests --- ui/pages/onboarding-flow/metametrics/metametrics.test.js | 2 +- .../onboarding-app-header/onboarding-app-header.test.js | 2 +- .../recovery-phrase/confirm-recovery-phrase.test.js | 4 ++-- ui/pages/onboarding-flow/welcome/welcome.test.js | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ui/pages/onboarding-flow/metametrics/metametrics.test.js b/ui/pages/onboarding-flow/metametrics/metametrics.test.js index a7fdd5d0c443..e96e1264a90c 100644 --- a/ui/pages/onboarding-flow/metametrics/metametrics.test.js +++ b/ui/pages/onboarding-flow/metametrics/metametrics.test.js @@ -10,7 +10,7 @@ import { import { setParticipateInMetaMetrics } from '../../../store/actions'; import OnboardingMetametrics from './metametrics'; -jest.mock('../../../store/actions.js', () => ({ +jest.mock('../../../store/actions.ts', () => ({ setParticipateInMetaMetrics: jest .fn() .mockReturnValue(jest.fn((val) => Promise.resolve([val]))), diff --git a/ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js b/ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js index a293f79c9c2b..93d68478c57f 100644 --- a/ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js +++ b/ui/pages/onboarding-flow/onboarding-app-header/onboarding-app-header.test.js @@ -11,7 +11,7 @@ jest.mock('../../../../app/_locales/index.json', () => { return [{ code: 'en', name: 'English' }]; }); -jest.mock('../../../store/actions.js', () => ({ +jest.mock('../../../store/actions.ts', () => ({ updateCurrentLocale: () => mockUpdateCurrentLocale, })); diff --git a/ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js b/ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js index ebf765b8d292..18208977fb90 100644 --- a/ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js +++ b/ui/pages/onboarding-flow/recovery-phrase/confirm-recovery-phrase.test.js @@ -6,8 +6,8 @@ import { renderWithProvider } from '../../../../test/lib/render-helpers'; import { setSeedPhraseBackedUp } from '../../../store/actions'; import ConfirmRecoveryPhrase from './confirm-recovery-phrase'; -jest.mock('../../../store/actions.js', () => ({ - ...jest.requireActual('../../../store/actions.js'), +jest.mock('../../../store/actions.ts', () => ({ + ...jest.requireActual('../../../store/actions.ts'), setSeedPhraseBackedUp: jest.fn().mockReturnValue(jest.fn()), })); diff --git a/ui/pages/onboarding-flow/welcome/welcome.test.js b/ui/pages/onboarding-flow/welcome/welcome.test.js index db1565f8f0af..8cd699012ff7 100644 --- a/ui/pages/onboarding-flow/welcome/welcome.test.js +++ b/ui/pages/onboarding-flow/welcome/welcome.test.js @@ -15,7 +15,7 @@ import OnboardingWelcome from './welcome'; const mockHistoryReplace = jest.fn(); const mockHistoryPush = jest.fn(); -jest.mock('../../../store/actions.js', () => ({ +jest.mock('../../../store/actions.ts', () => ({ setFirstTimeFlowType: jest.fn().mockReturnValue( jest.fn((type) => { return type; From 8e929eb576370e11dd86c450c961a55853b7eac5 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Tue, 7 Feb 2023 17:19:54 -0800 Subject: [PATCH 22/33] Bump coverage targets --- coverage-targets.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/coverage-targets.js b/coverage-targets.js index 468eb0c29849..f46a46a387bd 100644 --- a/coverage-targets.js +++ b/coverage-targets.js @@ -6,8 +6,8 @@ // subset of files to check against these targets. module.exports = { global: { - lines: 62.25, - branches: 50.25, + lines: 62.37, + branches: 50.46, statements: 61.75, functions: 55, }, From 8cde4a8d49e34e930dee21cb8bd17e6467ca5fd3 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Tue, 7 Feb 2023 17:30:25 -0800 Subject: [PATCH 23/33] Bump coverage targets --- coverage-targets.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/coverage-targets.js b/coverage-targets.js index f46a46a387bd..37e98dbc3957 100644 --- a/coverage-targets.js +++ b/coverage-targets.js @@ -6,10 +6,10 @@ // subset of files to check against these targets. module.exports = { global: { - lines: 62.37, - branches: 50.46, + lines: 62.45, + branches: 50.75, statements: 61.75, - functions: 55, + functions: 55.50, }, transforms: { branches: 100, From 275b2c6c224e5b8557062fa4bba59ad6df483675 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Wed, 8 Feb 2023 22:44:28 -0800 Subject: [PATCH 24/33] Bump coverage targets --- coverage-targets.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/coverage-targets.js b/coverage-targets.js index 37e98dbc3957..a525058b8c31 100644 --- a/coverage-targets.js +++ b/coverage-targets.js @@ -6,10 +6,10 @@ // subset of files to check against these targets. module.exports = { global: { - lines: 62.45, - branches: 50.75, - statements: 61.75, - functions: 55.50, + lines: 63, + branches: 51, + statements: 62, + functions: 56, }, transforms: { branches: 100, From 1359f1134db5ba302aa932c69e3cf49844b42d19 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Thu, 16 Feb 2023 15:00:06 -0800 Subject: [PATCH 25/33] Update Onboarding App Header Snapshot test --- .../onboarding-app-header.test.js.snap | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap b/ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap index 7575c8b6a107..78b22797f2cc 100644 --- a/ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap +++ b/ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap @@ -212,18 +212,10 @@ exports[`OnboardingAppHeader should match snapshot 1`] = ` English - - - +
From af20203bf15e3a32082a7bb23e40c593873a3bb2 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Thu, 16 Feb 2023 15:00:24 -0800 Subject: [PATCH 26/33] Update Review Recovery Phrase snapshot --- .../__snapshots__/review-recovery-phrase.test.js.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap b/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap index c085047e8d01..57b5aacda35f 100644 --- a/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap +++ b/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap @@ -278,7 +278,7 @@ exports[`Review Recovery Phrase Component should match snapshot 1`] = `
- Make sure no one is watching your screen + Make sure nobody is looking
From 98a63092beacdd227eecd5cebbf728a0a31525ce Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Mon, 20 Feb 2023 16:11:28 -0800 Subject: [PATCH 27/33] Bump coverage --- coverage-targets.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/coverage-targets.js b/coverage-targets.js index f2d59d2f9be0..545a5c33f57d 100644 --- a/coverage-targets.js +++ b/coverage-targets.js @@ -6,10 +6,10 @@ // subset of files to check against these targets. module.exports = { global: { - lines: 63, - branches: 51, - statements: 62.45, - functions: 55.5, + lines: 63.8, + branches: 52, + statements: 63, + functions: 56, }, transforms: { branches: 100, From a4d77d332868bb9ac822598fbbea437248235d5f Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Thu, 23 Feb 2023 08:02:29 -0800 Subject: [PATCH 28/33] Update Snapshot --- .../__snapshots__/onboarding-app-header.test.js.snap | 4 ++-- .../__snapshots__/review-recovery-phrase.test.js.snap | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap b/ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap index 78b22797f2cc..c024c8317610 100644 --- a/ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap +++ b/ui/pages/onboarding-flow/onboarding-app-header/__snapshots__/onboarding-app-header.test.js.snap @@ -212,8 +212,8 @@ exports[`OnboardingAppHeader should match snapshot 1`] = ` English - diff --git a/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap b/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap index 57b5aacda35f..20dd89441dfd 100644 --- a/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap +++ b/ui/pages/onboarding-flow/recovery-phrase/__snapshots__/review-recovery-phrase.test.js.snap @@ -599,8 +599,8 @@ exports[`Review Recovery Phrase Component should match snapshot after reveal rec -
From dad1aa08d0bfb932c4340fec7fd612246b73ce0d Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Thu, 23 Feb 2023 10:11:50 -0800 Subject: [PATCH 29/33] Update snapshot for onboarding metametrics screen --- .../metametrics/__snapshots__/metametrics.test.js.snap | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap b/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap index 4d12dcdae1ac..942e692778ee 100644 --- a/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap +++ b/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap @@ -23,14 +23,16 @@ exports[`Onboarding Metametrics Component should match snapshot 1`] = `

  • - Always allow you to opt-out via Settings
  • - Send anonymized click and pageview events
  • From 75ff5decede7a0ba3bd696e22e46ef6821f6bede Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Thu, 23 Feb 2023 10:39:04 -0800 Subject: [PATCH 30/33] Bump coverage --- coverage-targets.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/coverage-targets.js b/coverage-targets.js index 545a5c33f57d..b87f875bc572 100644 --- a/coverage-targets.js +++ b/coverage-targets.js @@ -6,10 +6,10 @@ // subset of files to check against these targets. module.exports = { global: { - lines: 63.8, - branches: 52, - statements: 63, - functions: 56, + lines: 64.2, + branches: 53, + statements: 63.5, + functions: 56.5, }, transforms: { branches: 100, From f48c2f10bac19dc9aa2095fb193725c495186317 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Wed, 8 Mar 2023 15:29:15 +0900 Subject: [PATCH 31/33] Update onboarding metametrics snapshot --- .../__snapshots__/metametrics.test.js.snap | 100 ++++++++++-------- 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap b/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap index 942e692778ee..8bde23f941ab 100644 --- a/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap +++ b/ui/pages/onboarding-flow/metametrics/__snapshots__/metametrics.test.js.snap @@ -37,52 +37,68 @@ exports[`Onboarding Metametrics Component should match snapshot 1`] = ` Send anonymized click and pageview events
  • - - - - -

    - Never -

    - collect information we don’t need to provide the service (such as keys, addresses, transaction hashes, or balances) - -
    +
    + + + + + + Never + + collect information we don’t need to provide the service (such as keys, addresses, transaction hashes, or balances) + + +
  • - - - - -

    - Never -

    - collect your full IP address* - -
    +
    + + + + + + Never + + collect your full IP address* + + +
  • - - - - -

    - Never -

    - sell data. Ever! - -
    +
    + + + + + + Never + + sell data. Ever! + + +
    +
Date: Fri, 10 Mar 2023 13:12:13 +0900 Subject: [PATCH 32/33] Bump coverage targets --- coverage-targets.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/coverage-targets.js b/coverage-targets.js index 8bd0ef280cd3..49f2cfe4493c 100644 --- a/coverage-targets.js +++ b/coverage-targets.js @@ -6,10 +6,10 @@ // subset of files to check against these targets. module.exports = { global: { - lines: 64.5, - branches: 53.15, - statements: 63.57, - functions: 56.58, + lines: 65.2, + branches: 54, + statements: 64.4, + functions: 57.5, }, transforms: { branches: 100, From ad4940cef2080fa2b0f312546cb621bd615fde6f Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Thu, 16 Mar 2023 10:50:55 +0900 Subject: [PATCH 33/33] Fix typo --- coverage-targets.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coverage-targets.js b/coverage-targets.js index 72b755204ced..49f2cfe4493c 100644 --- a/coverage-targets.js +++ b/coverage-targets.js @@ -5,7 +5,7 @@ // script, and the paths from the codecov.yml file are used to figure out which // subset of files to check against these targets. module.exports = { - global: {s + global: { lines: 65.2, branches: 54, statements: 64.4,