-
+
diff --git a/src/legacy/core_plugins/kibana/public/context/app.js b/src/legacy/core_plugins/kibana/public/context/app.js
index 346d51398e8ab..6b10d80078f80 100644
--- a/src/legacy/core_plugins/kibana/public/context/app.js
+++ b/src/legacy/core_plugins/kibana/public/context/app.js
@@ -22,8 +22,7 @@ import _ from 'lodash';
import { callAfterBindingsWorkaround } from 'ui/compat';
import { uiModules } from 'ui/modules';
import contextAppTemplate from './app.html';
-import './components/loading_button';
-import './components/size_picker/size_picker';
+import './components/action_bar';
import { getFirstSortableField } from './api/utils/sorting';
import {
createInitialQueryParametersState,
diff --git a/src/legacy/core_plugins/kibana/public/context/components/action_bar/_action_bar.scss b/src/legacy/core_plugins/kibana/public/context/components/action_bar/_action_bar.scss
new file mode 100644
index 0000000000000..da0911c3a452b
--- /dev/null
+++ b/src/legacy/core_plugins/kibana/public/context/components/action_bar/_action_bar.scss
@@ -0,0 +1,10 @@
+.cxtSizePicker {
+ text-align: center;
+ width: $euiSize * 5;
+
+ &::-webkit-outer-spin-button,
+ &::-webkit-inner-spin-button {
+ appearance: none; // Hide increment and decrement buttons for type="number" input.
+ margin: 0;
+ }
+}
diff --git a/src/legacy/core_plugins/kibana/public/context/components/action_bar/_index.scss b/src/legacy/core_plugins/kibana/public/context/components/action_bar/_index.scss
new file mode 100644
index 0000000000000..1f54ecea5e1cb
--- /dev/null
+++ b/src/legacy/core_plugins/kibana/public/context/components/action_bar/_index.scss
@@ -0,0 +1 @@
+@import './action_bar';
diff --git a/src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar.test.tsx b/src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar.test.tsx
new file mode 100644
index 0000000000000..325cfb2c9f0bb
--- /dev/null
+++ b/src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar.test.tsx
@@ -0,0 +1,94 @@
+/*
+ * Licensed to Elasticsearch B.V. under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch B.V. licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import React from 'react';
+import { mountWithIntl } from 'test_utils/enzyme_helpers';
+import { ActionBar, ActionBarProps } from './action_bar';
+// @ts-ignore
+import { findTestSubject } from '@elastic/eui/lib/test';
+import { MAX_CONTEXT_SIZE, MIN_CONTEXT_SIZE } from '../../query_parameters/constants';
+
+describe('Test Discover Context ActionBar for successor | predecessor records', () => {
+ ['successors', 'predecessors'].forEach(type => {
+ const onChangeCount = jest.fn();
+ const props = {
+ defaultStepSize: 5,
+ docCount: 20,
+ docCountAvailable: 0,
+ isDisabled: false,
+ isLoading: false,
+ onChangeCount,
+ type,
+ } as ActionBarProps;
+ const wrapper = mountWithIntl(
);
+
+ const input = findTestSubject(wrapper, `${type}CountPicker`);
+ const btn = findTestSubject(wrapper, `${type}LoadMoreButton`);
+
+ test(`${type}: Load button click`, () => {
+ btn.simulate('click');
+ expect(onChangeCount).toHaveBeenCalledWith(25);
+ });
+
+ test(`${type}: Load button click doesnt submit when MAX_CONTEXT_SIZE was reached`, () => {
+ onChangeCount.mockClear();
+ input.simulate('change', { target: { valueAsNumber: MAX_CONTEXT_SIZE } });
+ btn.simulate('click');
+ expect(onChangeCount).toHaveBeenCalledTimes(0);
+ });
+
+ test(`${type}: Count input change submits on blur`, () => {
+ input.simulate('change', { target: { valueAsNumber: 123 } });
+ input.simulate('blur');
+ expect(onChangeCount).toHaveBeenCalledWith(123);
+ });
+
+ test(`${type}: Count input change submits on return`, () => {
+ input.simulate('change', { target: { valueAsNumber: 124 } });
+ input.simulate('submit');
+ expect(onChangeCount).toHaveBeenCalledWith(124);
+ });
+
+ test(`${type}: Count input doesnt submits values higher than MAX_CONTEXT_SIZE `, () => {
+ onChangeCount.mockClear();
+ input.simulate('change', { target: { valueAsNumber: MAX_CONTEXT_SIZE + 1 } });
+ input.simulate('submit');
+ expect(onChangeCount).toHaveBeenCalledTimes(0);
+ });
+
+ test(`${type}: Count input doesnt submits values lower than MIN_CONTEXT_SIZE `, () => {
+ onChangeCount.mockClear();
+ input.simulate('change', { target: { valueAsNumber: MIN_CONTEXT_SIZE - 1 } });
+ input.simulate('submit');
+ expect(onChangeCount).toHaveBeenCalledTimes(0);
+ });
+
+ test(`${type}: Warning about limitation of additional records`, () => {
+ if (type === 'predecessors') {
+ expect(findTestSubject(wrapper, 'predecessorsWarningMsg').text()).toBe(
+ 'No documents newer than the anchor could be found.'
+ );
+ } else {
+ expect(findTestSubject(wrapper, 'successorsWarningMsg').text()).toBe(
+ 'No documents older than the anchor could be found.'
+ );
+ }
+ });
+ });
+});
diff --git a/src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar.tsx b/src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar.tsx
new file mode 100644
index 0000000000000..57ad8e0b1040f
--- /dev/null
+++ b/src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar.tsx
@@ -0,0 +1,164 @@
+/*
+ * Licensed to Elasticsearch B.V. under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch B.V. licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import React, { useState } from 'react';
+import { i18n } from '@kbn/i18n';
+import { FormattedMessage } from '@kbn/i18n/react';
+import {
+ EuiButtonEmpty,
+ EuiFieldNumber,
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiFormRow,
+ EuiSpacer,
+} from '@elastic/eui';
+import { ActionBarWarning } from './action_bar_warning';
+import { SurrDocType } from '../../api/context';
+import { MAX_CONTEXT_SIZE, MIN_CONTEXT_SIZE } from '../../query_parameters/constants';
+
+export interface ActionBarProps {
+ /**
+ * the number of documents fetched initially and added when the load button is clicked
+ */
+ defaultStepSize: number;
+ /**
+ * the number of docs to be displayed
+ */
+ docCount: number;
+ /**
+ * the number of documents that are available
+ * display warning when it's lower than docCount
+ */
+ docCountAvailable: number;
+ /**
+ * is true while the anchor record is fetched
+ */
+ isDisabled: boolean;
+ /**
+ * is true when list entries are fetched
+ */
+ isLoading: boolean;
+ /**
+ * is triggered when the input containing count is changed
+ * @param count
+ */
+ onChangeCount: (count: number) => void;
+ /**
+ * can be `predecessors` or `successors`, usage in context:
+ * predecessors action bar + records (these are newer records)
+ * anchor record
+ * successors records + action bar (these are older records)
+ */
+ type: SurrDocType;
+}
+
+export function ActionBar({
+ defaultStepSize,
+ docCount,
+ docCountAvailable,
+ isDisabled,
+ isLoading,
+ onChangeCount,
+ type,
+}: ActionBarProps) {
+ const showWarning = !isDisabled && !isLoading && docCountAvailable < docCount;
+ const isSuccessor = type === 'successors';
+ const [newDocCount, setNewDocCount] = useState(docCount);
+ const isValid = (value: number) => value >= MIN_CONTEXT_SIZE && value <= MAX_CONTEXT_SIZE;
+ const onSubmit = (ev: React.FormEvent
) => {
+ ev.preventDefault();
+ if (newDocCount !== docCount && isValid(newDocCount)) {
+ onChangeCount(newDocCount);
+ }
+ };
+
+ return (
+
+ );
+}
diff --git a/src/legacy/core_plugins/kibana/public/context/components/size_picker/index.js b/src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar_directive.ts
similarity index 73%
rename from src/legacy/core_plugins/kibana/public/context/components/size_picker/index.js
rename to src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar_directive.ts
index 034044dabff60..0942539e63785 100644
--- a/src/legacy/core_plugins/kibana/public/context/components/size_picker/index.js
+++ b/src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar_directive.ts
@@ -16,5 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
+// @ts-ignore
+import { uiModules } from 'ui/modules';
+import { wrapInI18nContext } from 'ui/i18n';
+import { ActionBar } from './action_bar';
-import './size_picker';
+uiModules.get('apps/context').directive('contextActionBar', function(reactDirective: any) {
+ return reactDirective(wrapInI18nContext(ActionBar));
+});
diff --git a/src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar_warning.tsx b/src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar_warning.tsx
new file mode 100644
index 0000000000000..6b922bb05a243
--- /dev/null
+++ b/src/legacy/core_plugins/kibana/public/context/components/action_bar/action_bar_warning.tsx
@@ -0,0 +1,72 @@
+/*
+ * Licensed to Elasticsearch B.V. under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch B.V. licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import React from 'react';
+import { FormattedMessage } from '@kbn/i18n/react';
+import { EuiCallOut } from '@elastic/eui';
+import { SurrDocType } from '../../api/context';
+
+export function ActionBarWarning({ docCount, type }: { docCount: number; type: SurrDocType }) {
+ if (type === 'predecessors') {
+ return (
+
+ ) : (
+
+ )
+ }
+ size="s"
+ />
+ );
+ }
+
+ return (
+
+ ) : (
+
+ )
+ }
+ size="s"
+ />
+ );
+}
diff --git a/src/legacy/core_plugins/kibana/public/context/components/loading_button/index.js b/src/legacy/core_plugins/kibana/public/context/components/action_bar/index.ts
similarity index 96%
rename from src/legacy/core_plugins/kibana/public/context/components/loading_button/index.js
rename to src/legacy/core_plugins/kibana/public/context/components/action_bar/index.ts
index b9cdff8e26a5d..de16caef9c773 100644
--- a/src/legacy/core_plugins/kibana/public/context/components/loading_button/index.js
+++ b/src/legacy/core_plugins/kibana/public/context/components/action_bar/index.ts
@@ -17,4 +17,4 @@
* under the License.
*/
-import './loading_button';
+import './action_bar_directive';
diff --git a/src/legacy/core_plugins/kibana/public/context/components/loading_button/loading_button.html b/src/legacy/core_plugins/kibana/public/context/components/loading_button/loading_button.html
deleted file mode 100644
index b994ede80dbed..0000000000000
--- a/src/legacy/core_plugins/kibana/public/context/components/loading_button/loading_button.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
diff --git a/src/legacy/core_plugins/kibana/public/context/components/loading_button/loading_button.js b/src/legacy/core_plugins/kibana/public/context/components/loading_button/loading_button.js
deleted file mode 100644
index 62effb3536a7a..0000000000000
--- a/src/legacy/core_plugins/kibana/public/context/components/loading_button/loading_button.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import { uiModules } from 'ui/modules';
-import contextLoadingButtonTemplate from './loading_button.html';
-
-
-const module = uiModules.get('apps/context', [
- 'kibana',
- 'ngRoute',
-]);
-
-module.directive('contextLoadingButton', function ContextLoadingButton() {
- return {
- replace: true,
- restrict: 'E',
- scope: {
- isDisabled: '=',
- icon: '=',
- },
- template: contextLoadingButtonTemplate,
- transclude: true,
- };
-});
diff --git a/src/legacy/core_plugins/kibana/public/context/components/size_picker/_index.scss b/src/legacy/core_plugins/kibana/public/context/components/size_picker/_index.scss
deleted file mode 100644
index 6a7ffa7201919..0000000000000
--- a/src/legacy/core_plugins/kibana/public/context/components/size_picker/_index.scss
+++ /dev/null
@@ -1 +0,0 @@
-@import './size_picker';
diff --git a/src/legacy/core_plugins/kibana/public/context/components/size_picker/_size_picker.scss b/src/legacy/core_plugins/kibana/public/context/components/size_picker/_size_picker.scss
deleted file mode 100644
index 3e9b05a2872ca..0000000000000
--- a/src/legacy/core_plugins/kibana/public/context/components/size_picker/_size_picker.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * 1. Hide increment and decrement buttons for type="number" input.
- */
-.cxtSizePicker {
- appearance: textfield;
- text-align: center;
- width: $euiSize * 5;
-
- &::-webkit-outer-spin-button,
- &::-webkit-inner-spin-button {
- appearance: none; /* 1 */
- margin: 0; /* 1 */
- }
-}
diff --git a/src/legacy/core_plugins/kibana/public/context/components/size_picker/size_picker.html b/src/legacy/core_plugins/kibana/public/context/components/size_picker/size_picker.html
deleted file mode 100644
index d3bda3268310a..0000000000000
--- a/src/legacy/core_plugins/kibana/public/context/components/size_picker/size_picker.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
diff --git a/src/legacy/core_plugins/kibana/public/context/components/size_picker/size_picker.js b/src/legacy/core_plugins/kibana/public/context/components/size_picker/size_picker.js
deleted file mode 100644
index c6679b26f4ea3..0000000000000
--- a/src/legacy/core_plugins/kibana/public/context/components/size_picker/size_picker.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import _ from 'lodash';
-import { uiModules } from 'ui/modules';
-import { callAfterBindingsWorkaround } from 'ui/compat';
-import contextSizePickerTemplate from './size_picker.html';
-
-const module = uiModules.get('apps/context', [
- 'kibana',
-]);
-
-module.directive('contextSizePicker', function ContextSizePicker() {
- return {
- bindToController: true,
- controller: callAfterBindingsWorkaround(ContextSizePickerController),
- controllerAs: 'contextSizePicker',
- link: linkContextSizePicker,
- replace: true,
- restrict: 'E',
- require: 'ngModel',
- scope: {
- count: '=',
- isDisabled: '=',
- onChangeCount: '=', // To avoid inconsistent ngModel states this action
- // should make sure the new value is propagated back
- // to the `count` property. If that propagation
- // fails, the user input will be reset to the value
- // of `count`.
- },
- template: contextSizePickerTemplate,
- };
-});
-
-function linkContextSizePicker(scope, element, attrs, ngModel) {
- scope.countModel = ngModel;
-}
-
-function ContextSizePickerController($scope) {
- $scope.$watch(
- () => this.count,
- () => $scope.countModel.$rollbackViewValue(),
- );
-
- this.getOrSetCount = (count) => (
- _.isUndefined(count) ? this.count : this.onChangeCount(count)
- );
-}
diff --git a/src/legacy/core_plugins/kibana/public/context/query/actions.js b/src/legacy/core_plugins/kibana/public/context/query/actions.js
index 10a4812f85f4f..72624210fcb49 100644
--- a/src/legacy/core_plugins/kibana/public/context/query/actions.js
+++ b/src/legacy/core_plugins/kibana/public/context/query/actions.js
@@ -32,8 +32,6 @@ export function QueryActionsProvider(Private, Promise) {
const fetchAnchor = Private(fetchAnchorProvider);
const { fetchSurroundingDocs } = Private(fetchContextProvider);
const {
- increasePredecessorCount,
- increaseSuccessorCount,
setPredecessorCount,
setQueryParameters,
setSuccessorCount,
@@ -173,16 +171,6 @@ export function QueryActionsProvider(Private, Promise) {
return fetchSurroundingRows('successors', state);
};
- const fetchMorePredecessorRows = (state) => () => {
- increasePredecessorCount(state)();
- return fetchSurroundingRows('predecessors', state);
- };
-
- const fetchMoreSuccessorRows = (state) => () => {
- increaseSuccessorCount(state)();
- return fetchSurroundingRows('successors', state);
- };
-
const setAllRows = (state) => (predecessorRows, anchorRow, successorRows) => (
state.rows.all = [
...(predecessorRows || []),
@@ -199,8 +187,6 @@ export function QueryActionsProvider(Private, Promise) {
fetchContextRowsWithNewQueryParameters,
fetchGivenPredecessorRows,
fetchGivenSuccessorRows,
- fetchMorePredecessorRows,
- fetchMoreSuccessorRows,
setAllRows,
};
}
diff --git a/src/legacy/core_plugins/kibana/public/context/query_parameters/__tests__/action_increase_predecessor_count.js b/src/legacy/core_plugins/kibana/public/context/query_parameters/__tests__/action_increase_predecessor_count.js
deleted file mode 100644
index cd19f7af8d829..0000000000000
--- a/src/legacy/core_plugins/kibana/public/context/query_parameters/__tests__/action_increase_predecessor_count.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import expect from '@kbn/expect';
-import ngMock from 'ng_mock';
-
-import { createStateStub } from './_utils';
-import { QueryParameterActionsProvider } from '../actions';
-
-
-describe('context app', function () {
- beforeEach(ngMock.module('kibana'));
-
- describe('action increasePredecessorCount', function () {
- let increasePredecessorCount;
-
- beforeEach(ngMock.inject(function createPrivateStubs(Private) {
- increasePredecessorCount = Private(QueryParameterActionsProvider).increasePredecessorCount;
- }));
-
- it('should increase the predecessorCount by the given value', function () {
- const state = createStateStub();
-
- increasePredecessorCount(state)(20);
-
- expect(state.queryParameters.predecessorCount).to.equal(30);
- });
-
- it('should increase the predecessorCount by the default step size if not value is given', function () {
- const state = createStateStub();
-
- increasePredecessorCount(state)();
-
- expect(state.queryParameters.predecessorCount).to.equal(13);
- });
-
- it('should limit the predecessorCount to 0 as a lower bound', function () {
- const state = createStateStub();
-
- increasePredecessorCount(state)(-20);
-
- expect(state.queryParameters.predecessorCount).to.equal(0);
- });
-
- it('should limit the predecessorCount to 10000 as an upper bound', function () {
- const state = createStateStub();
-
- increasePredecessorCount(state)(20000);
-
- expect(state.queryParameters.predecessorCount).to.equal(10000);
- });
- });
-});
diff --git a/src/legacy/core_plugins/kibana/public/context/query_parameters/__tests__/action_increase_successor_count.js b/src/legacy/core_plugins/kibana/public/context/query_parameters/__tests__/action_increase_successor_count.js
deleted file mode 100644
index 7036df1ea626f..0000000000000
--- a/src/legacy/core_plugins/kibana/public/context/query_parameters/__tests__/action_increase_successor_count.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import expect from '@kbn/expect';
-import ngMock from 'ng_mock';
-
-import { createStateStub } from './_utils';
-import { QueryParameterActionsProvider } from '../actions';
-
-
-describe('context app', function () {
- beforeEach(ngMock.module('kibana'));
-
- describe('action increaseSuccessorCount', function () {
- let increaseSuccessorCount;
-
- beforeEach(ngMock.inject(function createPrivateStubs(Private) {
- increaseSuccessorCount = Private(QueryParameterActionsProvider).increaseSuccessorCount;
- }));
-
- it('should increase the successorCount by the given value', function () {
- const state = createStateStub();
-
- increaseSuccessorCount(state)(20);
-
- expect(state.queryParameters.successorCount).to.equal(30);
- });
-
- it('should increase the successorCount by the default step size if not value is given', function () {
- const state = createStateStub();
-
- increaseSuccessorCount(state)();
-
- expect(state.queryParameters.successorCount).to.equal(13);
- });
-
- it('should limit the successorCount to 0 as a lower bound', function () {
- const state = createStateStub();
-
- increaseSuccessorCount(state)(-20);
-
- expect(state.queryParameters.successorCount).to.equal(0);
- });
-
- it('should limit the successorCount to 10000 as an upper bound', function () {
- const state = createStateStub();
-
- increaseSuccessorCount(state)(20000);
-
- expect(state.queryParameters.successorCount).to.equal(10000);
- });
- });
-});
diff --git a/src/legacy/core_plugins/kibana/public/context/query_parameters/actions.js b/src/legacy/core_plugins/kibana/public/context/query_parameters/actions.js
index cd5af188ad321..1c895b8d9e1c5 100644
--- a/src/legacy/core_plugins/kibana/public/context/query_parameters/actions.js
+++ b/src/legacy/core_plugins/kibana/public/context/query_parameters/actions.js
@@ -40,12 +40,6 @@ export function QueryParameterActionsProvider(indexPatterns, Private) {
)
);
- const increasePredecessorCount = (state) => (
- value = state.queryParameters.defaultStepSize,
- ) => (
- setPredecessorCount(state)(state.queryParameters.predecessorCount + value)
- );
-
const setSuccessorCount = (state) => (successorCount) => (
state.queryParameters.successorCount = clamp(
MIN_CONTEXT_SIZE,
@@ -54,12 +48,6 @@ export function QueryParameterActionsProvider(indexPatterns, Private) {
)
);
- const increaseSuccessorCount = (state) => (
- value = state.queryParameters.defaultStepSize,
- ) => (
- setSuccessorCount(state)(state.queryParameters.successorCount + value)
- );
-
const setQueryParameters = (state) => (queryParameters) => (
Object.assign(
state.queryParameters,
@@ -82,8 +70,6 @@ export function QueryParameterActionsProvider(indexPatterns, Private) {
return {
addFilter,
updateFilters,
- increasePredecessorCount,
- increaseSuccessorCount,
setPredecessorCount,
setQueryParameters,
setSuccessorCount,
diff --git a/src/legacy/core_plugins/kibana/public/context/query_parameters/constants.js b/src/legacy/core_plugins/kibana/public/context/query_parameters/constants.ts
similarity index 99%
rename from src/legacy/core_plugins/kibana/public/context/query_parameters/constants.js
rename to src/legacy/core_plugins/kibana/public/context/query_parameters/constants.ts
index 9b9e93f7ba000..9fdf79a714e78 100644
--- a/src/legacy/core_plugins/kibana/public/context/query_parameters/constants.js
+++ b/src/legacy/core_plugins/kibana/public/context/query_parameters/constants.ts
@@ -19,7 +19,6 @@
import { createInitialQueryParametersState } from './state';
-
export const MAX_CONTEXT_SIZE = 10000; // Elasticsearch's default maximum size limit
export const MIN_CONTEXT_SIZE = 0;
export const QUERY_PARAMETER_KEYS = Object.keys(createInitialQueryParametersState());
diff --git a/src/legacy/core_plugins/kibana/public/context/query_parameters/state.js b/src/legacy/core_plugins/kibana/public/context/query_parameters/state.ts
similarity index 89%
rename from src/legacy/core_plugins/kibana/public/context/query_parameters/state.js
rename to src/legacy/core_plugins/kibana/public/context/query_parameters/state.ts
index 6fa5ad843de58..094dba6341d0c 100644
--- a/src/legacy/core_plugins/kibana/public/context/query_parameters/state.js
+++ b/src/legacy/core_plugins/kibana/public/context/query_parameters/state.ts
@@ -17,7 +17,10 @@
* under the License.
*/
-export function createInitialQueryParametersState(defaultStepSize, tieBreakerField) {
+export function createInitialQueryParametersState(
+ defaultStepSize: number = 5,
+ tieBreakerField: string = '_doc'
+) {
return {
anchorId: null,
columns: [],
diff --git a/test/functional/page_objects/context_page.js b/test/functional/page_objects/context_page.js
index a189376f06454..437aa411c48d3 100644
--- a/test/functional/page_objects/context_page.js
+++ b/test/functional/page_objects/context_page.js
@@ -54,19 +54,19 @@ export function ContextPageProvider({ getService, getPageObjects }) {
}
async getPredecessorCountPicker() {
- return await testSubjects.find('predecessorCountPicker');
+ return await testSubjects.find('predecessorsCountPicker');
}
async getSuccessorCountPicker() {
- return await testSubjects.find('successorCountPicker');
+ return await testSubjects.find('successorsCountPicker');
}
async getPredecessorLoadMoreButton() {
- return await testSubjects.find('predecessorLoadMoreButton');
+ return await testSubjects.find('predecessorsLoadMoreButton');
}
async getSuccessorLoadMoreButton() {
- return await testSubjects.find('successorLoadMoreButton');
+ return await testSubjects.find('successorsLoadMoreButton');
}
async clickPredecessorLoadMoreButton() {
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index 8d6c837d87283..0d890c29f2897 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -1369,7 +1369,6 @@
"kbn.context.failedToLoadAnchorDocumentDescription": "別ののドキュメントの読み込みに失敗しました",
"kbn.context.failedToLoadAnchorDocumentErrorDescription": "別のドキュメントの読み込みに失敗しました。",
"kbn.context.loadingDescription": "読み込み中…",
- "kbn.context.loadMoreDescription": "他 {defaultStepSize} を読み込む",
"kbn.context.newerDocumentsDescription": "新しいドキュメント",
"kbn.context.noSearchableTiebreakerFieldDescription": "インデックスパターン {indexPatternId} で検索可能なタイブレーカーフィールドが見つかりませんでした。高度な設定 {tieBreakerFields} tを変更してこのインデックスパターンの有効なフィールドを含めてください。",
"kbn.context.olderDocumentsDescription": "古いドキュメント",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index 868c6606cd1c2..208bb36b58ac1 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -1369,7 +1369,6 @@
"kbn.context.failedToLoadAnchorDocumentDescription": "无法加载该定位点文档",
"kbn.context.failedToLoadAnchorDocumentErrorDescription": "无法加载定位点文档。",
"kbn.context.loadingDescription": "正在加载……",
- "kbn.context.loadMoreDescription": "再加载 {defaultStepSize} 个",
"kbn.context.newerDocumentsDescription": "较新文档",
"kbn.context.noSearchableTiebreakerFieldDescription": "索引模式 {indexPatternId} 中找不到任何可搜索的平分决胜字段。请更改高级设置“{tieBreakerFields}”以包括此索引模式的有效字段。",
"kbn.context.olderDocumentsDescription": "较旧文档",
From 904fe8ab726c2a2f48f5c31cf0ae1acd05959f4e Mon Sep 17 00:00:00 2001
From: Spencer
Date: Tue, 10 Sep 2019 08:27:46 -0700
Subject: [PATCH 05/24] add src/plugins to the list of plugin dirs to watch
(#45033)
* add src/plugins to the list of plugin dirs to watch
* include x-pack/plugins too
---
src/cli/cluster/cluster_manager.js | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/cli/cluster/cluster_manager.js b/src/cli/cluster/cluster_manager.js
index 342f838e4ee7a..bd32c5b9803a3 100644
--- a/src/cli/cluster/cluster_manager.js
+++ b/src/cli/cluster/cluster_manager.js
@@ -24,6 +24,7 @@ import opn from 'opn';
import { debounce, invoke, bindAll, once, uniq } from 'lodash';
import * as Rx from 'rxjs';
import { first, mapTo, filter, map, take } from 'rxjs/operators';
+import { REPO_ROOT } from '@kbn/dev-utils';
import Log from '../log';
import Worker from './worker';
@@ -102,8 +103,15 @@ export default class ClusterManager {
if (opts.watch) {
const pluginPaths = config.get('plugins.paths');
- const scanDirs = config.get('plugins.scanDirs');
- const extraPaths = [...pluginPaths, ...scanDirs];
+ const scanDirs = [
+ ...config.get('plugins.scanDirs'),
+ resolve(REPO_ROOT, 'src/plugins'),
+ resolve(REPO_ROOT, 'x-pack/plugins'),
+ ];
+ const extraPaths = [
+ ...pluginPaths,
+ ...scanDirs,
+ ];
const extraIgnores = scanDirs
.map(scanDir => resolve(scanDir, '*'))
From 078ac2897fbb2e32db08990e3cbbd8cb65b6f536 Mon Sep 17 00:00:00 2001
From: spalger
Date: Tue, 10 Sep 2019 09:03:23 -0700
Subject: [PATCH 06/24] Revert "Revert "[ci] compress jobs for CI stability"
(#44584)"
This reverts commit 50355d08f2cda0fbec162b0975c3439a7fb8cde0.
---
.ci/jobs.yml | 21 ++++---------------
.ci/run.sh | 10 ++-------
test/functional/apps/management/index.js | 4 ++--
test/functional/apps/visualize/index.ts | 8 +++----
test/mocha_decorations.d.ts | 12 +++++------
test/scripts/jenkins_firefox_smoke.sh | 2 ++
test/scripts/jenkins_unit.sh | 2 ++
test/scripts/jenkins_xpack_ci_group.sh | 8 +++----
.../security_and_spaces/tests/index.ts | 2 +-
.../spaces_only/tests/index.ts | 2 +-
x-pack/test/api_integration/apis/index.js | 2 +-
.../api_integration/apis/security/index.js | 2 +-
.../test/api_integration/apis/spaces/index.ts | 2 +-
x-pack/test/functional/apps/apm/index.ts | 2 +-
.../functional/apps/dashboard_mode/index.js | 2 +-
.../apps/index_lifecycle_management/index.ts | 2 +-
x-pack/test/functional/apps/infra/index.ts | 2 +-
.../apps/license_management/index.ts | 2 +-
x-pack/test/functional/apps/maps/index.js | 4 ++--
x-pack/test/functional/apps/uptime/index.ts | 2 +-
.../kerberos_api_integration/apis/index.ts | 2 +-
.../apis/authorization_code_flow/index.js | 2 +-
.../apis/implicit_flow/index.ts | 2 +-
x-pack/test/pki_api_integration/apis/index.ts | 2 +-
x-pack/test/reporting/functional/index.js | 2 +-
.../test/saml_api_integration/apis/index.js | 2 +-
.../security_only/apis/index.ts | 2 +-
.../security_and_spaces/apis/index.ts | 2 +-
.../test/token_api_integration/auth/index.js | 2 +-
.../security_and_spaces/tests/index.ts | 2 +-
.../security_only/tests/index.ts | 2 +-
.../spaces_only/tests/index.ts | 2 +-
.../upgrade_assistant/index.js | 2 +-
.../visual_regression/tests/maps/index.js | 2 +-
34 files changed, 53 insertions(+), 68 deletions(-)
diff --git a/.ci/jobs.yml b/.ci/jobs.yml
index 3f1b5302f87b0..fe28ae79268de 100644
--- a/.ci/jobs.yml
+++ b/.ci/jobs.yml
@@ -1,34 +1,21 @@
JOB:
- - kibana-intake
- - x-pack-intake
- - kibana-firefoxSmoke
+ - intake
+ - firefoxSmoke
- kibana-ciGroup1
- kibana-ciGroup2
- kibana-ciGroup3
- kibana-ciGroup4
- kibana-ciGroup5
- kibana-ciGroup6
- - kibana-ciGroup7
- - kibana-ciGroup8
- - kibana-ciGroup9
- - kibana-ciGroup10
- - kibana-ciGroup11
- - kibana-ciGroup12
- - kibana-visualRegression
+ # - kibana-visualRegression
# make sure all x-pack-ciGroups are listed in test/scripts/jenkins_xpack_ci_group.sh
- - x-pack-firefoxSmoke
- x-pack-ciGroup1
- x-pack-ciGroup2
- x-pack-ciGroup3
- x-pack-ciGroup4
- x-pack-ciGroup5
- - x-pack-ciGroup6
- - x-pack-ciGroup7
- - x-pack-ciGroup8
- - x-pack-ciGroup9
- - x-pack-ciGroup10
- - x-pack-visualRegression
+ # - x-pack-visualRegression
# `~` is yaml for `null`
exclude: ~
\ No newline at end of file
diff --git a/.ci/run.sh b/.ci/run.sh
index 88ce0bd9986a1..e5c26c48546f7 100755
--- a/.ci/run.sh
+++ b/.ci/run.sh
@@ -11,7 +11,7 @@ source src/dev/ci_setup/setup.sh
source src/dev/ci_setup/checkout_sibling_es.sh
case "$JOB" in
-kibana-intake)
+intake)
./test/scripts/jenkins_unit.sh
;;
kibana-ciGroup*)
@@ -21,12 +21,9 @@ kibana-ciGroup*)
kibana-visualRegression*)
./test/scripts/jenkins_visual_regression.sh
;;
-kibana-firefoxSmoke*)
+firefoxSmoke*)
./test/scripts/jenkins_firefox_smoke.sh
;;
-x-pack-intake)
- ./test/scripts/jenkins_xpack.sh
- ;;
x-pack-ciGroup*)
export CI_GROUP="${JOB##x-pack-ciGroup}"
./test/scripts/jenkins_xpack_ci_group.sh
@@ -34,9 +31,6 @@ x-pack-ciGroup*)
x-pack-visualRegression*)
./test/scripts/jenkins_xpack_visual_regression.sh
;;
-x-pack-firefoxSmoke*)
- ./test/scripts/jenkins_xpack_firefox_smoke.sh
- ;;
*)
echo "JOB '$JOB' is not implemented."
exit 1
diff --git a/test/functional/apps/management/index.js b/test/functional/apps/management/index.js
index 4d4031b4e489b..c9b444e501789 100644
--- a/test/functional/apps/management/index.js
+++ b/test/functional/apps/management/index.js
@@ -33,7 +33,7 @@ export default function ({ getService, loadTestFile }) {
});
describe('', function () {
- this.tags('ciGroup7');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./_create_index_pattern_wizard'));
loadTestFile(require.resolve('./_index_pattern_create_delete'));
@@ -45,7 +45,7 @@ export default function ({ getService, loadTestFile }) {
});
describe('', function () {
- this.tags('ciGroup8');
+ this.tags('ciGroup2');
loadTestFile(require.resolve('./_index_pattern_filter'));
loadTestFile(require.resolve('./_scripted_fields_filter'));
diff --git a/test/functional/apps/visualize/index.ts b/test/functional/apps/visualize/index.ts
index 2a13b6fea9158..68a00b29d107e 100644
--- a/test/functional/apps/visualize/index.ts
+++ b/test/functional/apps/visualize/index.ts
@@ -40,7 +40,7 @@ export default function({ getService, loadTestFile }: FtrProviderContext) {
});
describe('', function() {
- this.tags('ciGroup9');
+ this.tags('ciGroup3');
loadTestFile(require.resolve('./_embedding_chart'));
loadTestFile(require.resolve('./_chart_types'));
@@ -50,7 +50,7 @@ export default function({ getService, loadTestFile }: FtrProviderContext) {
});
describe('', function() {
- this.tags('ciGroup10');
+ this.tags('ciGroup4');
loadTestFile(require.resolve('./_inspector'));
loadTestFile(require.resolve('./_experimental_vis'));
@@ -62,7 +62,7 @@ export default function({ getService, loadTestFile }: FtrProviderContext) {
});
describe('', function() {
- this.tags('ciGroup11');
+ this.tags('ciGroup5');
loadTestFile(require.resolve('./_line_chart'));
loadTestFile(require.resolve('./_pie_chart'));
@@ -76,7 +76,7 @@ export default function({ getService, loadTestFile }: FtrProviderContext) {
});
describe('', function() {
- this.tags('ciGroup12');
+ this.tags('ciGroup6');
loadTestFile(require.resolve('./_tag_cloud'));
loadTestFile(require.resolve('./_tile_map'));
diff --git a/test/mocha_decorations.d.ts b/test/mocha_decorations.d.ts
index 4645faf3d5fe8..f6fca538a2159 100644
--- a/test/mocha_decorations.d.ts
+++ b/test/mocha_decorations.d.ts
@@ -26,12 +26,12 @@ type Tags =
| 'ciGroup4'
| 'ciGroup5'
| 'ciGroup6'
- | 'ciGroup7'
- | 'ciGroup8'
- | 'ciGroup9'
- | 'ciGroup10'
- | 'ciGroup11'
- | 'ciGroup12';
+ | 'ciGroup1'
+ | 'ciGroup2'
+ | 'ciGroup3'
+ | 'ciGroup4'
+ | 'ciGroup5'
+ | 'ciGroup6';
// We need to use the namespace here to match the Mocha definition
// eslint-disable-next-line @typescript-eslint/no-namespace
diff --git a/test/scripts/jenkins_firefox_smoke.sh b/test/scripts/jenkins_firefox_smoke.sh
index bf3fe0691aa11..50e5843eb46f5 100755
--- a/test/scripts/jenkins_firefox_smoke.sh
+++ b/test/scripts/jenkins_firefox_smoke.sh
@@ -17,3 +17,5 @@ checks-reporter-with-killswitch "Firefox smoke test" \
--kibana-install-dir "$installDir" \
--include-tag "smoke" \
--config test/functional/config.firefox.js;
+
+source "$KIBANA_DIR/test/scripts/jenkins_xpack_firefox_smoke.sh"
diff --git a/test/scripts/jenkins_unit.sh b/test/scripts/jenkins_unit.sh
index b5ae3724ce37c..b304c555b79ca 100755
--- a/test/scripts/jenkins_unit.sh
+++ b/test/scripts/jenkins_unit.sh
@@ -6,3 +6,5 @@ trap 'node "$KIBANA_DIR/src/dev/failed_tests/cli"' EXIT
export TEST_BROWSER_HEADLESS=1
"$(FORCE_COLOR=0 yarn bin)/grunt" jenkins:unit --dev;
+
+source "$KIBANA_DIR/test/scripts/jenkins_xpack.sh"
diff --git a/test/scripts/jenkins_xpack_ci_group.sh b/test/scripts/jenkins_xpack_ci_group.sh
index 3527aa5eedfa9..5fc376a8d72e3 100755
--- a/test/scripts/jenkins_xpack_ci_group.sh
+++ b/test/scripts/jenkins_xpack_ci_group.sh
@@ -14,10 +14,10 @@ node scripts/functional_tests --assert-none-excluded \
--include-tag ciGroup4 \
--include-tag ciGroup5 \
--include-tag ciGroup6 \
- --include-tag ciGroup7 \
- --include-tag ciGroup8 \
- --include-tag ciGroup9 \
- --include-tag ciGroup10
+ --include-tag ciGroup1 \
+ --include-tag ciGroup2 \
+ --include-tag ciGroup3 \
+ --include-tag ciGroup4
echo " -> building and extracting default Kibana distributable for use in functional tests"
cd "$KIBANA_DIR"
diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/index.ts
index 4c2dc3cbdf11f..d3d5ca592ce63 100644
--- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/index.ts
+++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/index.ts
@@ -19,7 +19,7 @@ export default function alertingApiIntegrationTests({
const esArchiver = getService('esArchiver');
describe('alerting api integration security and spaces enabled', function() {
- this.tags('ciGroup8');
+ this.tags('ciGroup3');
before(async () => {
for (const space of Spaces) {
diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/index.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/index.ts
index dfbb2cca81a49..8c59e39818619 100644
--- a/x-pack/test/alerting_api_integration/spaces_only/tests/index.ts
+++ b/x-pack/test/alerting_api_integration/spaces_only/tests/index.ts
@@ -17,7 +17,7 @@ export default function alertingApiIntegrationTests({
const esArchiver = getService('esArchiver');
describe('alerting api integration spaces only', function() {
- this.tags('ciGroup8');
+ this.tags('ciGroup3');
before(async () => {
for (const space of Object.values(Spaces)) {
diff --git a/x-pack/test/api_integration/apis/index.js b/x-pack/test/api_integration/apis/index.js
index 09186f4a60502..ffb3e1c64774f 100644
--- a/x-pack/test/api_integration/apis/index.js
+++ b/x-pack/test/api_integration/apis/index.js
@@ -6,7 +6,7 @@
export default function ({ loadTestFile }) {
describe('apis', function () {
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./es'));
loadTestFile(require.resolve('./security'));
diff --git a/x-pack/test/api_integration/apis/security/index.js b/x-pack/test/api_integration/apis/security/index.js
index 4d034622427fc..2174b578abff5 100644
--- a/x-pack/test/api_integration/apis/security/index.js
+++ b/x-pack/test/api_integration/apis/security/index.js
@@ -6,7 +6,7 @@
export default function ({ loadTestFile }) {
describe('security', function () {
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./basic_login'));
loadTestFile(require.resolve('./builtin_es_privileges'));
diff --git a/x-pack/test/api_integration/apis/spaces/index.ts b/x-pack/test/api_integration/apis/spaces/index.ts
index adcf70d032e0f..f3f96b891db07 100644
--- a/x-pack/test/api_integration/apis/spaces/index.ts
+++ b/x-pack/test/api_integration/apis/spaces/index.ts
@@ -7,7 +7,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default function({ loadTestFile }: FtrProviderContext) {
describe('spaces', function() {
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./saved_objects'));
loadTestFile(require.resolve('./space_attributes'));
diff --git a/x-pack/test/functional/apps/apm/index.ts b/x-pack/test/functional/apps/apm/index.ts
index 945af09183f03..977b6fca549c3 100644
--- a/x-pack/test/functional/apps/apm/index.ts
+++ b/x-pack/test/functional/apps/apm/index.ts
@@ -7,7 +7,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default function({ loadTestFile }: FtrProviderContext) {
describe('APM', function() {
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./feature_controls'));
});
}
diff --git a/x-pack/test/functional/apps/dashboard_mode/index.js b/x-pack/test/functional/apps/dashboard_mode/index.js
index 2d263834fc311..5612fced7a25d 100644
--- a/x-pack/test/functional/apps/dashboard_mode/index.js
+++ b/x-pack/test/functional/apps/dashboard_mode/index.js
@@ -6,7 +6,7 @@
export default function ({ loadTestFile }) {
describe('dashboard mode', function () {
- this.tags('ciGroup7');
+ this.tags('ciGroup2');
loadTestFile(require.resolve('./dashboard_view_mode'));
});
diff --git a/x-pack/test/functional/apps/index_lifecycle_management/index.ts b/x-pack/test/functional/apps/index_lifecycle_management/index.ts
index 9078a9d681e7e..d85b1af2b2612 100644
--- a/x-pack/test/functional/apps/index_lifecycle_management/index.ts
+++ b/x-pack/test/functional/apps/index_lifecycle_management/index.ts
@@ -8,7 +8,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default ({ loadTestFile }: FtrProviderContext) => {
describe('Index Lifecycle Management app', function() {
- this.tags('ciGroup7');
+ this.tags('ciGroup2');
loadTestFile(require.resolve('./home_page'));
});
};
diff --git a/x-pack/test/functional/apps/infra/index.ts b/x-pack/test/functional/apps/infra/index.ts
index b706dc8cce546..b534f6b69fe5b 100644
--- a/x-pack/test/functional/apps/infra/index.ts
+++ b/x-pack/test/functional/apps/infra/index.ts
@@ -8,7 +8,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default ({ loadTestFile }: FtrProviderContext) => {
describe('InfraOps app', function() {
- this.tags('ciGroup7');
+ this.tags('ciGroup2');
loadTestFile(require.resolve('./home_page'));
loadTestFile(require.resolve('./feature_controls'));
diff --git a/x-pack/test/functional/apps/license_management/index.ts b/x-pack/test/functional/apps/license_management/index.ts
index 7524d00a4b8dd..a41e4f5f4abd1 100644
--- a/x-pack/test/functional/apps/license_management/index.ts
+++ b/x-pack/test/functional/apps/license_management/index.ts
@@ -8,7 +8,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default ({ loadTestFile }: FtrProviderContext) => {
describe('License app', function() {
- this.tags('ciGroup7');
+ this.tags('ciGroup2');
loadTestFile(require.resolve('./home_page'));
});
};
diff --git a/x-pack/test/functional/apps/maps/index.js b/x-pack/test/functional/apps/maps/index.js
index 9880fe41076d0..76cccc9f5d21a 100644
--- a/x-pack/test/functional/apps/maps/index.js
+++ b/x-pack/test/functional/apps/maps/index.js
@@ -28,7 +28,7 @@ export default function ({ loadTestFile, getService }) {
});
describe('', function () {
- this.tags('ciGroup7');
+ this.tags('ciGroup2');
loadTestFile(require.resolve('./documents_source'));
loadTestFile(require.resolve('./saved_object_management'));
loadTestFile(require.resolve('./sample_data'));
@@ -38,7 +38,7 @@ export default function ({ loadTestFile, getService }) {
});
describe('', function () {
- this.tags('ciGroup10');
+ this.tags('ciGroup5');
loadTestFile(require.resolve('./es_geo_grid_source'));
loadTestFile(require.resolve('./joins'));
loadTestFile(require.resolve('./add_layer_panel'));
diff --git a/x-pack/test/functional/apps/uptime/index.ts b/x-pack/test/functional/apps/uptime/index.ts
index c1bc8f856c467..b5d3c73c96855 100644
--- a/x-pack/test/functional/apps/uptime/index.ts
+++ b/x-pack/test/functional/apps/uptime/index.ts
@@ -18,7 +18,7 @@ export default ({ loadTestFile, getService }: FtrProviderContext) => {
await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'UTC' });
});
after(async () => await esArchiver.unload(ARCHIVE));
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./feature_controls'));
loadTestFile(require.resolve('./overview'));
diff --git a/x-pack/test/kerberos_api_integration/apis/index.ts b/x-pack/test/kerberos_api_integration/apis/index.ts
index 00818c2b59eee..6bb924818a672 100644
--- a/x-pack/test/kerberos_api_integration/apis/index.ts
+++ b/x-pack/test/kerberos_api_integration/apis/index.ts
@@ -8,7 +8,7 @@ import { FtrProviderContext } from '../ftr_provider_context';
export default function({ loadTestFile }: FtrProviderContext) {
describe('apis Kerberos', function() {
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./security'));
});
}
diff --git a/x-pack/test/oidc_api_integration/apis/authorization_code_flow/index.js b/x-pack/test/oidc_api_integration/apis/authorization_code_flow/index.js
index 0ef60bb929826..85f2a82cc9641 100644
--- a/x-pack/test/oidc_api_integration/apis/authorization_code_flow/index.js
+++ b/x-pack/test/oidc_api_integration/apis/authorization_code_flow/index.js
@@ -6,7 +6,7 @@
export default function ({ loadTestFile }) {
describe('apis', function () {
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./oidc_auth'));
});
}
diff --git a/x-pack/test/oidc_api_integration/apis/implicit_flow/index.ts b/x-pack/test/oidc_api_integration/apis/implicit_flow/index.ts
index 22ce3b17a5949..0503efea77eab 100644
--- a/x-pack/test/oidc_api_integration/apis/implicit_flow/index.ts
+++ b/x-pack/test/oidc_api_integration/apis/implicit_flow/index.ts
@@ -9,7 +9,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
// eslint-disable-next-line import/no-default-export
export default function({ loadTestFile }: FtrProviderContext) {
describe('apis', function() {
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./oidc_auth'));
});
}
diff --git a/x-pack/test/pki_api_integration/apis/index.ts b/x-pack/test/pki_api_integration/apis/index.ts
index d859ed172ac69..47ffb25835d43 100644
--- a/x-pack/test/pki_api_integration/apis/index.ts
+++ b/x-pack/test/pki_api_integration/apis/index.ts
@@ -8,7 +8,7 @@ import { FtrProviderContext } from '../ftr_provider_context';
export default function({ loadTestFile }: FtrProviderContext) {
describe('apis PKI', function() {
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./security'));
});
}
diff --git a/x-pack/test/reporting/functional/index.js b/x-pack/test/reporting/functional/index.js
index fa473f454a925..17aeb03eeadb5 100644
--- a/x-pack/test/reporting/functional/index.js
+++ b/x-pack/test/reporting/functional/index.js
@@ -6,7 +6,7 @@
export default function ({ loadTestFile }) {
describe('reporting app', function () {
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./reporting'));
});
}
diff --git a/x-pack/test/saml_api_integration/apis/index.js b/x-pack/test/saml_api_integration/apis/index.js
index ac08d2e078abf..b4e6503f201e5 100644
--- a/x-pack/test/saml_api_integration/apis/index.js
+++ b/x-pack/test/saml_api_integration/apis/index.js
@@ -6,7 +6,7 @@
export default function ({ loadTestFile }) {
describe('apis SAML', function () {
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./security'));
});
}
diff --git a/x-pack/test/saved_object_api_integration/security_only/apis/index.ts b/x-pack/test/saved_object_api_integration/security_only/apis/index.ts
index fadefd2743b30..e24de7c7ae77f 100644
--- a/x-pack/test/saved_object_api_integration/security_only/apis/index.ts
+++ b/x-pack/test/saved_object_api_integration/security_only/apis/index.ts
@@ -12,7 +12,7 @@ export default function({ getService, loadTestFile }: FtrProviderContext) {
const supertest = getService('supertest');
describe('saved objects security only enabled', function() {
- this.tags('ciGroup9');
+ this.tags('ciGroup4');
before(async () => {
await createUsersAndRoles(es, supertest);
diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/apis/index.ts b/x-pack/test/spaces_api_integration/security_and_spaces/apis/index.ts
index 4493a5332b62c..b54345d78456f 100644
--- a/x-pack/test/spaces_api_integration/security_and_spaces/apis/index.ts
+++ b/x-pack/test/spaces_api_integration/security_and_spaces/apis/index.ts
@@ -13,7 +13,7 @@ export default function({ loadTestFile, getService }: TestInvoker) {
const supertest = getService('supertest');
describe('spaces api with security', function() {
- this.tags('ciGroup8');
+ this.tags('ciGroup3');
before(async () => {
await createUsersAndRoles(es, supertest);
diff --git a/x-pack/test/token_api_integration/auth/index.js b/x-pack/test/token_api_integration/auth/index.js
index e7b5a5b46a503..528a5c4bf8cf5 100644
--- a/x-pack/test/token_api_integration/auth/index.js
+++ b/x-pack/test/token_api_integration/auth/index.js
@@ -6,7 +6,7 @@
export default function ({ loadTestFile }) {
describe('token-based auth', function () {
- this.tags('ciGroup6');
+ this.tags('ciGroup1');
loadTestFile(require.resolve('./login'));
loadTestFile(require.resolve('./logout'));
loadTestFile(require.resolve('./header'));
diff --git a/x-pack/test/ui_capabilities/security_and_spaces/tests/index.ts b/x-pack/test/ui_capabilities/security_and_spaces/tests/index.ts
index e28ea819bfdfc..f87bb10aaf083 100644
--- a/x-pack/test/ui_capabilities/security_and_spaces/tests/index.ts
+++ b/x-pack/test/ui_capabilities/security_and_spaces/tests/index.ts
@@ -17,7 +17,7 @@ export default function uiCapabilitiesTests({ loadTestFile, getService }: FtrPro
const featuresService: FeaturesService = getService('features');
describe('ui capabilities', function() {
- this.tags('ciGroup9');
+ this.tags('ciGroup4');
before(async () => {
const features = await featuresService.get();
diff --git a/x-pack/test/ui_capabilities/security_only/tests/index.ts b/x-pack/test/ui_capabilities/security_only/tests/index.ts
index b84c02f9d65c0..a941e64839726 100644
--- a/x-pack/test/ui_capabilities/security_only/tests/index.ts
+++ b/x-pack/test/ui_capabilities/security_only/tests/index.ts
@@ -13,7 +13,7 @@ export default function uiCapabilitesTests({ loadTestFile, getService }: FtrProv
const securityService: SecurityService = getService('security');
describe('ui capabilities', function() {
- this.tags('ciGroup9');
+ this.tags('ciGroup4');
before(async () => {
for (const user of UserScenarios) {
diff --git a/x-pack/test/ui_capabilities/spaces_only/tests/index.ts b/x-pack/test/ui_capabilities/spaces_only/tests/index.ts
index 294f545c7d90f..177ca0064a6bf 100644
--- a/x-pack/test/ui_capabilities/spaces_only/tests/index.ts
+++ b/x-pack/test/ui_capabilities/spaces_only/tests/index.ts
@@ -14,7 +14,7 @@ export default function uiCapabilitesTests({ loadTestFile, getService }: FtrProv
const featuresService: FeaturesService = getService('features');
describe('ui capabilities', function() {
- this.tags('ciGroup9');
+ this.tags('ciGroup4');
before(async () => {
const features = await featuresService.get();
diff --git a/x-pack/test/upgrade_assistant_integration/upgrade_assistant/index.js b/x-pack/test/upgrade_assistant_integration/upgrade_assistant/index.js
index 1b7406b37022a..82e9214f55398 100644
--- a/x-pack/test/upgrade_assistant_integration/upgrade_assistant/index.js
+++ b/x-pack/test/upgrade_assistant_integration/upgrade_assistant/index.js
@@ -6,7 +6,7 @@
export default function ({ loadTestFile }) {
describe('upgrade assistant', function () {
- this.tags('ciGroup7');
+ this.tags('ciGroup2');
loadTestFile(require.resolve('./reindexing'));
});
diff --git a/x-pack/test/visual_regression/tests/maps/index.js b/x-pack/test/visual_regression/tests/maps/index.js
index de5c50e900ca8..c080e5727b243 100644
--- a/x-pack/test/visual_regression/tests/maps/index.js
+++ b/x-pack/test/visual_regression/tests/maps/index.js
@@ -26,7 +26,7 @@ export default function ({ loadTestFile, getService }) {
await esArchiver.unload('maps/kibana');
});
- this.tags('ciGroup10');
+ this.tags('ciGroup5');
loadTestFile(require.resolve('./vector_styling'));
});
}
From d5e370d3bec3ba7b7178667689646cd7112b092a Mon Sep 17 00:00:00 2001
From: Nathan Reese
Date: Tue, 10 Sep 2019 11:00:31 -0600
Subject: [PATCH 07/24] [skip ci][Maps] Update search document section with new
features (#44819)
* [skip ci][Maps] Update search document section with new features
* Update docs/maps/search.asciidoc
Co-Authored-By: gchaps <33642766+gchaps@users.noreply.github.com>
* Update docs/maps/search.asciidoc
Co-Authored-By: gchaps <33642766+gchaps@users.noreply.github.com>
* Update docs/maps/search.asciidoc
Co-Authored-By: gchaps <33642766+gchaps@users.noreply.github.com>
* Update docs/maps/search.asciidoc
Co-Authored-By: gchaps <33642766+gchaps@users.noreply.github.com>
* Update docs/maps/search.asciidoc
Co-Authored-By: gchaps <33642766+gchaps@users.noreply.github.com>
* Update docs/maps/search.asciidoc
Co-Authored-By: gchaps <33642766+gchaps@users.noreply.github.com>
* Update docs/maps/search.asciidoc
Co-Authored-By: gchaps <33642766+gchaps@users.noreply.github.com>
* review feedback
* review feedback
---
docs/maps/images/create_phrase_filter.png | Bin 0 -> 88847 bytes
docs/maps/images/create_spatial_filter.png | Bin 0 -> 414766 bytes
docs/maps/images/filter_icon.png | Bin 0 -> 3845 bytes
docs/maps/images/global_search_bar.png | Bin 502606 -> 494082 bytes
.../global_search_multiple_indices_query1.png | Bin 2640894 -> 1039220 bytes
.../global_search_multiple_indices_query2.png | Bin 2895463 -> 1055983 bytes
docs/maps/images/tools_icon.png | Bin 0 -> 3889 bytes
docs/maps/search.asciidoc | 55 +++++++++++++++++-
8 files changed, 53 insertions(+), 2 deletions(-)
create mode 100644 docs/maps/images/create_phrase_filter.png
create mode 100644 docs/maps/images/create_spatial_filter.png
create mode 100644 docs/maps/images/filter_icon.png
create mode 100644 docs/maps/images/tools_icon.png
diff --git a/docs/maps/images/create_phrase_filter.png b/docs/maps/images/create_phrase_filter.png
new file mode 100644
index 0000000000000000000000000000000000000000..720aecf44d9fafcd5575096955721cf8ebf8bd01
GIT binary patch
literal 88847
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
z V#
z)rsl}r5Yai0qZV2E~ZpT)oY46=lh>U*|C-vZd@}bCez%vU!_P{R0H?aWsclo$#=(l
zOo%7KKOwRXgkwQ8x*gphcD@bla0NBq*Sc6R25%;2iTE`LHzJ>3U1UuJ1f$6HI8ZCh_I(YVapQVCG5u0T~A~
zjj9rlanAf#6|
zs#4s}$lzx)E#-t8RtI(oQ`4`iEIP?G%Up>2M){l=Qm{s>4*V$4JJIvXZOerHwS$9R
zku6)q8j9OCCI5Us=CIF}(*NJ`X#$ug#ULq%VCE5i@iB5X!GoqJ4!LFUNcV6IpxkF!
zJxNO89|vwl>RRfwa%E-lt1nfmQuPG7Q@jVaS+0XM93@^zwqbf7z}dYU?mk-=uuDnuwNC(xL;;qzRZ`6}|S>|~#*?5q&-OBE<2!}zLC3z#N22CSB`_xc}lJh4SMKu7dJ#vsP`{Y1cN+O%;l
zS|A)N&ZV!6*H$qpGwx+stFCr0fME{$gZ@;#*U(74JP^kNhieiO?jntsHtAKj_0hAt
zj3G1B>9p?bI!g2b#>AvZU=L>e
z%Cy->*Op$?vQK%5&|RtY!UlJ_!&tlHTS&?aH)4qtTwd~n4thC!x~BUo07z`d#V-+kw^hFF`>o`LZYgA?Vy2=kZ7HE7U_OJ#Hx4h?fBIUrZ4fa=;R9t75%
zohTm?3}^D^+`DFlaV?K_IfN$#F**W;(ZIWDL06#Ud)<#iE-cs}MX=Myh*UdPmN?2x
z_LiOZ4e{(p$!ki*xamwC>jLNI2K@8z?d@YEM*Wgdh4uf8eo~n^Hp-Z~^2$l2F8SF34%noRAf;
ziue_2PyK`u^`VZRO?n=h-ZB+`#k4&_#*MRc!Dz#9Pw$>&vLPB6X@nW7_kIAZ=)WG!
zeW_L2rti_?&W`ax$`A#+$-0m2Ag9%7UW~^Bfjp!%0xN}A;JAtZ+Y2$Elqk?o5SY|l
zC~l(^ty6xbhS-(2AqLgha2knNYHT!JcJku#t^HGph=1}dTkWY6!agxJIj2H<6thiN
zSQG7We6%{d3b7KA>4cK`amKBLE|L24LaT+R4B3}^aOl7XvUe-m}!9+Gd-xa(URa5j&m6oSafCjOIuu!U)e|%Gp7zz
z5a2H7T4af=
zW#9^!EDzr}zl0{T18bB%86M;~9#Ic!joT
zpb7On2<3P?UnO6rV1~T|!dEj1=wG#&gNSqmuM+k@nXbH0^n@SAEmHoo%8e}0Pi(M~
zSKKGf%HQy$kzl?BI!>7H@*qSZFqMt~KE&UyBRuP}vlJbp>`%i?_98;8V+}PrKVcZ~MAfq8-h6
z$qTaxSp|9f>7FS|pB#Xx)#z4EAk}W_43wQXOC$e_rVF~hef-`Tg-ljCZYI+n;8;!|
zKF{FTYsPxu1CK;*
z+$L7{JSub@LtcfA8t%{Lg^ogkl6ax&m~GVmex&7Z*zohM_+GlhbyzsY(}RGHDZ31a
z_Y*gpKprR6{gDrR@gT5v4lB3FGoX7bubOV?=n<99PtJ+{@8_*Ydl>vX@-I)Vw&cIw
zfzm`j)FBzaXJ_?iUVt%eWYxw2~`;Q%AoDr|;DB%?mV2O9iDeteJG
zw5L{2mI-rFM