diff --git a/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap b/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap index 7757e2fdd4584d..48c5db79fddd0f 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap +++ b/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap @@ -1,5 +1,37 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`IndexPattern getAsSavedObjectBody allowNoIndex perserves all fields 1`] = ` +Object { + "allowNoIndex": true, + "fieldAttrs": "{\\"bytes\\":{\\"count\\":10},\\"ssl\\":{\\"count\\":20},\\"@timestamp\\":{\\"count\\":30},\\"time\\":{\\"count\\":30}}", + "fieldFormatMap": undefined, + "fields": "[{\\"count\\":10,\\"name\\":\\"bytes\\",\\"type\\":\\"number\\",\\"esTypes\\":[\\"long\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":20,\\"name\\":\\"ssl\\",\\"type\\":\\"boolean\\",\\"esTypes\\":[\\"boolean\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":30,\\"name\\":\\"@timestamp\\",\\"type\\":\\"date\\",\\"esTypes\\":[\\"date\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":30,\\"name\\":\\"time\\",\\"type\\":\\"date\\",\\"esTypes\\":[\\"date\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":0,\\"name\\":\\"@tags\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"keyword\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":0,\\"name\\":\\"utc_time\\",\\"type\\":\\"date\\",\\"esTypes\\":[\\"date\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":0,\\"name\\":\\"phpmemory\\",\\"type\\":\\"number\\",\\"esTypes\\":[\\"integer\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":0,\\"name\\":\\"ip\\",\\"type\\":\\"ip\\",\\"esTypes\\":[\\"ip\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":0,\\"name\\":\\"request_body\\",\\"type\\":\\"attachment\\",\\"esTypes\\":[\\"attachment\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":0,\\"name\\":\\"point\\",\\"type\\":\\"geo_point\\",\\"esTypes\\":[\\"geo_point\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":0,\\"name\\":\\"area\\",\\"type\\":\\"geo_shape\\",\\"esTypes\\":[\\"geo_shape\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"name\\":\\"hashed\\",\\"type\\":\\"murmur3\\",\\"esTypes\\":[\\"murmur3\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"count\\":0,\\"name\\":\\"geo.coordinates\\",\\"type\\":\\"geo_point\\",\\"esTypes\\":[\\"geo_point\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":0,\\"name\\":\\"extension\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"text\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"name\\":\\"extension.keyword\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"keyword\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true,\\"subType\\":{\\"multi\\":{\\"parent\\":\\"extension\\"}}},{\\"count\\":0,\\"name\\":\\"machine.os\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"text\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"name\\":\\"machine.os.raw\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"keyword\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true,\\"subType\\":{\\"multi\\":{\\"parent\\":\\"machine.os\\"}}},{\\"count\\":0,\\"name\\":\\"geo.src\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"keyword\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":0,\\"name\\":\\"_id\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"_id\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"name\\":\\"_type\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"_type\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"name\\":\\"_source\\",\\"type\\":\\"_source\\",\\"esTypes\\":[\\"_source\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"name\\":\\"non-filterable\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"text\\"],\\"scripted\\":false,\\"searchable\\":false,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"name\\":\\"non-sortable\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"text\\"],\\"scripted\\":false,\\"searchable\\":false,\\"aggregatable\\":false,\\"readFromDocValues\\":false},{\\"count\\":0,\\"name\\":\\"custom_user_field\\",\\"type\\":\\"conflict\\",\\"esTypes\\":[\\"conflict\\"],\\"scripted\\":false,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":true},{\\"count\\":0,\\"script\\":\\"'i am a string'\\",\\"lang\\":\\"expression\\",\\"name\\":\\"script string\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"text\\"],\\"scripted\\":true,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"script\\":\\"1234\\",\\"lang\\":\\"expression\\",\\"name\\":\\"script number\\",\\"type\\":\\"number\\",\\"esTypes\\":[\\"long\\"],\\"scripted\\":true,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"script\\":\\"1234\\",\\"lang\\":\\"painless\\",\\"name\\":\\"script date\\",\\"type\\":\\"date\\",\\"esTypes\\":[\\"date\\"],\\"scripted\\":true,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"script\\":\\"1234\\",\\"lang\\":\\"expression\\",\\"name\\":\\"script murmur3\\",\\"type\\":\\"murmur3\\",\\"esTypes\\":[\\"murmur3\\"],\\"scripted\\":true,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"name\\":\\"runtime_field\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"keyword\\"],\\"scripted\\":false,\\"searchable\\":false,\\"aggregatable\\":false,\\"readFromDocValues\\":false}]", + "intervalName": undefined, + "runtimeFieldMap": "{\\"runtime_field\\":{\\"type\\":\\"keyword\\",\\"script\\":{\\"source\\":\\"emit('hello world')\\"}}}", + "sourceFilters": undefined, + "timeFieldName": "timestamp", + "title": "title", + "type": "index-pattern", + "typeMeta": undefined, +} +`; + +exports[`IndexPattern getAsSavedObjectBody should match snapshot 1`] = ` +Object { + "allowNoIndex": undefined, + "fieldAttrs": "{\\"bytes\\":{\\"count\\":10},\\"ssl\\":{\\"count\\":20},\\"@timestamp\\":{\\"count\\":30},\\"time\\":{\\"count\\":30}}", + "fieldFormatMap": undefined, + "fields": "[{\\"count\\":0,\\"script\\":\\"'i am a string'\\",\\"lang\\":\\"expression\\",\\"name\\":\\"script string\\",\\"type\\":\\"string\\",\\"esTypes\\":[\\"text\\"],\\"scripted\\":true,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"script\\":\\"1234\\",\\"lang\\":\\"expression\\",\\"name\\":\\"script number\\",\\"type\\":\\"number\\",\\"esTypes\\":[\\"long\\"],\\"scripted\\":true,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"script\\":\\"1234\\",\\"lang\\":\\"painless\\",\\"name\\":\\"script date\\",\\"type\\":\\"date\\",\\"esTypes\\":[\\"date\\"],\\"scripted\\":true,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false},{\\"count\\":0,\\"script\\":\\"1234\\",\\"lang\\":\\"expression\\",\\"name\\":\\"script murmur3\\",\\"type\\":\\"murmur3\\",\\"esTypes\\":[\\"murmur3\\"],\\"scripted\\":true,\\"searchable\\":true,\\"aggregatable\\":true,\\"readFromDocValues\\":false}]", + "intervalName": undefined, + "runtimeFieldMap": "{\\"runtime_field\\":{\\"type\\":\\"keyword\\",\\"script\\":{\\"source\\":\\"emit('hello world')\\"}}}", + "sourceFilters": undefined, + "timeFieldName": "timestamp", + "title": "title", + "type": "index-pattern", + "typeMeta": undefined, +} +`; + exports[`IndexPattern toSpec should match snapshot 1`] = ` Object { "allowNoIndex": false, diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts index 508bddb7a4096f..8d9e46ef8dd1d1 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts +++ b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts @@ -17,7 +17,7 @@ import { stubbedSavedObjectIndexPattern } from './fixtures/stubbed_saved_object_ import { IndexPatternField } from '../fields'; import { fieldFormatsMock } from '../../field_formats/mocks'; -import { FieldFormat } from '../..'; +import { FieldFormat, IndexPatternSpec } from '../..'; import { RuntimeField } from '../types'; class MockFieldFormatter {} @@ -42,7 +42,7 @@ const runtimeField = { fieldFormatsMock.getInstance = jest.fn().mockImplementation(() => new MockFieldFormatter()) as any; // helper function to create index patterns -function create(id: string) { +function create(id: string, spec?: Partial) { const { type, version, @@ -58,6 +58,7 @@ function create(id: string) { fields: { ...fields, runtime_field: runtimeField }, title, runtimeFieldMap, + ...(spec || {}), }, fieldFormats: fieldFormatsMock, shortDotsEnable: false, @@ -314,4 +315,15 @@ describe('IndexPattern', () => { expect(restoredPattern.fields.length).toEqual(indexPattern.fields.length); }); }); + + describe('getAsSavedObjectBody', () => { + test('should match snapshot', () => { + expect(indexPattern.getAsSavedObjectBody()).toMatchSnapshot(); + }); + + test('allowNoIndex perserves all fields', () => { + const allowNoIndexIndexPattern = create('test-no-index-pattern', { allowNoIndex: true }); + expect(allowNoIndexIndexPattern.getAsSavedObjectBody()).toMatchSnapshot(); + }); + }); }); diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts index 41ce7ba4bab4a1..92993beaad5dbb 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts +++ b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts @@ -322,7 +322,9 @@ export class IndexPattern implements IIndexPattern { intervalName: this.intervalName, sourceFilters: this.sourceFilters ? JSON.stringify(this.sourceFilters) : undefined, fields: this.fields - ? JSON.stringify(this.fields.filter((field) => field.scripted)) + ? JSON.stringify( + this.allowNoIndex ? this.fields : this.fields.filter((field) => field.scripted) + ) : undefined, fieldFormatMap, type: this.type,