Skip to content

Commit 7f6538a

Browse files
[KQL] Migrate value suggestions API tests from FTR to Scout
Move the platform `apis/suggestions` FTR API integration suite (value suggestions / autocomplete endpoint) into a Scout API suite co-located with the route owner, the `kql` plugin. This aligns test ownership with code ownership (`@elastic/kibana-presentation`) via CODEOWNERS path inheritance, and removes a legacy stateful-only FTR config. - Add `src/platform/plugins/shared/kql/test/scout/api` (12 tests across non-time-based + time-based specs), porting all cases 1:1. - Delete `src/platform/test/api_integration/apis/suggestions` and drop it from the api_integration index. - Register `kql` in `.buildkite/scout_ci_config.yml` (done by generator). - Remove the now-stale CODEOWNERS entry for the old FTR path. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 2a3780d commit 7f6538a

11 files changed

Lines changed: 636 additions & 281 deletions

File tree

.buildkite/scout_ci_config.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ plugins:
1818
- dashboard_markdown
1919
- data
2020
- data_view_editor
21-
- data_views
2221
- data_view_management
22+
- data_views
2323
- dev_tools
2424
- discover
2525
- discover_enhanced
@@ -40,6 +40,7 @@ plugins:
4040
- ingest_pipelines
4141
- intercepts
4242
- kibana_overview
43+
- kql
4344
- lens
4445
- logstash
4546
- management

.github/CODEOWNERS

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1912,7 +1912,6 @@ x-pack/platform/plugins/shared/streams/common/sig_events_tuning_config.ts @elast
19121912

19131913
# Actionable Observability (formerly Observability UX Management) team
19141914

