diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index 404c980128..a671a155d3 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -249,11 +249,8 @@ export class CatalogClient implements CatalogApi { } filterPredicate = query; if (filter !== undefined) { - const filterValue = this.getFilterValue(filter); - if (filterValue && Object.keys(filterValue).length > 0) { - const converted = convertFilterToPredicate(filter); - filterPredicate = { $all: [filterPredicate, converted] }; - } + const converted = convertFilterToPredicate(filter); + filterPredicate = { $all: [filterPredicate, converted] }; } } diff --git a/plugins/catalog-backend/src/service/createRouter.test.ts b/plugins/catalog-backend/src/service/createRouter.test.ts index 62856ba7e4..1984f2f04f 100644 --- a/plugins/catalog-backend/src/service/createRouter.test.ts +++ b/plugins/catalog-backend/src/service/createRouter.test.ts @@ -759,6 +759,37 @@ describe('createRouter readonly disabled', () => { expect(response.body).toEqual({ items: [entity] }); }); + it('forwards both filter query param and body query predicate independently', async () => { + const entity: Entity = { + apiVersion: 'a', + kind: 'component', + metadata: { + name: 'a', + }, + }; + const entityRef = stringifyEntityRef(entity); + entitiesCatalog.entitiesBatch.mockResolvedValue({ + items: { type: 'object', entities: [entity] }, + }); + const response = await request(app) + .post('/entities/by-refs?filter=kind=Component') + .set('Content-Type', 'application/json') + .send( + JSON.stringify({ + entityRefs: [entityRef], + query: { 'metadata.namespace': 'default' }, + }), + ); + expect(entitiesCatalog.entitiesBatch).toHaveBeenCalledWith({ + entityRefs: [entityRef], + fields: undefined, + credentials: mockCredentials.user(), + filter: { key: 'kind', values: ['Component'] }, + query: { 'metadata.namespace': 'default' }, + }); + expect(response.status).toEqual(200); + }); + it('rejects invalid query predicate', async () => { const response = await request(app) .post('/entities/by-refs')