Merge pull request #22596 from Vity01/entitypicker-fields-limitation

Fields limitation for EntityPicker
This commit is contained in:
Ben Lambert
2024-01-30 14:32:51 +01:00
committed by GitHub
4 changed files with 100 additions and 69 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': minor
---
Updating the `EntityPicker` to only select `kind` `metadata.name` and `metadata.namespace` by default to improve performance on larger datasets.
@@ -89,7 +89,10 @@ describe('<EntityPicker />', () => {
</Wrapper>,
);
expect(catalogApi.getEntities).toHaveBeenCalledWith(undefined);
expect(catalogApi.getEntities).toHaveBeenCalledWith({
fields: ['metadata.name', 'metadata.namespace', 'kind'],
filter: undefined,
});
});
it('updates even if there is not an exact match', async () => {
@@ -130,11 +133,13 @@ describe('<EntityPicker />', () => {
</Wrapper>,
);
expect(catalogApi.getEntities).toHaveBeenCalledWith({
filter: {
kind: ['User'],
},
});
expect(catalogApi.getEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: {
kind: ['User'],
},
}),
);
});
});
@@ -173,18 +178,20 @@ describe('<EntityPicker />', () => {
</Wrapper>,
);
expect(catalogApi.getEntities).toHaveBeenCalledWith({
filter: [
{
kind: ['Group'],
'metadata.name': 'test-entity',
},
{
kind: ['User'],
'metadata.name': 'test-entity',
},
],
});
expect(catalogApi.getEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: [
{
kind: ['Group'],
'metadata.name': 'test-entity',
},
{
kind: ['User'],
'metadata.name': 'test-entity',
},
],
}),
);
});
it('allow single top level filter', async () => {
uiSchema = {
@@ -204,12 +211,14 @@ describe('<EntityPicker />', () => {
</Wrapper>,
);
expect(catalogApi.getEntities).toHaveBeenCalledWith({
filter: {
kind: ['Group'],
'metadata.name': 'test-entity',
},
});
expect(catalogApi.getEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: {
kind: ['Group'],
'metadata.name': 'test-entity',
},
}),
);
});
it('search for entitities containing an specific key', async () => {
@@ -230,14 +239,16 @@ describe('<EntityPicker />', () => {
</Wrapper>,
);
expect(catalogApi.getEntities).toHaveBeenCalledWith({
filter: [
{
kind: ['User'],
'metadata.annotation.some/anotation': CATALOG_FILTER_EXISTS,
},
],
});
expect(catalogApi.getEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: [
{
kind: ['User'],
'metadata.annotation.some/anotation': CATALOG_FILTER_EXISTS,
},
],
}),
);
});
});
@@ -273,14 +284,16 @@ describe('<EntityPicker />', () => {
</Wrapper>,
);
expect(catalogApi.getEntities).toHaveBeenCalledWith({
filter: [
{
kind: ['Group'],
'metadata.name': 'test-group',
},
],
});
expect(catalogApi.getEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: [
{
kind: ['Group'],
'metadata.name': 'test-group',
},
],
}),
);
});
});
@@ -67,8 +67,11 @@ export const EntityPicker = (props: EntityPickerProps) => {
const catalogApi = useApi(catalogApiRef);
const { value: entities, loading } = useAsync(async () => {
const fields = ['metadata.name', 'metadata.namespace', 'kind'];
const { items } = await catalogApi.getEntities(
catalogFilter ? { filter: catalogFilter } : undefined,
catalogFilter
? { filter: catalogFilter, fields }
: { filter: undefined, fields },
);
return items;
});
@@ -94,11 +94,14 @@ describe('<OwnerPicker />', () => {
</Wrapper>,
);
expect(catalogApi.getEntities).toHaveBeenCalledWith({
filter: {
kind: ['Group', 'User'],
},
});
expect(catalogApi.getEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: {
kind: ['Group', 'User'],
},
fields: ['metadata.name', 'metadata.namespace', 'kind'],
}),
);
});
});
@@ -124,11 +127,14 @@ describe('<OwnerPicker />', () => {
</Wrapper>,
);
expect(catalogApi.getEntities).toHaveBeenCalledWith({
filter: {
kind: ['User'],
},
});
expect(catalogApi.getEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: {
kind: ['User'],
},
fields: ['metadata.name', 'metadata.namespace', 'kind'],
}),
);
});
});
@@ -163,14 +169,16 @@ describe('<OwnerPicker />', () => {
</Wrapper>,
);
expect(catalogApi.getEntities).toHaveBeenCalledWith({
filter: [
{
kind: ['Group'],
'spec.type': 'team',
},
],
});
expect(catalogApi.getEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: [
{
kind: ['Group'],
'spec.type': 'team',
},
],
}),
);
});
});
@@ -208,16 +216,18 @@ describe('<OwnerPicker />', () => {
</Wrapper>,
);
expect(catalogApi.getEntities).toHaveBeenCalledWith({
filter: [
{
kind: ['Group', 'User'],
},
{
'spec.type': ['team', 'business-unit'],
},
],
});
expect(catalogApi.getEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: [
{
kind: ['Group', 'User'],
},
{
'spec.type': ['team', 'business-unit'],
},
],
}),
);
});
});
});