2020-08-21 18:08:25 +02:00
|
|
|
/*
|
|
|
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
2021-02-04 03:12:39 +01:00
|
|
|
* or more contributor license agreements. Licensed under the Elastic License
|
|
|
|
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
|
|
* 2.0.
|
2020-08-21 18:08:25 +02:00
|
|
|
*/
|
|
|
|
|
|
|
|
import { Filter } from 'src/plugins/data/public';
|
|
|
|
import { extractFilterReferences, injectFilterReferences } from './filter_references';
|
|
|
|
import { FilterStateStore } from 'src/plugins/data/common';
|
|
|
|
|
|
|
|
describe('filter saved object references', () => {
|
|
|
|
const filters: Filter[] = [
|
|
|
|
{
|
|
|
|
$state: { store: FilterStateStore.APP_STATE },
|
|
|
|
meta: {
|
|
|
|
alias: null,
|
|
|
|
disabled: false,
|
|
|
|
index: '90943e30-9a47-11e8-b64d-95841ca0b247',
|
|
|
|
key: 'geo.src',
|
|
|
|
negate: true,
|
|
|
|
params: { query: 'CN' },
|
|
|
|
type: 'phrase',
|
|
|
|
},
|
|
|
|
query: { match_phrase: { 'geo.src': 'CN' } },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
$state: { store: FilterStateStore.APP_STATE },
|
|
|
|
meta: {
|
|
|
|
alias: null,
|
|
|
|
disabled: false,
|
|
|
|
index: 'ff959d40-b880-11e8-a6d9-e546fe2bba5f',
|
|
|
|
key: 'geoip.country_iso_code',
|
|
|
|
negate: true,
|
|
|
|
params: { query: 'US' },
|
|
|
|
type: 'phrase',
|
|
|
|
},
|
|
|
|
query: { match_phrase: { 'geoip.country_iso_code': 'US' } },
|
|
|
|
},
|
|
|
|
];
|
|
|
|
|
|
|
|
it('should create two index-pattern references', () => {
|
|
|
|
const { references } = extractFilterReferences(filters);
|
|
|
|
expect(references).toMatchInlineSnapshot(`
|
|
|
|
Array [
|
|
|
|
Object {
|
|
|
|
"id": "90943e30-9a47-11e8-b64d-95841ca0b247",
|
|
|
|
"name": "filter-index-pattern-0",
|
|
|
|
"type": "index-pattern",
|
|
|
|
},
|
|
|
|
Object {
|
|
|
|
"id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f",
|
|
|
|
"name": "filter-index-pattern-1",
|
|
|
|
"type": "index-pattern",
|
|
|
|
},
|
|
|
|
]
|
|
|
|
`);
|
|
|
|
});
|
|
|
|
|
2021-01-13 13:32:14 +01:00
|
|
|
it('should remove index and value from persistable filter', () => {
|
|
|
|
const { persistableFilters } = extractFilterReferences([
|
|
|
|
{ ...filters[0], meta: { ...filters[0].meta, value: 'CN' } },
|
|
|
|
{ ...filters[1], meta: { ...filters[1].meta, value: 'US' } },
|
|
|
|
]);
|
|
|
|
expect(persistableFilters.length).toBe(2);
|
|
|
|
persistableFilters.forEach((filter) => {
|
|
|
|
expect(filter.meta.hasOwnProperty('index')).toBe(false);
|
|
|
|
expect(filter.meta.hasOwnProperty('value')).toBe(false);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2020-08-21 18:08:25 +02:00
|
|
|
it('should restore the same filter after extracting and injecting', () => {
|
|
|
|
const { persistableFilters, references } = extractFilterReferences(filters);
|
|
|
|
expect(injectFilterReferences(persistableFilters, references)).toEqual(filters);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should ignore other references', () => {
|
|
|
|
const { persistableFilters, references } = extractFilterReferences(filters);
|
|
|
|
expect(
|
|
|
|
injectFilterReferences(persistableFilters, [
|
|
|
|
{ type: 'index-pattern', id: '1234', name: 'some other index pattern' },
|
|
|
|
...references,
|
|
|
|
])
|
|
|
|
).toEqual(filters);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should inject other ids if references change', () => {
|
|
|
|
const { persistableFilters, references } = extractFilterReferences(filters);
|
|
|
|
|
|
|
|
expect(
|
|
|
|
injectFilterReferences(
|
|
|
|
persistableFilters,
|
|
|
|
references.map((reference, index) => ({ ...reference, id: `overwritten-id-${index}` }))
|
|
|
|
)
|
|
|
|
).toEqual([
|
|
|
|
{
|
|
|
|
...filters[0],
|
|
|
|
meta: {
|
|
|
|
...filters[0].meta,
|
|
|
|
index: 'overwritten-id-0',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
...filters[1],
|
|
|
|
meta: {
|
|
|
|
...filters[1].meta,
|
|
|
|
index: 'overwritten-id-1',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
});
|