fix(org-plugin): filter group members respecting namespaces

Signed-off-by: Phil Kuang <pkuang@factset.com>
This commit is contained in:
Phil Kuang
2021-03-29 12:52:55 -04:00
parent 7c6e1463b9
commit 87171d57d7
4 changed files with 44 additions and 15 deletions
@@ -72,6 +72,33 @@ describe('MemberTab Test', () => {
memberOf: ['team-d'],
},
},
{
apiVersion: 'backstage.io/v1alpha1',
kind: 'User',
metadata: {
name: 'sara.macgovern',
namespace: 'default',
uid: 'a5gerth57',
},
relations: [
{
type: 'memberOf',
target: {
kind: 'group',
name: 'team-d',
namespace: 'foo-bar',
},
},
],
spec: {
profile: {
displayName: 'Sara MacGovern',
email: 'sara-macgovern@example.com',
picture: 'https://example.com/staff/sara.jpeg',
},
memberOf: ['foo-bar/team-d'],
},
},
] as Entity[],
}),
};
@@ -101,5 +128,7 @@ describe('MemberTab Test', () => {
'href',
'/catalog/foo-bar/user/tara.macgovern',
);
expect(rendered.getByText('Members (1)')).toBeInTheDocument();
});
});
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import {
Entity,
ENTITY_DEFAULT_NAMESPACE,
GroupEntity,
RELATION_MEMBER_OF,
UserEntity,
@@ -59,13 +59,7 @@ const useStyles = makeStyles((theme: Theme) =>
}),
);
const MemberComponent = ({
member,
groupEntity,
}: {
member: UserEntity;
groupEntity: Entity;
}) => {
const MemberComponent = ({ member }: { member: UserEntity }) => {
const classes = useStyles();
const {
metadata: { name: metaName },
@@ -117,13 +111,15 @@ export const MembersListCard = (_props: {
}) => {
const { entity: groupEntity } = useEntity<GroupEntity>();
const {
metadata: { name: groupName },
metadata: { name: groupName, namespace: grpNamespace },
spec: { profile },
} = groupEntity;
const catalogApi = useApi(catalogApiRef);
const displayName = profile?.displayName ?? groupName;
const groupNamespace = grpNamespace || ENTITY_DEFAULT_NAMESPACE;
const { loading, error, value: members } = useAsync(async () => {
const membersList = await catalogApi.getEntities({
filter: { kind: 'User' },
@@ -134,7 +130,9 @@ export const MembersListCard = (_props: {
r =>
r.type === RELATION_MEMBER_OF &&
r.target.name.toLocaleLowerCase('en-US') ===
groupName.toLocaleLowerCase('en-US'),
groupName.toLocaleLowerCase('en-US') &&
r.target.namespace.toLocaleLowerCase('en-US') ===
groupNamespace.toLocaleLowerCase('en-US'),
),
);
return groupMembersList;
@@ -155,11 +153,7 @@ export const MembersListCard = (_props: {
<Grid container spacing={3}>
{members && members.length > 0 ? (
members.map(member => (
<MemberComponent
member={member}
groupEntity={groupEntity}
key={member.metadata.uid}
/>
<MemberComponent member={member} key={member.metadata.uid} />
))
) : (
<Box p={2}>