add error and failure handling for group and user permission

This commit is contained in:
Maren Süwer
2018-09-25 11:37:33 +02:00
parent ab0f96db6b
commit 5fb36a553d
4 changed files with 79 additions and 40 deletions

View File

@@ -127,7 +127,7 @@ class Permissions extends React.Component<Props> {
{permissions.map(permission => { {permissions.map(permission => {
return ( return (
<SinglePermission <SinglePermission
key={permission.name} key={permission.name + permission.groupPermission.toString()}
namespace={namespace} namespace={namespace}
repoName={repoName} repoName={repoName}
permission={permission} permission={permission}

View File

@@ -140,13 +140,13 @@ const mapStateToProps = (state, ownProps) => {
state, state,
ownProps.namespace, ownProps.namespace,
ownProps.repoName, ownProps.repoName,
permission.name permission
); );
const deleteLoading = isDeletePermissionPending( const deleteLoading = isDeletePermissionPending(
state, state,
ownProps.namespace, ownProps.namespace,
ownProps.repoName, ownProps.repoName,
permission.name permission
); );
return { loading, deleteLoading }; return { loading, deleteLoading };

View File

@@ -162,7 +162,7 @@ export function modifyPermissionPending(
return { return {
type: MODIFY_PERMISSION_PENDING, type: MODIFY_PERMISSION_PENDING,
payload: permission, payload: permission,
itemId: namespace + "/" + repoName + "/" + permission.name itemId: createItemId(permission, namespace, repoName)
}; };
} }
@@ -177,7 +177,7 @@ export function modifyPermissionSuccess(
permission, permission,
position: namespace + "/" + repoName position: namespace + "/" + repoName
}, },
itemId: namespace + "/" + repoName + "/" + permission.name itemId: createItemId(permission, namespace, repoName)
}; };
} }
@@ -190,7 +190,7 @@ export function modifyPermissionFailure(
return { return {
type: MODIFY_PERMISSION_FAILURE, type: MODIFY_PERMISSION_FAILURE,
payload: { error, permission }, payload: { error, permission },
itemId: namespace + "/" + repoName + "/" + permission.name itemId: createItemId(permission, namespace, repoName)
}; };
} }
@@ -342,7 +342,7 @@ export function deletePermissionPending(
return { return {
type: DELETE_PERMISSION_PENDING, type: DELETE_PERMISSION_PENDING,
payload: permission, payload: permission,
itemId: namespace + "/" + repoName + "/" + permission.name itemId: createItemId(permission, namespace, repoName)
}; };
} }
@@ -357,7 +357,7 @@ export function deletePermissionSuccess(
permission, permission,
position: namespace + "/" + repoName position: namespace + "/" + repoName
}, },
itemId: namespace + "/" + repoName + "/" + permission.name itemId: createItemId(permission, namespace, repoName)
}; };
} }
@@ -373,7 +373,7 @@ export function deletePermissionFailure(
error, error,
permission permission
}, },
itemId: namespace + "/" + repoName + "/" + permission.name itemId: createItemId(permission, namespace, repoName)
}; };
} }
@@ -400,6 +400,15 @@ function deletePermissionFromState(
return newPermission; return newPermission;
} }
function createItemId(
permission: Permission,
namespace: string,
repoName: string
) {
let groupPermission = permission.groupPermission ? "@" : "";
return namespace + "/" + repoName + "/" + groupPermission + permission.name;
}
// reducer // reducer
export default function reducer( export default function reducer(
state: Object = {}, state: Object = {},
@@ -493,12 +502,12 @@ export function isModifyPermissionPending(
state: Object, state: Object,
namespace: string, namespace: string,
repoName: string, repoName: string,
permissionname: string permission: Permission
) { ) {
return isPending( return isPending(
state, state,
MODIFY_PERMISSION, MODIFY_PERMISSION,
namespace + "/" + repoName + "/" + permissionname createItemId(permission, namespace, repoName)
); );
} }
@@ -506,12 +515,12 @@ export function getModifyPermissionFailure(
state: Object, state: Object,
namespace: string, namespace: string,
repoName: string, repoName: string,
permissionname: string permission: Permission
) { ) {
return getFailure( return getFailure(
state, state,
MODIFY_PERMISSION, MODIFY_PERMISSION,
namespace + "/" + repoName + "/" + permissionname createItemId(permission, namespace, repoName)
); );
} }
@@ -544,12 +553,12 @@ export function isDeletePermissionPending(
state: Object, state: Object,
namespace: string, namespace: string,
repoName: string, repoName: string,
permissionname: string permission: Permission
) { ) {
return isPending( return isPending(
state, state,
DELETE_PERMISSION, DELETE_PERMISSION,
namespace + "/" + repoName + "/" + permissionname createItemId(permission, namespace, repoName)
); );
} }
@@ -557,12 +566,12 @@ export function getDeletePermissionFailure(
state: Object, state: Object,
namespace: string, namespace: string,
repoName: string, repoName: string,
permissionname: string permission: Permission
) { ) {
return getFailure( return getFailure(
state, state,
DELETE_PERMISSION, DELETE_PERMISSION,
namespace + "/" + repoName + "/" + permissionname createItemId(permission, namespace, repoName)
); );
} }
@@ -578,17 +587,12 @@ export function getDeletePermissionsFailure(
if (permissions == null) return undefined; if (permissions == null) return undefined;
for (let i = 0; i < permissions.length; i++) { for (let i = 0; i < permissions.length; i++) {
if ( if (
getDeletePermissionFailure( getDeletePermissionFailure(state, namespace, repoName, permissions[i])
state,
namespace,
repoName,
permissions[i].name
)
) { ) {
return getFailure( return getFailure(
state, state,
DELETE_PERMISSION, DELETE_PERMISSION,
namespace + "/" + repoName + "/" + permissions[i].name createItemId(permissions[i], namespace, repoName)
); );
} }
} }
@@ -607,17 +611,12 @@ export function getModifyPermissionsFailure(
if (permissions == null) return undefined; if (permissions == null) return undefined;
for (let i = 0; i < permissions.length; i++) { for (let i = 0; i < permissions.length; i++) {
if ( if (
getModifyPermissionFailure( getModifyPermissionFailure(state, namespace, repoName, permissions[i])
state,
namespace,
repoName,
permissions[i].name
)
) { ) {
return getFailure( return getFailure(
state, state,
MODIFY_PERMISSION, MODIFY_PERMISSION,
namespace + "/" + repoName + "/" + permissions[i].name createItemId(permissions[i], namespace, repoName)
); );
} }
} }

View File

@@ -45,7 +45,7 @@ import type { Permission, PermissionCollection } from "@scm-manager/ui-types";
const hitchhiker_puzzle42Permission_user_eins: Permission = { const hitchhiker_puzzle42Permission_user_eins: Permission = {
name: "user_eins", name: "user_eins",
type: "READ", type: "READ",
groupPermission: true, groupPermission: false,
_links: { _links: {
self: { self: {
href: href:
@@ -570,13 +570,23 @@ describe("permissions selectors", () => {
} }
}; };
expect( expect(
isModifyPermissionPending(state, "hitchhiker", "puzzle42", "user_eins") isModifyPermissionPending(
state,
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(true); ).toEqual(true);
}); });
it("should return false, when modify permission is not pending", () => { it("should return false, when modify permission is not pending", () => {
expect( expect(
isModifyPermissionPending({}, "hitchiker", "puzzle42", "user_eins") isModifyPermissionPending(
{},
"hitchiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(false); ).toEqual(false);
}); });
@@ -587,13 +597,23 @@ describe("permissions selectors", () => {
} }
}; };
expect( expect(
getModifyPermissionFailure(state, "hitchhiker", "puzzle42", "user_eins") getModifyPermissionFailure(
state,
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(error); ).toEqual(error);
}); });
it("should return undefined when modify permission did not fail", () => { it("should return undefined when modify permission did not fail", () => {
expect( expect(
getModifyPermissionFailure({}, "hitchhiker", "puzzle42", "user_eins") getModifyPermissionFailure(
{},
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toBe(undefined); ).toBe(undefined);
}); });
@@ -646,13 +666,23 @@ describe("permissions selectors", () => {
} }
}; };
expect( expect(
isDeletePermissionPending(state, "hitchhiker", "puzzle42", "user_eins") isDeletePermissionPending(
state,
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(true); ).toEqual(true);
}); });
it("should return false, when delete permission is not pending", () => { it("should return false, when delete permission is not pending", () => {
expect( expect(
isDeletePermissionPending({}, "hitchiker", "puzzle42", "user_eins") isDeletePermissionPending(
{},
"hitchiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(false); ).toEqual(false);
}); });
@@ -663,13 +693,23 @@ describe("permissions selectors", () => {
} }
}; };
expect( expect(
getDeletePermissionFailure(state, "hitchhiker", "puzzle42", "user_eins") getDeletePermissionFailure(
state,
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(error); ).toEqual(error);
}); });
it("should return undefined when delete permission did not fail", () => { it("should return undefined when delete permission did not fail", () => {
expect( expect(
getDeletePermissionFailure({}, "hitchhiker", "puzzle42", "user_eins") getDeletePermissionFailure(
{},
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toBe(undefined); ).toBe(undefined);
}); });