Skip to content

Commit

Permalink
changed setSubmitSucceeded to not touch submitting state
Browse files Browse the repository at this point in the history
  • Loading branch information
taylorhakes committed Sep 3, 2016
1 parent 9186bd3 commit cdb99b7
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 3 deletions.
6 changes: 4 additions & 2 deletions src/__tests__/reducer.setSubmitSuceeded.spec.js
Expand Up @@ -31,7 +31,8 @@ const describeSetSubmitSucceeded = (reducer, expect, { fromJS }) => () => {
foo: {
doesnt: 'matter',
should: 'change',
submitSucceeded: true
submitSucceeded: true,
submitting: true
}
})
})
Expand All @@ -50,7 +51,8 @@ const describeSetSubmitSucceeded = (reducer, expect, { fromJS }) => () => {
foo: {
doesnt: 'matter',
should: 'notchange',
submitSucceeded: true
submitSucceeded: true,
submitting: true
}
})
})
Expand Down
106 changes: 106 additions & 0 deletions src/__tests__/reduxForm.spec.js
Expand Up @@ -10,6 +10,7 @@ import createReducer from '../reducer'
import createReduxForm from '../reduxForm'
import createField from '../Field'
import createFieldArray from '../FieldArray'
import { startSubmit } from '../actions';
import plain from '../structure/plain'
import plainExpectations from '../structure/plain/expectations'
import immutable from '../structure/immutable'
Expand Down Expand Up @@ -2746,6 +2747,111 @@ const describeReduxForm = (name, structure, combineReducers, expect) => {
expect(inputRender.calls.length).toBe(3)
expect(inputRender.calls[ 2 ].arguments[ 0 ].input.value).toBe('fooChanged')
})
it('startSubmit in onSubmit promise', () => {
const store = makeStore({})
class Form extends Component {
render() {
const { handleSubmit } = this.props;
return (
<form onSubmit={handleSubmit}>
<Field name="foo" component="input" type="text"/>
</form>
)
}
}
const resolvedProm = Promise.resolve();
const Decorated = reduxForm({
form: 'testForm',
destroyOnUnmount: false,
onSubmit(data, dispatch) {
dispatch(startSubmit('testForm'));

return resolvedProm;
}
})(Form)

const dom = TestUtils.renderIntoDocument(
<Provider store={store}>
<Decorated/>
</Provider>
);

// unmount form
const stub = TestUtils.findRenderedComponentWithType(dom, Decorated)
stub.submit()


return resolvedProm.then(() => {
// form state not destroyed (just fields unregistered)
expect(store.getState()).toEqualMap({
form: {
testForm: {
anyTouched: true,
fields: {
foo: {
touched: true
}
},
registeredFields: [{
name: 'foo',
type: 'Field'
}],
submitSucceeded: true
}
}
})
})
})
it('startSubmit in onSubmit sync', () => {
const store = makeStore({})
class Form extends Component {
render() {
const { handleSubmit } = this.props
return (
<form onSubmit={handleSubmit}>
<Field name="foo" component="input" type="text"/>
</form>
)
}
}
const Decorated = reduxForm({
form: 'testForm',
destroyOnUnmount: false,
onSubmit(data, dispatch) {
dispatch(startSubmit('testForm'))
}
})(Form)

const dom = TestUtils.renderIntoDocument(
<Provider store={store}>
<Decorated/>
</Provider>
)

// unmount form
const stub = TestUtils.findRenderedComponentWithType(dom, Decorated)
stub.submit()

// form state not destroyed (just fields unregistered)
expect(store.getState()).toEqualMap({
form: {
testForm: {
anyTouched: true,
fields: {
foo: {
touched: true
}
},
registeredFields: [{
name: 'foo',
type: 'Field'
}],
submitting: true,
submitSucceeded: true
}
}
})
})
})
}

Expand Down
1 change: 0 additions & 1 deletion src/reducer.js
Expand Up @@ -298,7 +298,6 @@ const createReducer = structure => {
let result = state
result = deleteIn(result, 'submitFailed')
result = setIn(result, 'submitSucceeded', true)
result = deleteIn(result, 'submitting')
return result
},
[TOUCH](state, { meta: { fields } }) {
Expand Down

0 comments on commit cdb99b7

Please sign in to comment.