1915-
/src/platform/test/api_integration/apis/suggestions @elastic/actionable-obs-team # Assigned per https://github.com/elastic/kibana/pull/200950#discussion_r1853705079
19161915
/x-pack/solutions/observability/test/api_integration/services/slo.ts @elastic/actionable-obs-team
19171916
/x-pack/solutions/observability/test/observability_api_integration @elastic/actionable-obs-team # Assigned per https://github.com/elastic/kibana/pull/182243
19181917
/x-pack/solutions/observability/test/functional/services/observability @elastic/actionable-obs-team
Lines changed: 317 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,317 @@
1+
{
2+
"sha1": "67fbe25f2eef4dad31f647719253f879d19af172",
3+
"tests": [
4+
{
5+
"id": "8f22242c1e56e76-a28d1b90026924d",
6+
"title": "Suggestions API - time based filter is applied on a document level with terms_agg",
7+
"expectedStatus": "passed",
8+
"tags": [
9+
"@local-stateful-classic",
10+
"@cloud-stateful-classic",
11+
"@local-stateful-search",
12+
"@cloud-stateful-search",
13+
"@local-stateful-observability_complete",
14+
"@cloud-stateful-observability_complete",
15+
"@local-stateful-security_complete",
16+
"@cloud-stateful-security_complete",
17+
"@local-serverless-search",
18+
"@cloud-serverless-search",
19+
"@local-serverless-observability_complete",
20+
"@cloud-serverless-observability_complete",
21+
"@local-serverless-security_complete",
22+
"@cloud-serverless-security_complete"
23+
],
24+
"location": {
25+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions_time_filters.spec.ts",
26+
"line": 48,
27+
"column": 10
28+
}
29+
},
30+
{
31+
"id": "8f22242c1e56e76-48dcb9dae652e66",
32+
"title": "Suggestions API - time based filter returns all results because it was applied on an index level with terms_enum",
33+
"expectedStatus": "passed",
34+
"tags": [
35+
"@local-stateful-classic",
36+
"@cloud-stateful-classic",
37+
"@local-stateful-search",
38+
"@cloud-stateful-search",
39+
"@local-stateful-observability_complete",
40+
"@cloud-stateful-observability_complete",
41+
"@local-stateful-security_complete",
42+
"@cloud-stateful-security_complete",
43+
"@local-serverless-search",
44+
"@cloud-serverless-search",
45+
"@local-serverless-observability_complete",
46+
"@cloud-serverless-observability_complete",
47+
"@local-serverless-security_complete",
48+
"@cloud-serverless-security_complete"
49+
],
50+
"location": {
51+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions_time_filters.spec.ts",
52+
"line": 65,
53+
"column": 10
54+
}
55+
},
56+
{
57+
"id": "8f22242c1e56e76-ace035a8d0b6557",
58+
"title": "Suggestions API - time based filter is applied on an index level with terms_enum - find in range",
59+
"expectedStatus": "passed",
60+
"tags": [
61+
"@local-stateful-classic",
62+
"@cloud-stateful-classic",
63+
"@local-stateful-search",
64+
"@cloud-stateful-search",
65+
"@local-stateful-observability_complete",
66+
"@cloud-stateful-observability_complete",
67+
"@local-stateful-security_complete",
68+
"@cloud-stateful-security_complete",
69+
"@local-serverless-search",
70+
"@cloud-serverless-search",
71+
"@local-serverless-observability_complete",
72+
"@cloud-serverless-observability_complete",
73+
"@local-serverless-security_complete",
74+
"@cloud-serverless-security_complete"
75+
],
76+
"location": {
77+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions_time_filters.spec.ts",
78+
"line": 84,
79+
"column": 10
80+
}
81+
},
82+
{
83+
"id": "8f22242c1e56e76-d9102492bfb47d8",
84+
"title": "Suggestions API - time based filter is applied on an index level with terms_enum - does not find outside range",
85+
"expectedStatus": "passed",
86+
"tags": [
87+
"@local-stateful-classic",
88+
"@cloud-stateful-classic",
89+
"@local-stateful-search",
90+
"@cloud-stateful-search",
91+
"@local-stateful-observability_complete",
92+
"@cloud-stateful-observability_complete",
93+
"@local-stateful-security_complete",
94+
"@cloud-stateful-security_complete",
95+
"@local-serverless-search",
96+
"@cloud-serverless-search",
97+
"@local-serverless-observability_complete",
98+
"@cloud-serverless-observability_complete",
99+
"@local-serverless-security_complete",
100+
"@cloud-serverless-security_complete"
101+
],
102+
"location": {
103+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions_time_filters.spec.ts",
104+
"line": 103,
105+
"column": 10
106+
}
107+
},
108+
{
109+
"id": "e6c0509cae8ad9c-14980dc3e3fd476",
110+
"title": "Suggestions API - non time based returns 200 without a query",
111+
"expectedStatus": "passed",
112+
"tags": [
113+
"@local-stateful-classic",
114+
"@cloud-stateful-classic",
115+
"@local-stateful-search",
116+
"@cloud-stateful-search",
117+
"@local-stateful-observability_complete",
118+
"@cloud-stateful-observability_complete",
119+
"@local-stateful-security_complete",
120+
"@cloud-stateful-security_complete",
121+
"@local-serverless-search",
122+
"@cloud-serverless-search",
123+
"@local-serverless-observability_complete",
124+
"@cloud-serverless-observability_complete",
125+
"@local-serverless-security_complete",
126+
"@cloud-serverless-security_complete"
127+
],
128+
"location": {
129+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions.spec.ts",
130+
"line": 36,
131+
"column": 10
132+
}
133+
},
134+
{
135+
"id": "e6c0509cae8ad9c-759fdeec70c564a",
136+
"title": "Suggestions API - non time based returns 200 without a query with method set to terms_agg",
137+
"expectedStatus": "passed",
138+
"tags": [
139+
"@local-stateful-classic",
140+
"@cloud-stateful-classic",
141+
"@local-stateful-search",
142+
"@cloud-stateful-search",
143+
"@local-stateful-observability_complete",
144+
"@cloud-stateful-observability_complete",
145+
"@local-stateful-security_complete",
146+
"@cloud-stateful-security_complete",
147+
"@local-serverless-search",
148+
"@cloud-serverless-search",
149+
"@local-serverless-observability_complete",
150+
"@cloud-serverless-observability_complete",
151+
"@local-serverless-security_complete",
152+
"@cloud-serverless-security_complete"
153+
],
154+
"location": {
155+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions.spec.ts",
156+
"line": 48,
157+
"column": 10
158+
}
159+
},
160+
{
161+
"id": "e6c0509cae8ad9c-94a1ae69012371d",
162+
"title": "Suggestions API - non time based returns 200 without a query with method set to terms_enum",
163+
"expectedStatus": "passed",
164+
"tags": [
165+
"@local-stateful-classic",
166+
"@cloud-stateful-classic",
167+
"@local-stateful-search",
168+
"@cloud-stateful-search",
169+
"@local-stateful-observability_complete",
170+
"@cloud-stateful-observability_complete",
171+
"@local-stateful-security_complete",
172+
"@cloud-stateful-security_complete",
173+
"@local-serverless-search",
174+
"@cloud-serverless-search",
175+
"@local-serverless-observability_complete",
176+
"@cloud-serverless-observability_complete",
177+
"@local-serverless-security_complete",
178+
"@cloud-serverless-security_complete"
179+
],
180+
"location": {
181+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions.spec.ts",
182+
"line": 60,
183+
"column": 10
184+
}
185+
},
186+
{
187+
"id": "e6c0509cae8ad9c-49162a1245d8327",
188+
"title": "Suggestions API - non time based returns 200 with special characters",
189+
"expectedStatus": "passed",
190+
"tags": [
191+
"@local-stateful-classic",
192+
"@cloud-stateful-classic",
193+
"@local-stateful-search",
194+
"@cloud-stateful-search",
195+
"@local-stateful-observability_complete",
196+
"@cloud-stateful-observability_complete",
197+
"@local-stateful-security_complete",
198+
"@cloud-stateful-security_complete",
199+
"@local-serverless-search",
200+
"@cloud-serverless-search",
201+
"@local-serverless-observability_complete",
202+
"@cloud-serverless-observability_complete",
203+
"@local-serverless-security_complete",
204+
"@cloud-serverless-security_complete"
205+
],
206+
"location": {
207+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions.spec.ts",
208+
"line": 72,
209+
"column": 10
210+
}
211+
},
212+
{
213+
"id": "e6c0509cae8ad9c-2c1eb26a4f1e22f",
214+
"title": "Suggestions API - non time based supports nested fields",
215+
"expectedStatus": "passed",
216+
"tags": [
217+
"@local-stateful-classic",
218+
"@cloud-stateful-classic",
219+
"@local-stateful-search",
220+
"@cloud-stateful-search",
221+
"@local-stateful-observability_complete",
222+
"@cloud-stateful-observability_complete",
223+
"@local-stateful-security_complete",
224+
"@cloud-stateful-security_complete",
225+
"@local-serverless-search",
226+
"@cloud-serverless-search",
227+
"@local-serverless-observability_complete",
228+
"@cloud-serverless-observability_complete",
229+
"@local-serverless-security_complete",
230+
"@cloud-serverless-security_complete"
231+
],
232+
"location": {
233+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions.spec.ts",
234+
"line": 83,
235+
"column": 10
236+
}
237+
},
238+
{
239+
"id": "e6c0509cae8ad9c-fa3c254b6d43397",
240+
"title": "Suggestions API - non time based returns 404 if index is not found",
241+
"expectedStatus": "passed",
242+
"tags": [
243+
"@local-stateful-classic",
244+
"@cloud-stateful-classic",
245+
"@local-stateful-search",
246+
"@cloud-stateful-search",
247+
"@local-stateful-observability_complete",
248+
"@cloud-stateful-observability_complete",
249+
"@local-stateful-security_complete",
250+
"@cloud-stateful-security_complete",
251+
"@local-serverless-search",
252+
"@cloud-serverless-search",
253+
"@local-serverless-observability_complete",
254+
"@cloud-serverless-observability_complete",
255+
"@local-serverless-security_complete",
256+
"@cloud-serverless-security_complete"
257+
],
258+
"location": {
259+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions.spec.ts",
260+
"line": 94,
261+
"column": 10
262+
}
263+
},
264+
{
265+
"id": "e6c0509cae8ad9c-b277dea725a8ea9",
266+
"title": "Suggestions API - non time based returns 400 without a query",
267+
"expectedStatus": "passed",
268+
"tags": [
269+
"@local-stateful-classic",
270+
"@cloud-stateful-classic",
271+
"@local-stateful-search",
272+
"@cloud-stateful-search",
273+
"@local-stateful-observability_complete",
274+
"@cloud-stateful-observability_complete",
275+
"@local-stateful-security_complete",
276+
"@cloud-stateful-security_complete",
277+
"@local-serverless-search",
278+
"@cloud-serverless-search",
279+
"@local-serverless-observability_complete",
280+
"@cloud-serverless-observability_complete",
281+
"@local-serverless-security_complete",
282+
"@cloud-serverless-security_complete"
283+
],
284+
"location": {
285+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions.spec.ts",
286+
"line": 104,
287+
"column": 10
288+
}
289+
},
290+
{
291+
"id": "e6c0509cae8ad9c-fb0c622dc5b16a1",
292+
"title": "Suggestions API - non time based returns 400 with a bad method",
293+
"expectedStatus": "passed",
294+
"tags": [
295+
"@local-stateful-classic",
296+
"@cloud-stateful-classic",
297+
"@local-stateful-search",
298+
"@cloud-stateful-search",
299+
"@local-stateful-observability_complete",
300+
"@cloud-stateful-observability_complete",
301+
"@local-stateful-security_complete",
302+
"@cloud-stateful-security_complete",
303+
"@local-serverless-search",
304+
"@cloud-serverless-search",
305+
"@local-serverless-observability_complete",
306+
"@cloud-serverless-observability_complete",
307+
"@local-serverless-security_complete",
308+
"@cloud-serverless-security_complete"
309+
],
310+
"location": {
311+
"file": "src/platform/plugins/shared/kql/test/scout/api/tests/value_suggestions.spec.ts",
312+
"line": 114,
313+
"column": 10
314+
}
315+
}
316+
]
317+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
import {
11+
ELASTIC_HTTP_VERSION_HEADER,
12+
X_ELASTIC_INTERNAL_ORIGIN_REQUEST,
13+
} from '@kbn/core-http-common';
14+
15+
/** Base path for the internal value suggestions route registered by the kql plugin. */
16+
export const SUGGESTIONS_VALUES_PATH = 'internal/kibana/suggestions/values';
17+
18+
/**
19+
* The value suggestions route is an internal, versioned API (version `1`).
20+
* State-changing requests need `kbn-xsrf`, and internal Kibana APIs expect the
21+
* internal-origin header.
22+
*/
23+
export const COMMON_HEADERS = {
24+
'kbn-xsrf': 'some-xsrf-token',
25+
[X_ELASTIC_INTERNAL_ORIGIN_REQUEST]: 'kibana',
26+
[ELASTIC_HTTP_VERSION_HEADER]: '1',
27+
};
28+
29+
/** Small non-time-based index with `baz.keyword` and a `nestedField.child` nested field. */
30+
export const ES_ARCHIVE_BASIC_INDEX =
31+
'src/platform/test/api_integration/fixtures/es_archiver/index_patterns/basic_index';
32+
33+
/** Index pattern saved object whose id is `basic_index` (used to resolve field meta). */
34+
export const KBN_ARCHIVE_BASIC_KIBANA =
35+
'src/platform/test/api_integration/fixtures/kbn_archiver/index_patterns/basic_kibana.json';
36+
37+
/** Time-based dataset used to exercise filter behavior across `terms_agg` / `terms_enum`. */
38+
export const ES_ARCHIVE_LOGSTASH_FUNCTIONAL =
39+
'src/platform/test/functional/fixtures/es_archiver/logstash_functional';
40+
41+
/** Index pattern saved object whose id is `logstash-*`. */
42+
export const KBN_ARCHIVE_SAVED_OBJECTS_BASIC =
43+
'src/platform/test/api_integration/fixtures/kbn_archiver/saved_objects/basic.json';

0 commit comments

Comments
 (0)