import React from 'react';
import { screen, fireEvent } from '@testing-library/react';
import { renderWithProvider } from '../../../../test/lib/render-helpers';
import configureStore from '../../../store/store';
import mockState from '../../../../test/data/mock-state.json';
import CreateNewVault from './create-new-vault';
const TEST_SEED =
'debris dizzy just program just float decrease vacant alarm reduce speak stadium';
const store = configureStore({
metamask: {
...mockState.metamask,
},
});
describe('CreateNewVault', () => {
it('renders CreateNewVault component and shows Secret Recovery Phrase text', () => {
renderWithProvider(
,
store,
);
expect(screen.getByText('Secret Recovery Phrase')).toBeInTheDocument();
});
it('renders CreateNewVault component and shows You can paste... text', () => {
renderWithProvider(
,
store,
);
expect(
screen.getByText(
'You can paste your entire secret recovery phrase into any field',
),
).toBeInTheDocument();
});
it('should check terms', () => {
const props = {
onSubmit: jest.fn(),
submitText: 'Submit',
includeTerms: true,
};
const { queryByTestId } = renderWithProvider(
,
store,
);
const terms = queryByTestId('create-new-vault__terms-checkbox');
fireEvent.click(terms);
expect(terms).toBeChecked();
});
it('should error with password length is less than 8', () => {
const props = {
onSubmit: jest.fn(),
submitText: 'Submit',
};
const { queryByTestId, queryByText } = renderWithProvider(
,
store,
);
const passwordInput = queryByTestId('create-vault-password');
const passwordEvent = {
target: {
value: '1234567',
},
};
fireEvent.change(passwordInput, passwordEvent);
const passwordError = queryByText('Password not long enough');
expect(passwordError).toBeInTheDocument();
const submitButton = queryByTestId('create-new-vault-submit-button');
expect(submitButton).toBeDisabled();
});
it('should error with password and confirm password mismatch', () => {
const props = {
onSubmit: jest.fn(),
submitText: 'Submit',
};
const { queryByTestId, queryByText } = renderWithProvider(
,
store,
);
const passwordInput = queryByTestId('create-vault-password');
const confirmPasswordInput = queryByTestId('create-vault-confirm-password');
const passwordEvent = {
target: {
value: '12345678',
},
};
const confirmPasswordEvent = {
target: {
value: 'abcdefgh',
},
};
fireEvent.change(passwordInput, passwordEvent);
fireEvent.change(confirmPasswordInput, confirmPasswordEvent);
const passwordError = queryByText(`Passwords don't match`);
expect(passwordError).toBeInTheDocument();
const submitButton = queryByTestId('create-new-vault-submit-button');
expect(submitButton).toBeDisabled();
});
it('should valid', () => {
const props = {
onSubmit: jest.fn(),
submitText: 'Submit',
};
const { queryByTestId } = renderWithProvider(
,
store,
);
inputSRP(TEST_SEED, queryByTestId);
const passwordInput = queryByTestId('create-vault-password');
const confirmPasswordInput = queryByTestId('create-vault-confirm-password');
const password = '12345678';
const passwordEvent = {
target: {
value: password,
},
};
const confirmPasswordEvent = {
target: {
value: password,
},
};
fireEvent.change(passwordInput, passwordEvent);
fireEvent.change(confirmPasswordInput, confirmPasswordEvent);
const submitButton = queryByTestId('create-new-vault-submit-button');
expect(submitButton).not.toBeDisabled();
fireEvent.click(submitButton);
expect(props.onSubmit).toHaveBeenCalledWith(password, TEST_SEED);
});
});
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 } });
}
}