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'], }); }); });