Ivan - Fix unit testing [skip ci]
This commit is contained in:
parent
123c008636
commit
35cf17b114
|
@ -1,47 +0,0 @@
|
||||||
|
|
||||||
const App = requireUnit('app/App', {
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('App component', function () {
|
|
||||||
describe('when reacting to CommonStore', function () {
|
|
||||||
let app;
|
|
||||||
|
|
||||||
beforeEach(function () {
|
|
||||||
app = TestUtils.renderIntoDocument(
|
|
||||||
<App><span>MOCK_CHILD</span></App>
|
|
||||||
);
|
|
||||||
|
|
||||||
app.context = {
|
|
||||||
router: {
|
|
||||||
push: stub()
|
|
||||||
},
|
|
||||||
|
|
||||||
location: {
|
|
||||||
pathname: 'MOCK_PATH'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
spy(app, 'forceUpdate');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should update with i18n', function () {
|
|
||||||
app.context.router.push.reset();
|
|
||||||
app.forceUpdate.reset();
|
|
||||||
app.onCommonStoreChanged('i18n');
|
|
||||||
expect(app.context.router.push).to.have.been.calledWith('MOCK_PATH');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should redirect when logged in', function () {
|
|
||||||
app.context.router.push.reset();
|
|
||||||
app.onCommonStoreChanged('logged');
|
|
||||||
expect(app.context.router.push).to.have.been.calledWith('/app/dashboard');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should redirect when logged out', function () {
|
|
||||||
app.context.router.push.reset();
|
|
||||||
app.onCommonStoreChanged('loggedOut');
|
|
||||||
expect(app.context.router.push).to.have.been.calledWith('/app');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,27 +0,0 @@
|
||||||
const DashboardLayout = requireUnit('app/main/dashboard/dashboard-layout', {
|
|
||||||
'app/main/dashboard/dashboard-menu': ReactMock()
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
describe('Dashboard page', function () {
|
|
||||||
|
|
||||||
afterEach(function () {
|
|
||||||
UserStore.isLoggedIn.returns(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should trigger common action if user is not logged', function () {
|
|
||||||
CommonActions.loggedOut.reset();
|
|
||||||
UserStore.isLoggedIn.returns(false);
|
|
||||||
|
|
||||||
TestUtils.renderIntoDocument(<DashboardLayout />);
|
|
||||||
expect(CommonActions.loggedOut).to.have.been.called;
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not trigger common action user if is logged', function () {
|
|
||||||
CommonActions.loggedOut.reset();
|
|
||||||
UserStore.isLoggedIn.returns(true);
|
|
||||||
|
|
||||||
TestUtils.renderIntoDocument(<DashboardLayout />);
|
|
||||||
expect(CommonActions.loggedOut).to.not.have.been.called;
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
const SessionActionsMock = require('actions/__mocks__/session-actions-mock');
|
||||||
|
const APICallMock = require('lib-app/__mocks__/api-call-mock');
|
||||||
|
|
||||||
const SubmitButton = ReactMock();
|
const SubmitButton = ReactMock();
|
||||||
const Button = ReactMock();
|
const Button = ReactMock();
|
||||||
const Input = ReactMock();
|
const Input = ReactMock();
|
||||||
|
@ -8,6 +11,9 @@ const Widget = ReactMock();
|
||||||
const WidgetTransition = ReactMock();
|
const WidgetTransition = ReactMock();
|
||||||
|
|
||||||
const MainHomePageLoginWidget = requireUnit('app/main/main-home/main-home-page-login-widget', {
|
const MainHomePageLoginWidget = requireUnit('app/main/main-home/main-home-page-login-widget', {
|
||||||
|
'react-redux': ReduxMock,
|
||||||
|
'actions/session-actions': SessionActionsMock,
|
||||||
|
'lib-app/api-call': APICallMock,
|
||||||
'core-components/submit-button': SubmitButton,
|
'core-components/submit-button': SubmitButton,
|
||||||
'core-components/button': Button,
|
'core-components/button': Button,
|
||||||
'core-components/input': Input,
|
'core-components/input': Input,
|
||||||
|
@ -24,9 +30,12 @@ describe('Login/Recover Widget', function () {
|
||||||
let loginWidget, loginForm, widgetTransition, inputs, checkbox, component,
|
let loginWidget, loginForm, widgetTransition, inputs, checkbox, component,
|
||||||
forgotPasswordButton, submitButton;
|
forgotPasswordButton, submitButton;
|
||||||
|
|
||||||
beforeEach(function () {
|
let dispatch = stub();
|
||||||
component = TestUtils.renderIntoDocument(
|
|
||||||
<MainHomePageLoginWidget />
|
function renderComponent(props = {session: {pending: false, failed: false}}) {
|
||||||
|
|
||||||
|
component = reRenderIntoDocument(
|
||||||
|
<MainHomePageLoginWidget dispatch={dispatch} {...props}/>
|
||||||
);
|
);
|
||||||
widgetTransition = TestUtils.scryRenderedComponentsWithType(component, WidgetTransition)[0];
|
widgetTransition = TestUtils.scryRenderedComponentsWithType(component, WidgetTransition)[0];
|
||||||
loginWidget = TestUtils.scryRenderedComponentsWithType(component, Widget)[0];
|
loginWidget = TestUtils.scryRenderedComponentsWithType(component, Widget)[0];
|
||||||
|
@ -43,7 +52,9 @@ describe('Login/Recover Widget', function () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
}
|
||||||
|
|
||||||
|
beforeEach(renderComponent);
|
||||||
|
|
||||||
it('should control form errors by prop', function () {
|
it('should control form errors by prop', function () {
|
||||||
expect(loginForm.props.errors).to.deep.equal({});
|
expect(loginForm.props.errors).to.deep.equal({});
|
||||||
|
@ -53,25 +64,38 @@ describe('Login/Recover Widget', function () {
|
||||||
|
|
||||||
it('should trigger login action when submitted', function () {
|
it('should trigger login action when submitted', function () {
|
||||||
let mockSubmitData = {email: 'MOCK_VALUE', password: 'MOCK_VALUE'};
|
let mockSubmitData = {email: 'MOCK_VALUE', password: 'MOCK_VALUE'};
|
||||||
|
let actionMock = {};
|
||||||
|
SessionActionsMock.login.returns(actionMock);
|
||||||
|
dispatch.reset();
|
||||||
|
|
||||||
UserActions.login.reset();
|
|
||||||
loginForm.props.onSubmit(mockSubmitData);
|
loginForm.props.onSubmit(mockSubmitData);
|
||||||
expect(UserActions.login).to.have.been.calledWith(mockSubmitData);
|
expect(SessionActionsMock.login).to.have.been.calledWith(mockSubmitData);
|
||||||
|
expect(dispatch).to.have.been.calledWith(actionMock);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should set loading true in the form when submitted', function () {
|
it('should set loading true if session login is pending', function () {
|
||||||
let mockSubmitData = {email: 'MOCK_VALUE', password: 'MOCK_VALUE'};
|
expect(loginForm.props.loading).to.equal(false);
|
||||||
|
renderComponent({
|
||||||
loginForm.props.onSubmit(mockSubmitData);
|
session: {
|
||||||
|
pending: true,
|
||||||
|
failed: false
|
||||||
|
}
|
||||||
|
});
|
||||||
expect(loginForm.props.loading).to.equal(true);
|
expect(loginForm.props.loading).to.equal(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should add error and stop loading if login fails', function () {
|
it('should add error and stop loading if login fails', function () {
|
||||||
component.refs.loginForm.refs.password.focus.reset();
|
component.setState({
|
||||||
component.onUserStoreChanged('LOGIN_FAIL');
|
loginFormErrors: {}
|
||||||
|
});
|
||||||
|
renderComponent({
|
||||||
|
session: {
|
||||||
|
pending: false,
|
||||||
|
failed: true
|
||||||
|
}
|
||||||
|
});
|
||||||
expect(loginForm.props.errors).to.deep.equal({password: 'Invalid password'});
|
expect(loginForm.props.errors).to.deep.equal({password: 'Invalid password'});
|
||||||
expect(loginForm.props.loading).to.equal(false);
|
expect(loginForm.props.loading).to.equal(false);
|
||||||
expect(component.refs.loginForm.refs.password.focus).to.have.been.called;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show back side if \'Forgot your password?\' link is clicked', function () {
|
it('should show back side if \'Forgot your password?\' link is clicked', function () {
|
||||||
|
@ -85,9 +109,11 @@ describe('Login/Recover Widget', function () {
|
||||||
let recoverWidget, recoverForm, widgetTransition, emailInput, component,
|
let recoverWidget, recoverForm, widgetTransition, emailInput, component,
|
||||||
backToLoginButton, submitButton;
|
backToLoginButton, submitButton;
|
||||||
|
|
||||||
|
let dispatch = stub();
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
component = TestUtils.renderIntoDocument(
|
component = TestUtils.renderIntoDocument(
|
||||||
<MainHomePageLoginWidget />
|
<MainHomePageLoginWidget dispatch={dispatch} session={{pending: false, failed: false}} />
|
||||||
);
|
);
|
||||||
widgetTransition = TestUtils.scryRenderedComponentsWithType(component, WidgetTransition)[0];
|
widgetTransition = TestUtils.scryRenderedComponentsWithType(component, WidgetTransition)[0];
|
||||||
recoverWidget = TestUtils.scryRenderedComponentsWithType(component, Widget)[1];
|
recoverWidget = TestUtils.scryRenderedComponentsWithType(component, Widget)[1];
|
||||||
|
@ -111,12 +137,15 @@ describe('Login/Recover Widget', function () {
|
||||||
expect(recoverForm.props.errors).to.deep.equal({email: 'MOCK_ERROR'});
|
expect(recoverForm.props.errors).to.deep.equal({email: 'MOCK_ERROR'});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should trigger sendRecoverPassword action when submitted', function () {
|
it('should call sendRecoverPassword when submitted', function () {
|
||||||
let mockSubmitData = {email: 'MOCK_VALUE'};
|
let mockSubmitData = {email: 'MOCK_VALUE'};
|
||||||
|
APICallMock.call.reset();
|
||||||
|
|
||||||
UserActions.sendRecoverPassword.reset();
|
|
||||||
recoverForm.props.onSubmit(mockSubmitData);
|
recoverForm.props.onSubmit(mockSubmitData);
|
||||||
expect(UserActions.sendRecoverPassword).to.have.been.calledWith(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 () {
|
it('should set loading true in the form when submitted', function () {
|
||||||
|
@ -128,7 +157,8 @@ describe('Login/Recover Widget', function () {
|
||||||
|
|
||||||
it('should add error and stop loading when send recover fails', function () {
|
it('should add error and stop loading when send recover fails', function () {
|
||||||
component.refs.recoverForm.refs.email.focus.reset();
|
component.refs.recoverForm.refs.email.focus.reset();
|
||||||
component.onUserStoreChanged('SEND_RECOVER_FAIL');
|
|
||||||
|
component.onRecoverPasswordFail();
|
||||||
expect(recoverForm.props.errors).to.deep.equal({email: 'Email does not exist'});
|
expect(recoverForm.props.errors).to.deep.equal({email: 'Email does not exist'});
|
||||||
expect(recoverForm.props.loading).to.equal(false);
|
expect(recoverForm.props.loading).to.equal(false);
|
||||||
expect(component.refs.recoverForm.refs.email.focus).to.have.been.called;
|
expect(component.refs.recoverForm.refs.email.focus).to.have.been.called;
|
||||||
|
@ -138,7 +168,7 @@ describe('Login/Recover Widget', function () {
|
||||||
let message = TestUtils.scryRenderedComponentsWithType(component, Message)[0];
|
let message = TestUtils.scryRenderedComponentsWithType(component, Message)[0];
|
||||||
expect(message).to.equal(undefined);
|
expect(message).to.equal(undefined);
|
||||||
|
|
||||||
component.onUserStoreChanged('SEND_RECOVER_SUCCESS');
|
component.onRecoverPasswordSent();
|
||||||
message = TestUtils.scryRenderedComponentsWithType(component, Message)[0];
|
message = TestUtils.scryRenderedComponentsWithType(component, Message)[0];
|
||||||
|
|
||||||
expect(recoverForm.props.loading).to.equal(false);
|
expect(recoverForm.props.loading).to.equal(false);
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
const MainHomePage = requireUnit('app/main/main-home/main-home-page', {
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
describe('Main home page', function () {
|
|
||||||
|
|
||||||
afterEach(function () {
|
|
||||||
UserStore.isLoggedIn.returns(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should trigger common action if user is currently logged', function () {
|
|
||||||
CommonActions.logged.reset();
|
|
||||||
UserStore.isLoggedIn.returns(true);
|
|
||||||
|
|
||||||
TestUtils.renderIntoDocument(<MainHomePage />);
|
|
||||||
expect(CommonActions.logged).to.have.been.called;
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not trigger common action user if is not logged', function () {
|
|
||||||
CommonActions.logged.reset();
|
|
||||||
UserStore.isLoggedIn.returns(false);
|
|
||||||
|
|
||||||
TestUtils.renderIntoDocument(<MainHomePage />);
|
|
||||||
expect(CommonActions.logged).to.not.have.been.called;
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -124,9 +124,13 @@ class MainHomePageLoginWidget extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
getLoginFormErrors() {
|
getLoginFormErrors() {
|
||||||
return _.extend({}, this.state.loginFormErrors, {
|
let errors = _.extend({}, this.state.loginFormErrors);
|
||||||
password: (this.props.session.failed) ? i18n('ERROR_PASSWORD') : null
|
|
||||||
});
|
if (this.props.session.failed) {
|
||||||
|
errors.password = i18n('ERROR_PASSWORD');
|
||||||
|
}
|
||||||
|
|
||||||
|
return errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
onLoginFormSubmit(formState) {
|
onLoginFormSubmit(formState) {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
const APICallMock = require('lib-app/__mocks__/api-call-mock');
|
||||||
|
|
||||||
const SubmitButton = ReactMock();
|
const SubmitButton = ReactMock();
|
||||||
const Button = ReactMock();
|
const Button = ReactMock();
|
||||||
const Input = ReactMock();
|
const Input = ReactMock();
|
||||||
|
@ -6,6 +8,7 @@ const Message = ReactMock();
|
||||||
const Widget = ReactMock();
|
const Widget = ReactMock();
|
||||||
|
|
||||||
const MainRecoverPasswordPage = requireUnit('app/main/main-recover-password/main-recover-password-page', {
|
const MainRecoverPasswordPage = requireUnit('app/main/main-recover-password/main-recover-password-page', {
|
||||||
|
'lib-app/api-call': APICallMock,
|
||||||
'core-components/submit-button': SubmitButton,
|
'core-components/submit-button': SubmitButton,
|
||||||
'core-components/button': Button,
|
'core-components/button': Button,
|
||||||
'core-components/input': Input,
|
'core-components/input': Input,
|
||||||
|
@ -31,12 +34,16 @@ describe('Recover Password form', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should trigger recoverPassword action when submitted', function () {
|
it('should trigger recoverPassword action when submitted', function () {
|
||||||
UserActions.sendRecoverPassword.reset();
|
APICallMock.call.reset();
|
||||||
recoverForm.props.onSubmit({password: 'MOCK_VALUE'});
|
recoverForm.props.onSubmit({password: 'MOCK_VALUE'});
|
||||||
expect(UserActions.recoverPassword).to.have.been.calledWith({
|
|
||||||
password: 'MOCK_VALUE',
|
expect(APICallMock.call).to.have.been.calledWith({
|
||||||
token: 'SOME_TOKEN',
|
path: '/user/recover-password',
|
||||||
email: 'SOME_EMAIL'
|
data: {
|
||||||
|
password: 'MOCK_VALUE',
|
||||||
|
token: 'SOME_TOKEN',
|
||||||
|
email: 'SOME_EMAIL'
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -46,7 +53,7 @@ describe('Recover Password form', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show message when recover fails', function () {
|
it('should show message when recover fails', function () {
|
||||||
component.onUserStoreChanged('INVALID_RECOVER');
|
component.onPasswordRecoverFail();
|
||||||
expect(recoverForm.props.loading).to.equal(false);
|
expect(recoverForm.props.loading).to.equal(false);
|
||||||
|
|
||||||
let message = TestUtils.scryRenderedComponentsWithType(component, Message)[0];
|
let message = TestUtils.scryRenderedComponentsWithType(component, Message)[0];
|
||||||
|
@ -56,7 +63,7 @@ describe('Recover Password form', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show message when recover success', function () {
|
it('should show message when recover success', function () {
|
||||||
component.onUserStoreChanged('VALID_RECOVER');
|
component.onPasswordRecovered();
|
||||||
expect(recoverForm.props.loading).to.equal(false);
|
expect(recoverForm.props.loading).to.equal(false);
|
||||||
|
|
||||||
let message = TestUtils.scryRenderedComponentsWithType(component, Message)[0];
|
let message = TestUtils.scryRenderedComponentsWithType(component, Message)[0];
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
const MainSignupPage = requireUnit('app/main/main-signup/main-signup-page', {
|
|
||||||
'react-google-recaptcha': ReactMock()
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
describe('Signup page', function () {
|
|
||||||
|
|
||||||
afterEach(function () {
|
|
||||||
UserStore.isLoggedIn.returns(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should trigger common action if user is currently logged', function () {
|
|
||||||
CommonActions.logged.reset();
|
|
||||||
UserStore.isLoggedIn.returns(true);
|
|
||||||
|
|
||||||
TestUtils.renderIntoDocument(<MainSignupPage />);
|
|
||||||
expect(CommonActions.logged).to.have.been.called;
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not trigger common action user if is not logged', function () {
|
|
||||||
CommonActions.logged.reset();
|
|
||||||
UserStore.isLoggedIn.returns(false);
|
|
||||||
|
|
||||||
TestUtils.renderIntoDocument(<MainSignupPage />);
|
|
||||||
expect(CommonActions.logged).to.not.have.been.called;
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -32,3 +32,6 @@ global.reRenderIntoDocument = (function () {
|
||||||
return ReactDOM.render(jsx, div);
|
return ReactDOM.render(jsx, div);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
global.ReduxMock = {
|
||||||
|
connect: stub().returns(stub().returnsArg(0))
|
||||||
|
};
|
Loading…
Reference in New Issue