diff options
Diffstat (limited to 'web-ui/src/account_recovery/forms')
7 files changed, 136 insertions, 6 deletions
diff --git a/web-ui/src/account_recovery/forms/admin_recovery_code_form.js b/web-ui/src/account_recovery/forms/admin_recovery_code_form.js index 0a28e8b2..75cf6ea5 100644 --- a/web-ui/src/account_recovery/forms/admin_recovery_code_form.js +++ b/web-ui/src/account_recovery/forms/admin_recovery_code_form.js @@ -21,11 +21,15 @@ import { translate } from 'react-i18next'; import InputField from 'src/common/input_field/input_field'; import SubmitButton from 'src/common/submit_button/submit_button'; -import './admin_recovery_code_form.scss'; - +import './forms.scss'; export const AdminRecoveryCodeForm = ({ t, next }) => ( <form className='admin-code-form' onSubmit={next}> + <img + className='account-recovery-progress' + src='/public/images/account-recovery/step_1.svg' + alt={t('account-recovery.admin-form.image-description')} + /> <h1>{t('account-recovery.admin-form.title')}</h1> <ul> <li>{t('account-recovery.admin-form.tip1')}</li> diff --git a/web-ui/src/account_recovery/forms/admin_recovery_code_form.scss b/web-ui/src/account_recovery/forms/admin_recovery_code_form.scss deleted file mode 100644 index e69de29b..00000000 --- a/web-ui/src/account_recovery/forms/admin_recovery_code_form.scss +++ /dev/null diff --git a/web-ui/src/account_recovery/forms/forms.scss b/web-ui/src/account_recovery/forms/forms.scss new file mode 100644 index 00000000..1ef0e8d3 --- /dev/null +++ b/web-ui/src/account_recovery/forms/forms.scss @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2017 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ + +.account-recovery-progress { + width: 100%; +} diff --git a/web-ui/src/account_recovery/forms/new_password_form.js b/web-ui/src/account_recovery/forms/new_password_form.js new file mode 100644 index 00000000..71239cfa --- /dev/null +++ b/web-ui/src/account_recovery/forms/new_password_form.js @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2017 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ + +import React from 'react'; +import { translate } from 'react-i18next'; + +import InputField from 'src/common/input_field/input_field'; +import SubmitButton from 'src/common/submit_button/submit_button'; + +export const NewPasswordForm = ({ t }) => ( + <form> + <img + className='account-recovery-progress' + src='/public/images/account-recovery/step_3.svg' + alt={t('account-recovery.new-password.image-description')} + /> + <h1>{t('account-recovery.new-password-form.title')}</h1> + <InputField name='new-password' label={t('account-recovery.new-password-form.input-label1')} /> + <InputField name='confirm-password' label={t('account-recovery.new-password-form.input-label2')} /> + <SubmitButton buttonText={t('account-recovery.new-password-form.button')} /> + </form> +); + +NewPasswordForm.propTypes = { + t: React.PropTypes.func.isRequired +}; + +export default translate('', { wait: true })(NewPasswordForm); diff --git a/web-ui/src/account_recovery/forms/new_password_form.spec.js b/web-ui/src/account_recovery/forms/new_password_form.spec.js new file mode 100644 index 00000000..a2986165 --- /dev/null +++ b/web-ui/src/account_recovery/forms/new_password_form.spec.js @@ -0,0 +1,31 @@ +import { shallow } from 'enzyme'; +import expect from 'expect'; +import React from 'react'; +import { NewPasswordForm } from 'src/account_recovery/forms/new_password_form'; + +describe('NewPasswordForm', () => { + let newPasswordForm; + + beforeEach(() => { + const mockTranslations = key => key; + newPasswordForm = shallow( + <NewPasswordForm t={mockTranslations} /> + ); + }); + + it('renders title for new password form', () => { + expect(newPasswordForm.find('h1').text()).toEqual('account-recovery.new-password-form.title'); + }); + + it('renders input for new password', () => { + expect(newPasswordForm.find('InputField').at(0).props().label).toEqual('account-recovery.new-password-form.input-label1'); + }); + + it('renders input to confirm new password', () => { + expect(newPasswordForm.find('InputField').at(1).props().label).toEqual('account-recovery.new-password-form.input-label2'); + }); + + it('renders submit button', () => { + expect(newPasswordForm.find('SubmitButton').props().buttonText).toEqual('account-recovery.new-password-form.button'); + }); +}); diff --git a/web-ui/src/account_recovery/forms/user_recovery_code_form.js b/web-ui/src/account_recovery/forms/user_recovery_code_form.js index 2eec96ba..aaefd75d 100644 --- a/web-ui/src/account_recovery/forms/user_recovery_code_form.js +++ b/web-ui/src/account_recovery/forms/user_recovery_code_form.js @@ -18,14 +18,28 @@ import React from 'react'; import { translate } from 'react-i18next'; -export const UserRecoveryCodeForm = ({ t }) => ( - <form> +import InputField from 'src/common/input_field/input_field'; +import SubmitButton from 'src/common/submit_button/submit_button'; + +import './forms.scss'; + +export const UserRecoveryCodeForm = ({ t, next }) => ( + <form className='user-code-form' onSubmit={next}> + <img + className='account-recovery-progress' + src='/public/images/account-recovery/step_2.svg' + alt={t('account-recovery.user-form.image-description')} + /> <h1>{t('account-recovery.user-form.title')}</h1> + <p>{t('account-recovery.user-form.description')}</p> + <InputField name='admin-code' label={t('account-recovery.user-form.input-label')} /> + <SubmitButton buttonText={t('account-recovery.user-form.button')} /> </form> ); UserRecoveryCodeForm.propTypes = { - t: React.PropTypes.func.isRequired + t: React.PropTypes.func.isRequired, + next: React.PropTypes.func.isRequired }; export default translate('', { wait: true })(UserRecoveryCodeForm); diff --git a/web-ui/src/account_recovery/forms/user_recovery_code_form.spec.js b/web-ui/src/account_recovery/forms/user_recovery_code_form.spec.js index ade96f9c..a20d3b7b 100644 --- a/web-ui/src/account_recovery/forms/user_recovery_code_form.spec.js +++ b/web-ui/src/account_recovery/forms/user_recovery_code_form.spec.js @@ -5,15 +5,34 @@ import { UserRecoveryCodeForm } from 'src/account_recovery/forms/user_recovery_c describe('UserRecoveryCodeForm', () => { let userRecoveryCodeForm; + let mockNext; beforeEach(() => { const mockTranslations = key => key; + mockNext = expect.createSpy(); userRecoveryCodeForm = shallow( - <UserRecoveryCodeForm t={mockTranslations} /> + <UserRecoveryCodeForm t={mockTranslations} next={mockNext} /> ); }); it('renders title for user recovery code', () => { expect(userRecoveryCodeForm.find('h1').text()).toEqual('account-recovery.user-form.title'); }); + + it('renders description', () => { + expect(userRecoveryCodeForm.find('p').text()).toEqual('account-recovery.user-form.description'); + }); + + it('renders input for user code', () => { + expect(userRecoveryCodeForm.find('InputField').props().label).toEqual('account-recovery.user-form.input-label'); + }); + + it('renders submit button', () => { + expect(userRecoveryCodeForm.find('SubmitButton').props().buttonText).toEqual('account-recovery.user-form.button'); + }); + + it('submits form to next step', () => { + userRecoveryCodeForm.find('form').simulate('submit'); + expect(mockNext).toHaveBeenCalled(); + }); }); |