diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts index 92acd9e3ce..da84103e86 100644 --- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts +++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts @@ -1124,7 +1124,6 @@ describe('DefaultEntitiesCatalog', () => { const request: QueryEntitiesInitialRequest = { filter, limit: 100, - orderFields: [{ field: 'metadata.name', order: 'asc' }], fullTextFilter: { term: 'cAt ' }, credentials: mockCredentials.none(), @@ -1141,6 +1140,60 @@ describe('DefaultEntitiesCatalog', () => { }, ); + it.each(databases.eachSupportedId())( + 'should filter the results when query is provided with fullTextFilter for camelCase fields, %p', + async databaseId => { + await createDatabase(databaseId); + + const entities: Entity[] = [ + { + apiVersion: 'a', + kind: 'k', + metadata: { + name: 'camelCase', + }, + spec: { + shouldSearchCamelCase: 'searched', + }, + }, + ]; + + const notFoundEntities: Entity[] = [ + { + apiVersion: 'a', + kind: 'k', + metadata: { name: 'something' }, + spec: {}, + }, + ]; + + await Promise.all( + entities.concat(notFoundEntities).map(e => addEntityToSearch(e)), + ); + + const catalog = new DefaultEntitiesCatalog({ + database: knex, + logger: mockServices.logger.mock(), + stitcher, + }); + + const request: QueryEntitiesInitialRequest = { + limit: 100, + orderFields: [{ field: 'metadata.name', order: 'asc' }], + fullTextFilter: { + term: 'sear', + fields: ['spec.shouldSearchCamelCase'], + }, + credentials: mockCredentials.none(), + }; + const response = await catalog.queryEntities(request); + expect(response.items).toEqual(entities); + expect(response.pageInfo.nextCursor).toBeUndefined(); + expect(response.pageInfo.prevCursor).toBeUndefined(); + expect(response.totalItems).toBe(1); + }, + ); + it.each(databases.eachSupportedId())( 'should filter the text results when sortOrder is not provided, %p', async databaseId => { diff --git a/plugins/catalog-react/src/filters.test.ts b/plugins/catalog-react/src/filters.test.ts index 8ddac7e53b..332f4c22c1 100644 --- a/plugins/catalog-react/src/filters.test.ts +++ b/plugins/catalog-react/src/filters.test.ts @@ -41,6 +41,18 @@ const entities: Entity[] = [ tags: ['gRPC', 'java'], }, }, + { + apiVersion: '1', + kind: 'User', + metadata: { + name: 'user', + }, + spec: { + profile: { + displayName: 'John Doe', + }, + }, + }, ]; const templates: TemplateEntityV1beta3[] = [ @@ -79,6 +91,13 @@ describe('EntityTextFilter', () => { expect(filter.filterEntity(entities[1])).toBeFalsy(); }); + it('should search displayName', () => { + const filter = new EntityTextFilter('John D'); + expect(filter.filterEntity(entities[0])).toBeFalsy(); + expect(filter.filterEntity(entities[1])).toBeFalsy(); + expect(filter.filterEntity(entities[2])).toBeTruthy(); + }); + it('should search template title', () => { const filter = new EntityTextFilter('spring'); expect(filter.filterEntity(templates[0])).toBeFalsy();