Commit c5aeddee authored by Ezekiel Kigbo's avatar Ezekiel Kigbo Committed by Mike Greiling

Check for 422 error when editing stage

parent 8c3ea04a
...@@ -259,9 +259,23 @@ export const receiveUpdateStageSuccess = ({ commit, dispatch }, updatedData) => ...@@ -259,9 +259,23 @@ export const receiveUpdateStageSuccess = ({ commit, dispatch }, updatedData) =>
dispatch('setSelectedStage', updatedData); dispatch('setSelectedStage', updatedData);
}; };
export const receiveUpdateStageError = ({ commit }) => { export const receiveUpdateStageError = (
{ commit },
{ error: { response: { status = 400, data: errorData } = {} } = {}, data },
) => {
commit(types.RECEIVE_UPDATE_STAGE_RESPONSE); commit(types.RECEIVE_UPDATE_STAGE_RESPONSE);
createFlash(__('There was a problem saving your custom stage, please try again')); const ERROR_NAME_RESERVED = 'is reserved';
let message = __('There was a problem saving your custom stage, please try again');
if (status && status === httpStatus.UNPROCESSABLE_ENTITY) {
const { errors } = errorData;
const { name } = data;
if (errors.name && errors.name[0] === ERROR_NAME_RESERVED) {
message = __(`'${name}' stage already exists`);
}
}
createFlash(__(message));
}; };
export const updateStage = ({ dispatch, state }, { id, ...rest }) => { export const updateStage = ({ dispatch, state }, { id, ...rest }) => {
...@@ -273,7 +287,7 @@ export const updateStage = ({ dispatch, state }, { id, ...rest }) => { ...@@ -273,7 +287,7 @@ export const updateStage = ({ dispatch, state }, { id, ...rest }) => {
return Api.cycleAnalyticsUpdateStage(id, fullPath, { ...rest }) return Api.cycleAnalyticsUpdateStage(id, fullPath, { ...rest })
.then(({ data }) => dispatch('receiveUpdateStageSuccess', data)) .then(({ data }) => dispatch('receiveUpdateStageSuccess', data))
.catch(error => dispatch('receiveUpdateStageError', error)); .catch(error => dispatch('receiveUpdateStageError', { error, data: { id, ...rest } }));
}; };
export const requestRemoveStage = ({ commit }) => commit(types.REQUEST_REMOVE_STAGE); export const requestRemoveStage = ({ commit }) => commit(types.REQUEST_REMOVE_STAGE);
......
...@@ -399,6 +399,14 @@ describe 'Group Cycle Analytics', :js do ...@@ -399,6 +399,14 @@ describe 'Group Cycle Analytics', :js do
expect(page.find(stage_save_button)[:disabled]).to eq "true" expect(page.find(stage_save_button)[:disabled]).to eq "true"
end end
it 'with a default name' do
name = 'issue'
fill_in name_field, with: name
page.find(stage_save_button).click
expect(page.find('.flash-alert')).to have_text("'#{name}' stage already exists")
end
end end
end end
......
...@@ -562,25 +562,51 @@ describe('Cycle analytics actions', () => { ...@@ -562,25 +562,51 @@ describe('Cycle analytics actions', () => {
}); });
it('dispatches receiveUpdateStageError', done => { it('dispatches receiveUpdateStageError', done => {
const data = {
id: stageId,
...payload,
};
testAction( testAction(
actions.updateStage, actions.updateStage,
{ data,
id: stageId,
...payload,
},
state, state,
[], [],
[ [
{ type: 'requestUpdateStage' }, { type: 'requestUpdateStage' },
{ {
type: 'receiveUpdateStageError', type: 'receiveUpdateStageError',
payload: error, payload: { error, data },
}, },
], ],
done, done,
); );
}); });
it('flashes an error if the stage name already exists', done => {
actions.receiveUpdateStageError(
{
commit: () => {},
state,
},
{
error: {
response: {
status: 422,
data: {
errors: { name: ['is reserved'] },
},
},
},
data: {
name: stageId,
},
},
);
shouldFlashAMessage(`'${stageId}' stage already exists`);
done();
});
it('flashes an error message', done => { it('flashes an error message', done => {
actions.receiveUpdateStageError( actions.receiveUpdateStageError(
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment