diff --git a/plugins/org/src/components/MyGroupsSidebarItem/MyGroupsSidebarItem.test.tsx b/plugins/org/src/components/MyGroupsSidebarItem/MyGroupsSidebarItem.test.tsx
index de46be98be..092f020c6b 100644
--- a/plugins/org/src/components/MyGroupsSidebarItem/MyGroupsSidebarItem.test.tsx
+++ b/plugins/org/src/components/MyGroupsSidebarItem/MyGroupsSidebarItem.test.tsx
@@ -78,6 +78,9 @@ describe('MyGroupsSidebarItem Test', () => {
spec: {
type: 'team',
children: [],
+ profile: {
+ displayName: 'Team A',
+ },
},
},
] as Entity[],
@@ -111,7 +114,94 @@ describe('MyGroupsSidebarItem Test', () => {
});
describe('For users that are members of multiple groups', () => {
- it('MyGroupsSidebarItem should display a sub-menu with all their groups and a link to each group', async () => {
+ it('MyGroupsSidebarItem should display a sub-menu with all their groups, with displaying the title through displayName, and a link to each group', async () => {
+ const identityApi = mockApis.identity({
+ userEntityRef: 'user:default/nigel.manning',
+ ownershipEntityRefs: ['user:default/nigel.manning'],
+ });
+ const catalogApi = catalogApiMock.mock({
+ getEntities: async () => ({
+ items: [
+ {
+ apiVersion: 'backstage.io/v1alpha1',
+ kind: 'Group',
+ metadata: {
+ name: 'team-a',
+ title: 'Team A',
+ namespace: 'default',
+ },
+ spec: {
+ type: 'team',
+ children: [],
+ profile: {
+ displayName: 'Team A',
+ },
+ },
+ },
+ {
+ apiVersion: 'backstage.io/v1alpha1',
+ kind: 'Group',
+ metadata: {
+ name: 'team-b',
+ title: 'Team B',
+ namespace: 'default',
+ },
+ spec: {
+ type: 'team',
+ children: [],
+ profile: {
+ displayName: 'Team B',
+ },
+ },
+ },
+ {
+ apiVersion: 'backstage.io/v1alpha1',
+ kind: 'Group',
+ metadata: {
+ name: 'team-c',
+ title: 'Team C',
+ namespace: 'default',
+ },
+ spec: {
+ type: 'team',
+ children: [],
+ profile: {
+ displayName: 'Team C',
+ },
+ },
+ },
+ ] as Entity[],
+ }),
+ });
+ const rendered = await renderInTestApp(
+
+
+ ,
+ {
+ mountedRoutes: {
+ '/catalog/:namespace/:kind/:name': entityRouteRef,
+ },
+ },
+ );
+
+ expect(rendered.getByLabelText('My Squads')).toBeInTheDocument();
+ expect(rendered.getByLabelText('Team B')).toBeInTheDocument();
+ expect(rendered.getByLabelText('Team C')).toHaveAttribute(
+ 'href',
+ '/catalog/default/Group/team-c',
+ );
+ });
+
+ it('MyGroupsSidebarItem should display the metadata name when the displayName property is not available in the entity', async () => {
const identityApi = mockApis.identity({
userEntityRef: 'user:default/nigel.manning',
ownershipEntityRefs: ['user:default/nigel.manning'],
@@ -180,86 +270,87 @@ describe('MyGroupsSidebarItem Test', () => {
},
},
);
-
- expect(rendered.getByLabelText('My Squads')).toBeInTheDocument();
- });
- });
-
- describe('When an additional filter is not provided', () => {
- it('catalogApi.getEntities() should be called with the default filter', async () => {
- const identityApi = mockApis.identity({
- userEntityRef: 'user:default/guest',
- ownershipEntityRefs: ['user:default/guest'],
- });
- const mockCatalogApi = catalogApiMock.mock();
- await renderInTestApp(
-
-
- ,
- {
- mountedRoutes: {
- '/catalog/:namespace/:kind/:name': entityRouteRef,
- },
- },
- );
- expect(mockCatalogApi.getEntities).toHaveBeenCalledWith({
- filter: [
- {
- kind: 'group',
- 'relations.hasMember': 'user:default/guest',
- },
- ],
- fields: ['metadata', 'kind'],
- });
- });
- });
-
- describe('When an additional filter is provided', () => {
- it('catalogApi.getEntities() should be called with an additional filter item', async () => {
- const identityApi = mockApis.identity({
- userEntityRef: 'user:default/guest',
- ownershipEntityRefs: ['user:default/guest'],
- });
- const mockCatalogApi = catalogApiMock.mock();
- await renderInTestApp(
-
-
- ,
- {
- mountedRoutes: {
- '/catalog/:namespace/:kind/:name': entityRouteRef,
- },
- },
- );
- expect(mockCatalogApi.getEntities).toHaveBeenCalledWith({
- filter: [
- {
- kind: 'group',
- 'relations.hasMember': 'user:default/guest',
- 'spec.type': 'team',
- },
- ],
- fields: ['metadata', 'kind'],
- });
+ expect(rendered.getByLabelText('Team-a')).toBeInTheDocument();
+ expect(rendered.getByLabelText('Team-b')).toBeInTheDocument();
+ expect(rendered.getByLabelText('Team-c')).toBeInTheDocument();
+ });
+ });
+});
+
+describe('When an additional filter is not provided', () => {
+ it('catalogApi.getEntities() should be called with the default filter', async () => {
+ const identityApi = mockApis.identity({
+ userEntityRef: 'user:default/guest',
+ ownershipEntityRefs: ['user:default/guest'],
+ });
+ const mockCatalogApi = catalogApiMock.mock();
+ await renderInTestApp(
+
+
+ ,
+ {
+ mountedRoutes: {
+ '/catalog/:namespace/:kind/:name': entityRouteRef,
+ },
+ },
+ );
+ expect(mockCatalogApi.getEntities).toHaveBeenCalledWith({
+ filter: [
+ {
+ kind: 'group',
+ 'relations.hasMember': 'user:default/guest',
+ },
+ ],
+ fields: ['metadata', 'kind'],
+ });
+ });
+});
+
+describe('When an additional filter is provided', () => {
+ it('catalogApi.getEntities() should be called with an additional filter item', async () => {
+ const identityApi = mockApis.identity({
+ userEntityRef: 'user:default/guest',
+ ownershipEntityRefs: ['user:default/guest'],
+ });
+ const mockCatalogApi = catalogApiMock.mock();
+ await renderInTestApp(
+
+
+ ,
+ {
+ mountedRoutes: {
+ '/catalog/:namespace/:kind/:name': entityRouteRef,
+ },
+ },
+ );
+ expect(mockCatalogApi.getEntities).toHaveBeenCalledWith({
+ filter: [
+ {
+ kind: 'group',
+ 'relations.hasMember': 'user:default/guest',
+ 'spec.type': 'team',
+ },
+ ],
+ fields: ['metadata', 'kind'],
});
});
});