From 70634527d96ce7991ab515e946dd65a4fd12ec6b Mon Sep 17 00:00:00 2001 From: adcoelho Date: Mon, 12 Dec 2022 10:57:21 +0100 Subject: [PATCH 1/6] Update mapping of case title to include keyword. --- x-pack/plugins/cases/server/client/utils.ts | 3 +++ x-pack/plugins/cases/server/saved_object_types/cases.ts | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/x-pack/plugins/cases/server/client/utils.ts b/x-pack/plugins/cases/server/client/utils.ts index eff291e32bfa3..1a3f88cd37cb5 100644 --- a/x-pack/plugins/cases/server/client/utils.ts +++ b/x-pack/plugins/cases/server/client/utils.ts @@ -494,6 +494,7 @@ enum SortFieldCase { closedAt = 'closed_at', createdAt = 'created_at', status = 'status', + title = 'title.keyword', } export const sortToSnake = (sortField: string | undefined): SortFieldCase => { @@ -506,6 +507,8 @@ export const sortToSnake = (sortField: string | undefined): SortFieldCase => { case 'closedAt': case 'closed_at': return SortFieldCase.closedAt; + case 'title': + return SortFieldCase.title; default: return SortFieldCase.createdAt; } diff --git a/x-pack/plugins/cases/server/saved_object_types/cases.ts b/x-pack/plugins/cases/server/saved_object_types/cases.ts index e0b9ab1cbafda..fb00f7844ec89 100644 --- a/x-pack/plugins/cases/server/saved_object_types/cases.ts +++ b/x-pack/plugins/cases/server/saved_object_types/cases.ts @@ -138,6 +138,12 @@ export const createCaseSavedObjectType = ( }, title: { type: 'text', + fields: { + keyword: { + type: 'keyword', + ignore_above: 160, + }, + }, }, status: { type: 'keyword', From f4a144f4c20578bfbe35a3d2e1deeaf666d5e5cf Mon Sep 17 00:00:00 2001 From: adcoelho Date: Mon, 12 Dec 2022 11:25:28 +0100 Subject: [PATCH 2/6] Add integration test for sorting by title in the cases find api. --- .../tests/common/cases/find_cases.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/find_cases.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/find_cases.ts index 3c076d4e35142..916e3c389232e 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/find_cases.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/find_cases.ts @@ -278,6 +278,24 @@ export default ({ getService }: FtrProviderContext): void => { } }); + it('sorts by title', async () => { + const case3 = await createCase(supertest, { ...postCaseReq, title: 'c' }); + const case2 = await createCase(supertest, { ...postCaseReq, title: 'b' }); + const case1 = await createCase(supertest, { ...postCaseReq, title: 'a' }); + + const cases = await findCases({ + supertest, + query: { sortField: 'title', sortOrder: 'asc' }, + }); + + expect(cases).to.eql({ + ...findCasesResp, + total: 3, + cases: [case1, case2, case3], + count_open_cases: 3, + }); + }); + it('unhappy path - 400s when bad query supplied', async () => { await findCases({ supertest, query: { perPage: true }, expectedHttpCode: 400 }); }); From fa9f090c8466f8f6bec99d95ac7076f95fafbaa0 Mon Sep 17 00:00:00 2001 From: adcoelho Date: Mon, 12 Dec 2022 12:00:22 +0100 Subject: [PATCH 3/6] Update sortToSnake tests to check new field. --- x-pack/plugins/cases/server/client/utils.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/x-pack/plugins/cases/server/client/utils.test.ts b/x-pack/plugins/cases/server/client/utils.test.ts index 3e46e9dbae0e7..68009b329845a 100644 --- a/x-pack/plugins/cases/server/client/utils.test.ts +++ b/x-pack/plugins/cases/server/client/utils.test.ts @@ -38,6 +38,10 @@ describe('utils', () => { expect(sortToSnake('closed_at')).toBe('closed_at'); }); + it('transforms title correctly', () => { + expect(sortToSnake('title')).toBe('title.keyword'); + }); + it('transforms default correctly', () => { expect(sortToSnake('not-exist')).toBe('created_at'); }); From 741163108214a25a5903ec917a5a0ca3c47a529e Mon Sep 17 00:00:00 2001 From: adcoelho Date: Mon, 12 Dec 2022 13:50:11 +0100 Subject: [PATCH 4/6] Updated snaptshot for failing test in check_registered_types. --- .../saved_objects/migrations/check_registered_types.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/server/integration_tests/saved_objects/migrations/check_registered_types.test.ts b/src/core/server/integration_tests/saved_objects/migrations/check_registered_types.test.ts index a08633fc32039..fa2ffee4e9884 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/check_registered_types.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/check_registered_types.test.ts @@ -69,7 +69,7 @@ describe('checking migration metadata changes on all registered SO types', () => "canvas-element": "c27505dcf2970760bea8a0fe1d000253f0c40f08", "canvas-workpad": "eb7b28a3b1c24af615edbf29becddf2e750a4bb5", "canvas-workpad-template": "34454b811e32993eaa55c6ec85a7aecca00c4cfc", - "cases": "7ff5ce930146a2d6fc8fbf536ce2ee16e9df296f", + "cases": "a34407b3f348d4784e8c86b2a4ab3f4c7c042301", "cases-comments": "d7c4c1d24e97620cd415e27e5eb7d5b5f2c5b461", "cases-configure": "1afc414f5563a36e4612fa269193d3ed7277c7bd", "cases-connector-mappings": "4b16d440af966e5d6e0fa33368bfa15d987a4b69", From b5f7dcffa149a513298b20e2b04ca8f8038af41f Mon Sep 17 00:00:00 2001 From: adcoelho Date: Mon, 12 Dec 2022 17:52:42 +0100 Subject: [PATCH 5/6] Address PR comments. --- .../plugins/cases/server/client/utils.test.ts | 18 +++++++++--------- x-pack/plugins/cases/server/client/utils.ts | 4 ++-- .../cases/server/saved_object_types/cases.ts | 1 - 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/x-pack/plugins/cases/server/client/utils.test.ts b/x-pack/plugins/cases/server/client/utils.test.ts index 68009b329845a..42989ca09aa8a 100644 --- a/x-pack/plugins/cases/server/client/utils.test.ts +++ b/x-pack/plugins/cases/server/client/utils.test.ts @@ -10,40 +10,40 @@ import { buildNestedFilter, buildRangeFilter, constructQueryOptions, - sortToSnake, + convertSortField, } from './utils'; import { toElasticsearchQuery } from '@kbn/es-query'; import { CaseStatuses } from '../../common'; import { CaseSeverity } from '../../common/api'; describe('utils', () => { - describe('sortToSnake', () => { + describe('convertSortField', () => { it('transforms status correctly', () => { - expect(sortToSnake('status')).toBe('status'); + expect(convertSortField('status')).toBe('status'); }); it('transforms createdAt correctly', () => { - expect(sortToSnake('createdAt')).toBe('created_at'); + expect(convertSortField('createdAt')).toBe('created_at'); }); it('transforms created_at correctly', () => { - expect(sortToSnake('created_at')).toBe('created_at'); + expect(convertSortField('created_at')).toBe('created_at'); }); it('transforms closedAt correctly', () => { - expect(sortToSnake('closedAt')).toBe('closed_at'); + expect(convertSortField('closedAt')).toBe('closed_at'); }); it('transforms closed_at correctly', () => { - expect(sortToSnake('closed_at')).toBe('closed_at'); + expect(convertSortField('closed_at')).toBe('closed_at'); }); it('transforms title correctly', () => { - expect(sortToSnake('title')).toBe('title.keyword'); + expect(convertSortField('title')).toBe('title.keyword'); }); it('transforms default correctly', () => { - expect(sortToSnake('not-exist')).toBe('created_at'); + expect(convertSortField('not-exist')).toBe('created_at'); }); }); diff --git a/x-pack/plugins/cases/server/client/utils.ts b/x-pack/plugins/cases/server/client/utils.ts index 1a3f88cd37cb5..1851750d862d9 100644 --- a/x-pack/plugins/cases/server/client/utils.ts +++ b/x-pack/plugins/cases/server/client/utils.ts @@ -373,7 +373,7 @@ export const constructQueryOptions = ({ }: CasesFindQueryParams): SavedObjectFindOptionsKueryNode => { const tagsFilter = buildFilter({ filters: tags, field: 'tags', operator: 'or' }); const reportersFilter = createReportersFilter(reporters); - const sortField = sortToSnake(sortByField); + const sortField = convertSortField(sortByField); const ownerFilter = buildFilter({ filters: owner, field: OWNER_FIELD, operator: 'or' }); const statusFilter = status != null ? addStatusFilter({ status }) : undefined; @@ -497,7 +497,7 @@ enum SortFieldCase { title = 'title.keyword', } -export const sortToSnake = (sortField: string | undefined): SortFieldCase => { +export const convertSortField = (sortField: string | undefined): SortFieldCase => { switch (sortField) { case 'status': return SortFieldCase.status; diff --git a/x-pack/plugins/cases/server/saved_object_types/cases.ts b/x-pack/plugins/cases/server/saved_object_types/cases.ts index fb00f7844ec89..b34a355dfcd3e 100644 --- a/x-pack/plugins/cases/server/saved_object_types/cases.ts +++ b/x-pack/plugins/cases/server/saved_object_types/cases.ts @@ -141,7 +141,6 @@ export const createCaseSavedObjectType = ( fields: { keyword: { type: 'keyword', - ignore_above: 160, }, }, }, From 4fc652788a3ddf4dd8d12bcca2a40fb1e178cd91 Mon Sep 17 00:00:00 2001 From: adcoelho Date: Mon, 12 Dec 2022 19:38:50 +0100 Subject: [PATCH 6/6] Updated the snapshot after changing the mapping again as requested in the PR comments. --- .../saved_objects/migrations/check_registered_types.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/server/integration_tests/saved_objects/migrations/check_registered_types.test.ts b/src/core/server/integration_tests/saved_objects/migrations/check_registered_types.test.ts index cd23c299a8131..1935aba9ac60a 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/check_registered_types.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/check_registered_types.test.ts @@ -69,7 +69,7 @@ describe('checking migration metadata changes on all registered SO types', () => "canvas-element": "c27505dcf2970760bea8a0fe1d000253f0c40f08", "canvas-workpad": "eb7b28a3b1c24af615edbf29becddf2e750a4bb5", "canvas-workpad-template": "34454b811e32993eaa55c6ec85a7aecca00c4cfc", - "cases": "a34407b3f348d4784e8c86b2a4ab3f4c7c042301", + "cases": "17af08c8b3550b3e57ba1a7f3b89d85f271712c0", "cases-comments": "d7c4c1d24e97620cd415e27e5eb7d5b5f2c5b461", "cases-configure": "1afc414f5563a36e4612fa269193d3ed7277c7bd", "cases-connector-mappings": "4b16d440af966e5d6e0fa33368bfa15d987a4b69",