wip
This commit is contained in:
parent
876fd8d52f
commit
8c6a5dee4a
|
@ -0,0 +1,91 @@
|
|||
const APICallMock = require('lib-app/__mocks__/api-call-mock');
|
||||
|
||||
const SubmitButton = ReactMock();
|
||||
const Button = ReactMock();
|
||||
const Input = ReactMock();
|
||||
const Form = ReactMock();
|
||||
const Checkbox = ReactMock();
|
||||
const Message = ReactMock();
|
||||
const FormField = ReactMock();
|
||||
const Widget = ReactMock();
|
||||
|
||||
const PasswordRecovery = requireUnit('app-components/password-recovery', {
|
||||
'lib-app/api-call': APICallMock,
|
||||
'core-components/submit-button': SubmitButton,
|
||||
'core-components/button': Button,
|
||||
'core-components/form-field': FormField,
|
||||
'core-components/': FormField,
|
||||
'core-components/form': Form,
|
||||
'core-components/checkbox': Checkbox,
|
||||
'core-components/message': Message,
|
||||
'core-components/widget': Widget,
|
||||
});
|
||||
|
||||
describe('PasswordRecovery component', function () {
|
||||
let recoverWidget, recoverForm, widgetTransition, emailInput, component,
|
||||
backToLoginButton, submitButton;
|
||||
|
||||
let dispatch = stub();
|
||||
|
||||
beforeEach(function () {
|
||||
component = TestUtils.renderIntoDocument(
|
||||
<PasswordRecovery />
|
||||
);
|
||||
recoverWidget = TestUtils.scryRenderedComponentsWithType(component, Widget)[0];
|
||||
recoverForm = TestUtils.scryRenderedComponentsWithType(component, Form)[0];
|
||||
emailInput = TestUtils.scryRenderedComponentsWithType(component, Input)[0];
|
||||
submitButton = TestUtils.scryRenderedComponentsWithType(component, SubmitButton)[0];
|
||||
backToLoginButton = TestUtils.scryRenderedComponentsWithType(component, Button)[0];
|
||||
});
|
||||
|
||||
it('should control form errors by prop', function () {
|
||||
expect(recoverForm.props.errors).to.deep.equal({});
|
||||
recoverForm.props.onValidateErrors({email: 'MOCK_ERROR'});
|
||||
expect(recoverForm.props.errors).to.deep.equal({email: 'MOCK_ERROR'});
|
||||
});
|
||||
|
||||
it('should call sendRecoverPassword when submitted', function () {
|
||||
let mockSubmitData = {email: 'MOCK_VALUE'};
|
||||
APICallMock.call.reset();
|
||||
|
||||
recoverForm.props.onSubmit(mockSubmitData);
|
||||
expect(APICallMock.call).to.have.been.calledWith({
|
||||
path: '/user/send-recover-password',
|
||||
data: mockSubmitData
|
||||
});
|
||||
});
|
||||
|
||||
it('should set loading true in the form when submitted', function () {
|
||||
let mockSubmitData = {email: 'MOCK_VALUE'};
|
||||
|
||||
recoverForm.props.onSubmit(mockSubmitData);
|
||||
expect(recoverForm.props.loading).to.equal(true);
|
||||
});
|
||||
|
||||
it('should add error and stop loading when send recover fails', function () {
|
||||
component.refs.recoverForm.refs.email.focus.reset();
|
||||
|
||||
component.onRecoverPasswordFail();
|
||||
expect(recoverForm.props.errors).to.deep.equal({email: 'EMAIL_NOT_EXIST'});
|
||||
expect(recoverForm.props.loading).to.equal(false);
|
||||
expect(component.refs.recoverForm.refs.email.focus).to.have.been.called;
|
||||
});
|
||||
|
||||
it('should show message when send recover success', function () {
|
||||
let message = TestUtils.scryRenderedComponentsWithType(component, Message)[0];
|
||||
expect(message).to.equal(undefined);
|
||||
|
||||
component.onRecoverPasswordSent();
|
||||
message = TestUtils.scryRenderedComponentsWithType(component, Message)[0];
|
||||
|
||||
expect(recoverForm.props.loading).to.equal(false);
|
||||
expect(message).to.not.equal(null);
|
||||
expect(message.props.type).to.equal('info');
|
||||
expect(message.props.children).to.equal('RECOVER_SENT');
|
||||
});
|
||||
|
||||
it('should show front side if \'Back to login form\' link is clicked', function () {
|
||||
backToLoginButton.props.onClick();
|
||||
expect(widgetTransition.props.sideToShow).to.equal('front');
|
||||
});
|
||||
});
|
|
@ -2,7 +2,7 @@ import React from 'react';
|
|||
import classNames from 'classnames';
|
||||
|
||||
import i18n from 'lib-app/i18n';
|
||||
import API from 'lib-app/api-call';
|
||||
import API from 'lib-app/api-call';
|
||||
|
||||
import Form from 'core-components/form';
|
||||
import FormField from 'core-components/form-field';
|
||||
|
@ -12,7 +12,7 @@ import SubmitButton from 'core-components/submit-button';
|
|||
import Message from 'core-components/message';
|
||||
|
||||
class PasswordRecovery extends React.Component {
|
||||
|
||||
|
||||
static propTypes = {
|
||||
recoverSent: React.PropTypes.bool,
|
||||
formProps: React.PropTypes.object,
|
||||
|
|
|
@ -111,7 +111,7 @@ class TicketViewer extends React.Component {
|
|||
</div>
|
||||
<div className="col-md-4">
|
||||
{ticket.closed ?
|
||||
<Button type='secondary' size="extra-small" onClick={this.onCloseClick.bind(this)}>
|
||||
<Button type='secondary' size="extra-small" onClick={this.onReopenClick.bind(this)}>
|
||||
{i18n('RE_OPEN')}
|
||||
</Button> : i18n('OPENED')}
|
||||
</div>
|
||||
|
@ -282,13 +282,27 @@ class TicketViewer extends React.Component {
|
|||
}).then(this.onTicketModification.bind(this));
|
||||
}
|
||||
|
||||
onCloseClick() {
|
||||
AreYouSure.openModal(null, this.toggleClose.bind(this));
|
||||
onReopenClick() {
|
||||
AreYouSure.openModal(null, this.reopenTicket.bind(this));
|
||||
}
|
||||
|
||||
toggleClose() {
|
||||
onCloseTicketClick(event) {
|
||||
event.preventDefault();
|
||||
AreYouSure.openModal(null, this.closeTicket.bind(this));
|
||||
}
|
||||
|
||||
reopenTicket() {
|
||||
API.call({
|
||||
path: (this.props.ticket.closed) ? '/ticket/re-open' : '/ticket/close',
|
||||
path: '/ticket/re-open',
|
||||
data: {
|
||||
ticketNumber: this.props.ticket.ticketNumber
|
||||
}
|
||||
}).then(this.onTicketModification.bind(this));
|
||||
}
|
||||
|
||||
closeTicket() {
|
||||
API.call({
|
||||
path: '/ticket/close',
|
||||
data: {
|
||||
ticketNumber: this.props.ticket.ticketNumber
|
||||
}
|
||||
|
@ -373,15 +387,6 @@ class TicketViewer extends React.Component {
|
|||
this.props.onChange();
|
||||
}
|
||||
}
|
||||
onCloseTicketClick(event){
|
||||
event.preventDefault();
|
||||
API.call({
|
||||
path: '/ticket/close',
|
||||
data: {
|
||||
ticketNumber: this.props.ticket.ticketNumber
|
||||
}
|
||||
}).then(this.onTicketModification.bind(this));
|
||||
}
|
||||
}
|
||||
|
||||
export default connect((store) => {
|
||||
|
|
|
@ -9,11 +9,13 @@ const Checkbox = ReactMock();
|
|||
const Message = ReactMock();
|
||||
const Widget = ReactMock();
|
||||
const WidgetTransition = ReactMock();
|
||||
const PasswordRecovery = ReactMock();
|
||||
|
||||
const MainHomePageLoginWidget = requireUnit('app/main/main-home/main-home-page-login-widget', {
|
||||
'react-redux': ReduxMock,
|
||||
'actions/session-actions': SessionActionsMock,
|
||||
'lib-app/api-call': APICallMock,
|
||||
'app-components/password-recovery': PasswordRecovery,
|
||||
'core-components/submit-button': SubmitButton,
|
||||
'core-components/button': Button,
|
||||
'core-components/input': Input,
|
||||
|
@ -98,7 +100,7 @@ describe('Login/Recover Widget', function () {
|
|||
expect(loginForm.props.errors).to.deep.equal({password: 'ERROR_PASSWORD'});
|
||||
expect(loginForm.props.loading).to.equal(false);
|
||||
});
|
||||
|
||||
|
||||
it('should show back side if \'Forgot your password?\' link is clicked', function () {
|
||||
expect(widgetTransition.props.sideToShow).to.equal('front');
|
||||
forgotPasswordButton.props.onClick();
|
||||
|
@ -107,8 +109,7 @@ describe('Login/Recover Widget', function () {
|
|||
});
|
||||
|
||||
describe('Recover Password form', function () {
|
||||
let recoverWidget, recoverForm, widgetTransition, emailInput, component,
|
||||
backToLoginButton, submitButton;
|
||||
let recoverPassword, widgetTransition, component;
|
||||
|
||||
let dispatch = stub();
|
||||
|
||||
|
@ -117,32 +118,20 @@ describe('Login/Recover Widget', function () {
|
|||
<MainHomePageLoginWidget dispatch={dispatch} session={{pending: false, failed: false}} />
|
||||
);
|
||||
widgetTransition = TestUtils.scryRenderedComponentsWithType(component, WidgetTransition)[0];
|
||||
recoverWidget = TestUtils.scryRenderedComponentsWithType(component, Widget)[1];
|
||||
recoverForm = TestUtils.scryRenderedComponentsWithType(component, Form)[1];
|
||||
emailInput = TestUtils.scryRenderedComponentsWithType(component, Input)[2];
|
||||
submitButton = TestUtils.scryRenderedComponentsWithType(component, SubmitButton)[1];
|
||||
backToLoginButton = TestUtils.scryRenderedComponentsWithType(component, Button)[1];
|
||||
|
||||
component.refs.recoverForm = {
|
||||
refs: {
|
||||
email: {
|
||||
focus: stub()
|
||||
}
|
||||
}
|
||||
};
|
||||
recoverPassword = TestUtils.scryRenderedComponentsWithType(component, PasswordRecovery)[0];
|
||||
});
|
||||
|
||||
it('should control form errors by prop', function () {
|
||||
expect(recoverForm.props.errors).to.deep.equal({});
|
||||
recoverForm.props.onValidateErrors({email: 'MOCK_ERROR'});
|
||||
expect(recoverForm.props.errors).to.deep.equal({email: 'MOCK_ERROR'});
|
||||
expect(recoverPassword.props.formProps.errors).to.deep.equal({});
|
||||
recoverPassword.props.formProps.onValidateErrors({email: 'MOCK_ERROR'});
|
||||
expect(recoverPassword.props.formProps.errors).to.deep.equal({email: 'MOCK_ERROR'});
|
||||
});
|
||||
|
||||
it('should call sendRecoverPassword when submitted', function () {
|
||||
let mockSubmitData = {email: 'MOCK_VALUE'};
|
||||
APICallMock.call.reset();
|
||||
|
||||
recoverForm.props.onSubmit(mockSubmitData);
|
||||
recoverPassword.props.formProps.onSubmit(mockSubmitData);
|
||||
expect(APICallMock.call).to.have.been.calledWith({
|
||||
path: '/user/send-recover-password',
|
||||
data: mockSubmitData
|
||||
|
@ -152,12 +141,12 @@ describe('Login/Recover Widget', function () {
|
|||
it('should set loading true in the form when submitted', function () {
|
||||
let mockSubmitData = {email: 'MOCK_VALUE'};
|
||||
|
||||
recoverForm.props.onSubmit(mockSubmitData);
|
||||
expect(recoverForm.props.loading).to.equal(true);
|
||||
recoverPassword.props.formProps.onSubmit(mockSubmitData);
|
||||
expect(recoverForm.props.formProps.loading).to.equal(true);
|
||||
});
|
||||
|
||||
it('should add error and stop loading when send recover fails', function () {
|
||||
component.refs.recoverForm.refs.email.focus.reset();
|
||||
component.refs.recoverPassword.refs.email.focus.reset();
|
||||
|
||||
component.onRecoverPasswordFail();
|
||||
expect(recoverForm.props.errors).to.deep.equal({email: 'EMAIL_NOT_EXIST'});
|
||||
|
@ -183,4 +172,4 @@ describe('Login/Recover Widget', function () {
|
|||
expect(widgetTransition.props.sideToShow).to.equal('front');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -9,7 +9,7 @@ import API from 'lib-app/api-call';
|
|||
import focus from 'lib-core/focus';
|
||||
import i18n from 'lib-app/i18n';
|
||||
|
||||
import PasswordRecovery from 'app-components/password-recovery.js';
|
||||
import PasswordRecovery from 'app-components/password-recovery';
|
||||
import SubmitButton from 'core-components/submit-button';
|
||||
import Button from 'core-components/button';
|
||||
import Form from 'core-components/form';
|
||||
|
|
|
@ -23,18 +23,19 @@ global.requireUnit = function (path, mocks) {
|
|||
};
|
||||
global.reRenderIntoDocument = (function () {
|
||||
let div;
|
||||
|
||||
|
||||
return function (jsx) {
|
||||
if (!div) {
|
||||
div = document.createElement('div')
|
||||
}
|
||||
|
||||
|
||||
return ReactDOM.render(jsx, div);
|
||||
}
|
||||
})();
|
||||
global.ReduxMock = {
|
||||
connect: stub().returns(stub().returnsArg(0))
|
||||
};
|
||||
global.globalIndexPath = '';
|
||||
|
||||
Array.prototype.swap = function (x,y) {
|
||||
var b = this[x];
|
||||
|
|
Loading…
Reference in New Issue