diff --git a/.changeset/eleven-ghosts-strive.md b/.changeset/eleven-ghosts-strive.md new file mode 100644 index 0000000000..ac48c19524 --- /dev/null +++ b/.changeset/eleven-ghosts-strive.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Full support in EntityPicker (and derivatives) for default EntityPresentationApi diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx index 6a379f8380..2098e3e07d 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx @@ -95,10 +95,13 @@ describe('', () => { expect(catalogApi.getEntities).toHaveBeenCalledWith({ fields: [ + 'kind', 'metadata.name', 'metadata.namespace', 'metadata.title', - 'kind', + 'metadata.description', + 'spec.profile.displayName', + 'spec.type', ], filter: undefined, }); @@ -422,6 +425,82 @@ describe('', () => { expect(onChange).toHaveBeenCalledWith('group:default/team-b'); }); }); + describe('entity presentation', () => { + beforeEach(() => { + uiSchema = { + 'ui:options': { + defaultKind: 'Group', + }, + }; + props = { + onChange, + schema, + required, + uiSchema, + rawErrors, + formData, + } as unknown as FieldProps; + }); + + it('renders selection displayName', async () => { + catalogApi.getEntities.mockResolvedValue({ + items: entities.map(item => ({ + ...item, + spec: { + profile: { displayName: item.metadata.name.replace('-', ' ') }, + }, + })), + }); + + const { getByRole, getByText } = await renderInTestApp( + + + , + ); + + const input = getByRole('textbox'); + + fireEvent.change(input, { target: { value: 't' } }); + + expect(getByText('team a')).toBeInTheDocument(); + + fireEvent.change(input, { target: { value: 's' } }); + + expect(getByText('squad b')).toBeInTheDocument(); + + fireEvent.blur(input); + }); + + it('renders selection title', async () => { + catalogApi.getEntities.mockResolvedValue({ + items: entities.map(item => ({ + ...item, + metadata: { + ...item.metadata, + title: item.metadata.name.replace('-', ' ').toUpperCase(), + }, + })), + }); + + const { getByRole, getByText } = await renderInTestApp( + + + , + ); + + const input = getByRole('textbox'); + + fireEvent.change(input, { target: { value: 't' } }); + + expect(getByText('TEAM A')).toBeInTheDocument(); + + fireEvent.change(input, { target: { value: 's' } }); + + expect(getByText('SQUAD B')).toBeInTheDocument(); + + fireEvent.blur(input); + }); + }); describe('Required EntityPicker', () => { beforeEach(() => { diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index b15c197945..26f88ea85d 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -81,10 +81,13 @@ export const EntityPicker = (props: EntityPickerProps) => { const { value: entities, loading } = useAsync(async () => { const fields = [ + 'kind', 'metadata.name', 'metadata.namespace', 'metadata.title', - 'kind', + 'metadata.description', + 'spec.profile.displayName', + 'spec.type', ]; const { items } = await catalogApi.getEntities( catalogFilter diff --git a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx index af75408754..3abe1c9353 100644 --- a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx @@ -105,10 +105,13 @@ describe('', () => { kind: ['Group', 'User'], }, fields: [ + 'kind', 'metadata.name', 'metadata.namespace', 'metadata.title', - 'kind', + 'metadata.description', + 'spec.profile.displayName', + 'spec.type', ], }), ); @@ -208,10 +211,13 @@ describe('', () => { kind: ['User'], }, fields: [ + 'kind', 'metadata.name', 'metadata.namespace', 'metadata.title', - 'kind', + 'metadata.description', + 'spec.profile.displayName', + 'spec.type', ], }), );