diff --git a/ee/app/assets/javascripts/protected_environments/store/edit/actions.js b/ee/app/assets/javascripts/protected_environments/store/edit/actions.js index d88a1bc9825af3d505414bc3ddf69b54ab45f4e4..53bc5757a77cf0e2f0b0ff5f251170d91961988b 100644 --- a/ee/app/assets/javascripts/protected_environments/store/edit/actions.js +++ b/ee/app/assets/javascripts/protected_environments/store/edit/actions.js @@ -154,12 +154,16 @@ export const updateApproverInheritance = ({ commit }, { rule, value }) => { export const editRule = ({ commit }, rule) => commit(types.EDIT_RULE, rule); -export const unprotectEnvironment = ({ state, commit }, environment) => { +export const unprotectEnvironment = ({ state, commit, dispatch }, environment) => { commit(types.REQUEST_UPDATE_PROTECTED_ENVIRONMENT); return Api.deleteProtectedEnvironment(state.projectId, environment) .then(() => { commit(types.DELETE_PROTECTED_ENVIRONMENT_SUCCESS, environment); + + if (!state.protectedEnvironments.length && state.pageInfo.page > 1) { + dispatch('setPage', state.pageInfo.page - 1); + } }) .catch((error) => { commit(types.RECEIVE_UPDATE_PROTECTED_ENVIRONMENT_ERROR, error); diff --git a/ee/spec/frontend/protected_environments/store/edit/actions_spec.js b/ee/spec/frontend/protected_environments/store/edit/actions_spec.js index 58d396e28daca95ed67da5f71db5577915951a3e..93774b8f5ea012c82b647ab8574bed5a80ca636e 100644 --- a/ee/spec/frontend/protected_environments/store/edit/actions_spec.js +++ b/ee/spec/frontend/protected_environments/store/edit/actions_spec.js @@ -426,5 +426,38 @@ describe('ee/protected_environments/store/edit/actions', () => { [], ); }); + + it('redirects to previous page after deleting if current page is empty', () => { + const environment = { + name: 'staging', + }; + + mockedState.pageInfo = { + page: 2, + nextPage: null, + previousPage: 1, + perPage: 10, + total: 11, + totalPages: 2, + }; + + mock.onDelete(url, environment).replyOnce(HTTP_STATUS_OK); + + return testAction({ + action: unprotectEnvironment, + payload: environment, + state: mockedState, + expectedMutations: [ + { type: types.REQUEST_UPDATE_PROTECTED_ENVIRONMENT }, + { type: types.DELETE_PROTECTED_ENVIRONMENT_SUCCESS, payload: environment }, + ], + expectedActions: [ + { + type: 'setPage', + payload: 1, + }, + ], + }); + }); }); });