diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 68c7ae34b4..d98cb77fe0 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -11,7 +11,8 @@ import { createPermission, isCreatePermissionPending, getCreatePermissionFailure, - createPermissionReset + createPermissionReset, + getDeletePermissionsFailure } from "../modules/permissions"; import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; @@ -143,7 +144,7 @@ const mapStateToProps = (state, ownProps) => { const repoName = ownProps.repoName; const error = getFetchPermissionsFailure(state, namespace, repoName) || - getCreatePermissionFailure(state, namespace, repoName); + getCreatePermissionFailure(state, namespace, repoName); //|| getDeletePermissionsFailure(state, namespace, repoName); const loading = isFetchPermissionsPending(state, namespace, repoName); const permissions = getPermissionsOfRepo(state, namespace, repoName); const loadingCreatePermission = isCreatePermissionPending( diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 1460228bff..47cb2a8746 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -558,3 +558,32 @@ export function getDeletePermissionFailure( namespace + "/" + repoName + "/" + permissionname ); } + +export function getDeletePermissionsFailure( + state: Object, + namespace: string, + repoName: string +) { + const permissions = + state.permissions && state.permissions[namespace + "/" + repoName] + ? state.permissions[namespace + "/" + repoName].entries + : null; + if (permissions == null) return undefined; + for (let i = 0; i < permissions.length; i++) { + if ( + getDeletePermissionFailure( + state, + namespace, + repoName, + permissions[i].name + ) + ) { + return getFailure( + state, + DELETE_PERMISSION, + namespace + "/" + repoName + "/" + permissions[i].name + ); + } + } + return null; +} diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 0d12b58346..9247b0c4be 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -36,7 +36,8 @@ import reducer, { CREATE_PERMISSION, createPermissionSuccess, getCreatePermissionFailure, - isCreatePermissionPending + isCreatePermissionPending, + getDeletePermissionsFailure } from "./permissions"; import type { Permission, PermissionCollection } from "../types/Permissions"; @@ -644,6 +645,26 @@ describe("permissions selectors", () => { ).toBe(undefined); }); + it("should return error when one of the delete permissions did fail", () => { + const state = { + permissions: { + "hitchhiker/puzzle42": { entries: hitchhiker_puzzle42Permissions } + }, + failure: { + [DELETE_PERMISSION + "/hitchhiker/puzzle42/user_eins"]: error + } + }; + expect( + getDeletePermissionsFailure(state, "hitchhiker", "puzzle42") + ).toEqual(error); + }); + + it("should return undefined when no delete permissions did not fail", () => { + expect(getDeletePermissionsFailure({}, "hitchhiker", "puzzle42")).toBe( + undefined + ); + }); + it("should return true, when create permission is pending", () => { const state = { pending: {