redux-form
Version:
A higher order component decorator for forms using Redux and React
288 lines (253 loc) • 15.9 kB
JavaScript
'use strict';
var _noop2 = require('lodash/noop');
var _noop3 = _interopRequireDefault(_noop2);
var _expect = require('expect');
var _expect2 = _interopRequireDefault(_expect);
var _handleSubmit = require('../handleSubmit');
var _handleSubmit2 = _interopRequireDefault(_handleSubmit);
var _SubmissionError = require('../SubmissionError');
var _SubmissionError2 = _interopRequireDefault(_SubmissionError);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
describe('handleSubmit', function () {
it('should stop if sync validation fails', function () {
var values = { foo: 'bar', baz: 42 };
var submit = (0, _expect.createSpy)().andReturn(69);
var startSubmit = (0, _expect.createSpy)();
var stopSubmit = (0, _expect.createSpy)();
var touch = (0, _expect.createSpy)();
var setSubmitFailed = (0, _expect.createSpy)();
var setSubmitSucceeded = (0, _expect.createSpy)();
var asyncValidate = (0, _expect.createSpy)();
var props = { startSubmit: startSubmit, stopSubmit: stopSubmit, touch: touch, setSubmitFailed: setSubmitFailed, setSubmitSucceeded: setSubmitSucceeded, values: values };
(0, _handleSubmit2.default)(submit, props, false, asyncValidate, ['foo', 'baz']);
(0, _expect2.default)(submit).toNotHaveBeenCalled();
(0, _expect2.default)(startSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(stopSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(touch).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
(0, _expect2.default)(asyncValidate).toNotHaveBeenCalled();
(0, _expect2.default)(setSubmitSucceeded).toNotHaveBeenCalled();
(0, _expect2.default)(setSubmitFailed).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
});
it('should stop and return errors if sync validation fails', function () {
var values = { foo: 'bar', baz: 42 };
var submit = (0, _expect.createSpy)().andReturn(69);
var syncErrors = { foo: 'error' };
var startSubmit = (0, _expect.createSpy)();
var stopSubmit = (0, _expect.createSpy)();
var touch = (0, _expect.createSpy)();
var setSubmitFailed = (0, _expect.createSpy)();
var setSubmitSucceeded = (0, _expect.createSpy)();
var asyncValidate = (0, _expect.createSpy)();
var props = {
startSubmit: startSubmit,
stopSubmit: stopSubmit,
touch: touch,
setSubmitFailed: setSubmitFailed, setSubmitSucceeded: setSubmitSucceeded,
syncErrors: syncErrors,
values: values
};
var result = (0, _handleSubmit2.default)(submit, props, false, asyncValidate, ['foo', 'baz']);
(0, _expect2.default)(asyncValidate).toNotHaveBeenCalled();
(0, _expect2.default)(submit).toNotHaveBeenCalled();
(0, _expect2.default)(startSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(stopSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(touch).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
(0, _expect2.default)(setSubmitSucceeded).toNotHaveBeenCalled();
(0, _expect2.default)(setSubmitFailed).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
(0, _expect2.default)(result).toBe(syncErrors);
});
it('should return result of sync submit', function () {
var values = { foo: 'bar', baz: 42 };
var submit = (0, _expect.createSpy)().andReturn(69);
var dispatch = _noop3.default;
var startSubmit = (0, _expect.createSpy)();
var stopSubmit = (0, _expect.createSpy)();
var touch = (0, _expect.createSpy)();
var setSubmitFailed = (0, _expect.createSpy)();
var setSubmitSucceeded = (0, _expect.createSpy)();
var asyncValidate = undefined;
var props = { dispatch: dispatch, startSubmit: startSubmit, stopSubmit: stopSubmit, touch: touch, setSubmitFailed: setSubmitFailed, setSubmitSucceeded: setSubmitSucceeded, values: values };
(0, _expect2.default)((0, _handleSubmit2.default)(submit, props, true, asyncValidate, ['foo', 'baz'])).toBe(69);
(0, _expect2.default)(submit).toHaveBeenCalled().toHaveBeenCalledWith(values, dispatch, props);
(0, _expect2.default)(startSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(stopSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(touch).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
(0, _expect2.default)(setSubmitFailed).toNotHaveBeenCalled();
(0, _expect2.default)(setSubmitSucceeded).toHaveBeenCalled();
});
it('should not submit if async validation fails', function () {
var values = { foo: 'bar', baz: 42 };
var submit = (0, _expect.createSpy)().andReturn(69);
var dispatch = _noop3.default;
var startSubmit = (0, _expect.createSpy)();
var stopSubmit = (0, _expect.createSpy)();
var touch = (0, _expect.createSpy)();
var setSubmitFailed = (0, _expect.createSpy)();
var setSubmitSucceeded = (0, _expect.createSpy)();
var asyncValidate = (0, _expect.createSpy)().andReturn(Promise.reject());
var props = { dispatch: dispatch, startSubmit: startSubmit, stopSubmit: stopSubmit, touch: touch, setSubmitFailed: setSubmitFailed, setSubmitSucceeded: setSubmitSucceeded, values: values };
return (0, _handleSubmit2.default)(submit, props, true, asyncValidate, ['foo', 'baz']).catch(function (result) {
(0, _expect2.default)(result).toBe(undefined);
(0, _expect2.default)(asyncValidate).toHaveBeenCalled().toHaveBeenCalledWith();
(0, _expect2.default)(submit).toNotHaveBeenCalled();
(0, _expect2.default)(startSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(stopSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(touch).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
(0, _expect2.default)(setSubmitSucceeded).toNotHaveBeenCalled();
(0, _expect2.default)(setSubmitFailed).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
});
});
it('should not submit if async validation fails and return rejected promise', function () {
var values = { foo: 'bar', baz: 42 };
var submit = (0, _expect.createSpy)().andReturn(69);
var dispatch = _noop3.default;
var startSubmit = (0, _expect.createSpy)();
var stopSubmit = (0, _expect.createSpy)();
var touch = (0, _expect.createSpy)();
var setSubmitFailed = (0, _expect.createSpy)();
var setSubmitSucceeded = (0, _expect.createSpy)();
var asyncErrors = { foo: 'async error' };
var asyncValidate = (0, _expect.createSpy)().andReturn(Promise.reject(asyncErrors));
var props = {
dispatch: dispatch, startSubmit: startSubmit, stopSubmit: stopSubmit, touch: touch, setSubmitFailed: setSubmitFailed, setSubmitSucceeded: setSubmitSucceeded, values: values
};
return (0, _handleSubmit2.default)(submit, props, true, asyncValidate, ['foo', 'baz']).catch(function (result) {
(0, _expect2.default)(result).toBe(asyncErrors);
(0, _expect2.default)(asyncValidate).toHaveBeenCalled().toHaveBeenCalledWith();
(0, _expect2.default)(submit).toNotHaveBeenCalled();
(0, _expect2.default)(startSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(stopSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(touch).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
(0, _expect2.default)(setSubmitSucceeded).toNotHaveBeenCalled();
(0, _expect2.default)(setSubmitFailed).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
});
});
it('should sync submit if async validation passes', function () {
var values = { foo: 'bar', baz: 42 };
var submit = (0, _expect.createSpy)().andReturn(69);
var dispatch = _noop3.default;
var startSubmit = (0, _expect.createSpy)();
var stopSubmit = (0, _expect.createSpy)();
var touch = (0, _expect.createSpy)();
var setSubmitFailed = (0, _expect.createSpy)();
var setSubmitSucceeded = (0, _expect.createSpy)();
var asyncValidate = (0, _expect.createSpy)().andReturn(Promise.resolve());
var props = { dispatch: dispatch, startSubmit: startSubmit, stopSubmit: stopSubmit, touch: touch, setSubmitFailed: setSubmitFailed, setSubmitSucceeded: setSubmitSucceeded, values: values };
return (0, _handleSubmit2.default)(submit, props, true, asyncValidate, ['foo', 'baz']).then(function (result) {
(0, _expect2.default)(result).toBe(69);
(0, _expect2.default)(asyncValidate).toHaveBeenCalled().toHaveBeenCalledWith();
(0, _expect2.default)(submit).toHaveBeenCalled().toHaveBeenCalledWith(values, dispatch, props);
(0, _expect2.default)(startSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(stopSubmit).toNotHaveBeenCalled();
(0, _expect2.default)(touch).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
(0, _expect2.default)(setSubmitFailed).toNotHaveBeenCalled();
(0, _expect2.default)(setSubmitSucceeded).toHaveBeenCalled();
});
});
it('should async submit if async validation passes', function () {
var values = { foo: 'bar', baz: 42 };
var submit = (0, _expect.createSpy)().andReturn(Promise.resolve(69));
var dispatch = _noop3.default;
var startSubmit = (0, _expect.createSpy)();
var stopSubmit = (0, _expect.createSpy)();
var touch = (0, _expect.createSpy)();
var setSubmitFailed = (0, _expect.createSpy)();
var setSubmitSucceeded = (0, _expect.createSpy)();
var asyncValidate = (0, _expect.createSpy)().andReturn(Promise.resolve());
var props = { dispatch: dispatch, startSubmit: startSubmit, stopSubmit: stopSubmit, touch: touch, setSubmitFailed: setSubmitFailed, setSubmitSucceeded: setSubmitSucceeded, values: values };
return (0, _handleSubmit2.default)(submit, props, true, asyncValidate, ['foo', 'baz']).then(function (result) {
(0, _expect2.default)(result).toBe(69);
(0, _expect2.default)(asyncValidate).toHaveBeenCalled().toHaveBeenCalledWith();
(0, _expect2.default)(submit).toHaveBeenCalled().toHaveBeenCalledWith(values, dispatch, props);
(0, _expect2.default)(startSubmit).toHaveBeenCalled();
(0, _expect2.default)(stopSubmit).toHaveBeenCalled().toHaveBeenCalledWith();
(0, _expect2.default)(touch).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
(0, _expect2.default)(setSubmitFailed).toNotHaveBeenCalled();
(0, _expect2.default)(setSubmitSucceeded).toHaveBeenCalled();
});
});
it('should set submit errors if async submit fails', function () {
var values = { foo: 'bar', baz: 42 };
var submitErrors = { foo: 'submit error' };
var submit = (0, _expect.createSpy)().andReturn(Promise.reject(new _SubmissionError2.default(submitErrors)));
var dispatch = _noop3.default;
var startSubmit = (0, _expect.createSpy)();
var stopSubmit = (0, _expect.createSpy)();
var touch = (0, _expect.createSpy)();
var setSubmitFailed = (0, _expect.createSpy)();
var setSubmitSucceeded = (0, _expect.createSpy)();
var asyncValidate = (0, _expect.createSpy)().andReturn(Promise.resolve());
var props = { dispatch: dispatch, startSubmit: startSubmit, stopSubmit: stopSubmit, touch: touch, setSubmitFailed: setSubmitFailed, setSubmitSucceeded: setSubmitSucceeded, values: values };
return (0, _handleSubmit2.default)(submit, props, true, asyncValidate, ['foo', 'baz']).then(function (error) {
(0, _expect2.default)(error).toBe(submitErrors);
(0, _expect2.default)(asyncValidate).toHaveBeenCalled().toHaveBeenCalledWith();
(0, _expect2.default)(submit).toHaveBeenCalled().toHaveBeenCalledWith(values, dispatch, props);
(0, _expect2.default)(startSubmit).toHaveBeenCalled();
(0, _expect2.default)(stopSubmit).toHaveBeenCalled().toHaveBeenCalledWith(submitErrors);
(0, _expect2.default)(touch).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
(0, _expect2.default)(setSubmitFailed).toHaveBeenCalled();
(0, _expect2.default)(setSubmitSucceeded).toNotHaveBeenCalled();
});
});
it('should not set errors if rejected value not a SubmissionError', function () {
var values = { foo: 'bar', baz: 42 };
var submitErrors = { foo: 'submit error' };
var submit = (0, _expect.createSpy)().andReturn(Promise.reject(submitErrors));
var dispatch = _noop3.default;
var startSubmit = (0, _expect.createSpy)();
var stopSubmit = (0, _expect.createSpy)();
var touch = (0, _expect.createSpy)();
var setSubmitFailed = (0, _expect.createSpy)();
var setSubmitSucceeded = (0, _expect.createSpy)();
var asyncValidate = (0, _expect.createSpy)().andReturn(Promise.resolve());
var props = { dispatch: dispatch, startSubmit: startSubmit, stopSubmit: stopSubmit, touch: touch, setSubmitFailed: setSubmitFailed, setSubmitSucceeded: setSubmitSucceeded, values: values };
return (0, _handleSubmit2.default)(submit, props, true, asyncValidate, ['foo', 'baz']).then(function (result) {
(0, _expect2.default)(result).toBe(undefined);
(0, _expect2.default)(asyncValidate).toHaveBeenCalled().toHaveBeenCalledWith();
(0, _expect2.default)(submit).toHaveBeenCalled().toHaveBeenCalledWith(values, dispatch, props);
(0, _expect2.default)(startSubmit).toHaveBeenCalled();
(0, _expect2.default)(stopSubmit).toHaveBeenCalled().toHaveBeenCalledWith(undefined); // not wrapped in SubmissionError
(0, _expect2.default)(touch).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
(0, _expect2.default)(setSubmitFailed).toHaveBeenCalled();
(0, _expect2.default)(setSubmitSucceeded).toNotHaveBeenCalled();
});
});
it('should set submit errors if async submit fails and return rejected promise', function () {
var values = { foo: 'bar', baz: 42 };
var submitErrors = { foo: 'submit error' };
var submit = (0, _expect.createSpy)().andReturn(Promise.reject(new _SubmissionError2.default(submitErrors)));
var dispatch = _noop3.default;
var startSubmit = (0, _expect.createSpy)();
var stopSubmit = (0, _expect.createSpy)();
var touch = (0, _expect.createSpy)();
var setSubmitFailed = (0, _expect.createSpy)();
var setSubmitSucceeded = (0, _expect.createSpy)();
var asyncValidate = (0, _expect.createSpy)().andReturn(Promise.resolve());
var props = {
dispatch: dispatch, startSubmit: startSubmit, stopSubmit: stopSubmit, touch: touch, setSubmitFailed: setSubmitFailed, setSubmitSucceeded: setSubmitSucceeded, values: values
};
return (0, _handleSubmit2.default)(submit, props, true, asyncValidate, ['foo', 'baz']).then(function (error) {
(0, _expect2.default)(error).toBe(submitErrors);
(0, _expect2.default)(asyncValidate).toHaveBeenCalled().toHaveBeenCalledWith();
(0, _expect2.default)(submit).toHaveBeenCalled().toHaveBeenCalledWith(values, dispatch, props);
(0, _expect2.default)(startSubmit).toHaveBeenCalled();
(0, _expect2.default)(stopSubmit).toHaveBeenCalled().toHaveBeenCalledWith(submitErrors);
(0, _expect2.default)(touch).toHaveBeenCalled().toHaveBeenCalledWith('foo', 'baz');
(0, _expect2.default)(setSubmitFailed).toHaveBeenCalled();
(0, _expect2.default)(setSubmitSucceeded).toNotHaveBeenCalled();
});
});
it('should submit when there are old submit errors and persistentSubmitErrors is enabled', function () {
var values = { foo: 'bar', baz: 42 };
var submit = (0, _expect.createSpy)().andReturn(69);
var startSubmit = (0, _expect.createSpy)();
var stopSubmit = (0, _expect.createSpy)();
var touch = (0, _expect.createSpy)();
var setSubmitFailed = (0, _expect.createSpy)();
var setSubmitSucceeded = (0, _expect.createSpy)();
var asyncValidate = (0, _expect.createSpy)();
var props = { startSubmit: startSubmit, stopSubmit: stopSubmit, touch: touch, setSubmitFailed: setSubmitFailed, setSubmitSucceeded: setSubmitSucceeded, values: values, persistentSubmitErrors: true };
(0, _handleSubmit2.default)(submit, props, true, asyncValidate, ['foo', 'baz']);
(0, _expect2.default)(submit).toHaveBeenCalled();
});
});