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 => {
return (
<SinglePermission
key={permission.name}
key={permission.name + permission.groupPermission.toString()}
namespace={namespace}
repoName={repoName}
permission={permission}

View File

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

View File

@@ -162,7 +162,7 @@ export function modifyPermissionPending(
return {
type: MODIFY_PERMISSION_PENDING,
payload: permission,
itemId: namespace + "/" + repoName + "/" + permission.name
itemId: createItemId(permission, namespace, repoName)
};
}
@@ -177,7 +177,7 @@ export function modifyPermissionSuccess(
permission,
position: namespace + "/" + repoName
},
itemId: namespace + "/" + repoName + "/" + permission.name
itemId: createItemId(permission, namespace, repoName)
};
}
@@ -190,7 +190,7 @@ export function modifyPermissionFailure(
return {
type: MODIFY_PERMISSION_FAILURE,
payload: { error, permission },
itemId: namespace + "/" + repoName + "/" + permission.name
itemId: createItemId(permission, namespace, repoName)
};
}
@@ -342,7 +342,7 @@ export function deletePermissionPending(
return {
type: DELETE_PERMISSION_PENDING,
payload: permission,
itemId: namespace + "/" + repoName + "/" + permission.name
itemId: createItemId(permission, namespace, repoName)
};
}
@@ -357,7 +357,7 @@ export function deletePermissionSuccess(
permission,
position: namespace + "/" + repoName
},
itemId: namespace + "/" + repoName + "/" + permission.name
itemId: createItemId(permission, namespace, repoName)
};
}
@@ -373,7 +373,7 @@ export function deletePermissionFailure(
error,
permission
},
itemId: namespace + "/" + repoName + "/" + permission.name
itemId: createItemId(permission, namespace, repoName)
};
}
@@ -400,6 +400,15 @@ function deletePermissionFromState(
return newPermission;
}
function createItemId(
permission: Permission,
namespace: string,
repoName: string
) {
let groupPermission = permission.groupPermission ? "@" : "";
return namespace + "/" + repoName + "/" + groupPermission + permission.name;
}
// reducer
export default function reducer(
state: Object = {},
@@ -493,12 +502,12 @@ export function isModifyPermissionPending(
state: Object,
namespace: string,
repoName: string,
permissionname: string
permission: Permission
) {
return isPending(
state,
MODIFY_PERMISSION,
namespace + "/" + repoName + "/" + permissionname
createItemId(permission, namespace, repoName)
);
}
@@ -506,12 +515,12 @@ export function getModifyPermissionFailure(
state: Object,
namespace: string,
repoName: string,
permissionname: string
permission: Permission
) {
return getFailure(
state,
MODIFY_PERMISSION,
namespace + "/" + repoName + "/" + permissionname
createItemId(permission, namespace, repoName)
);
}
@@ -544,12 +553,12 @@ export function isDeletePermissionPending(
state: Object,
namespace: string,
repoName: string,
permissionname: string
permission: Permission
) {
return isPending(
state,
DELETE_PERMISSION,
namespace + "/" + repoName + "/" + permissionname
createItemId(permission, namespace, repoName)
);
}
@@ -557,12 +566,12 @@ export function getDeletePermissionFailure(
state: Object,
namespace: string,
repoName: string,
permissionname: string
permission: Permission
) {
return getFailure(
state,
DELETE_PERMISSION,
namespace + "/" + repoName + "/" + permissionname
createItemId(permission, namespace, repoName)
);
}
@@ -578,17 +587,12 @@ export function getDeletePermissionsFailure(
if (permissions == null) return undefined;
for (let i = 0; i < permissions.length; i++) {
if (
getDeletePermissionFailure(
state,
namespace,
repoName,
permissions[i].name
)
getDeletePermissionFailure(state, namespace, repoName, permissions[i])
) {
return getFailure(
state,
DELETE_PERMISSION,
namespace + "/" + repoName + "/" + permissions[i].name
createItemId(permissions[i], namespace, repoName)
);
}
}
@@ -607,17 +611,12 @@ export function getModifyPermissionsFailure(
if (permissions == null) return undefined;
for (let i = 0; i < permissions.length; i++) {
if (
getModifyPermissionFailure(
state,
namespace,
repoName,
permissions[i].name
)
getModifyPermissionFailure(state, namespace, repoName, permissions[i])
) {
return getFailure(
state,
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 = {
name: "user_eins",
type: "READ",
groupPermission: true,
groupPermission: false,
_links: {
self: {
href:
@@ -570,13 +570,23 @@ describe("permissions selectors", () => {
}
};
expect(
isModifyPermissionPending(state, "hitchhiker", "puzzle42", "user_eins")
isModifyPermissionPending(
state,
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(true);
});
it("should return false, when modify permission is not pending", () => {
expect(
isModifyPermissionPending({}, "hitchiker", "puzzle42", "user_eins")
isModifyPermissionPending(
{},
"hitchiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(false);
});
@@ -587,13 +597,23 @@ describe("permissions selectors", () => {
}
};
expect(
getModifyPermissionFailure(state, "hitchhiker", "puzzle42", "user_eins")
getModifyPermissionFailure(
state,
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(error);
});
it("should return undefined when modify permission did not fail", () => {
expect(
getModifyPermissionFailure({}, "hitchhiker", "puzzle42", "user_eins")
getModifyPermissionFailure(
{},
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toBe(undefined);
});
@@ -646,13 +666,23 @@ describe("permissions selectors", () => {
}
};
expect(
isDeletePermissionPending(state, "hitchhiker", "puzzle42", "user_eins")
isDeletePermissionPending(
state,
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(true);
});
it("should return false, when delete permission is not pending", () => {
expect(
isDeletePermissionPending({}, "hitchiker", "puzzle42", "user_eins")
isDeletePermissionPending(
{},
"hitchiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(false);
});
@@ -663,13 +693,23 @@ describe("permissions selectors", () => {
}
};
expect(
getDeletePermissionFailure(state, "hitchhiker", "puzzle42", "user_eins")
getDeletePermissionFailure(
state,
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toEqual(error);
});
it("should return undefined when delete permission did not fail", () => {
expect(
getDeletePermissionFailure({}, "hitchhiker", "puzzle42", "user_eins")
getDeletePermissionFailure(
{},
"hitchhiker",
"puzzle42",
hitchhiker_puzzle42Permission_user_eins
)
).toBe(undefined);
});