Files
Ivana Huckova 48b4ca8228 Elasticsearch: Decouple frontend dependencies from core (#82179)
* Elasticsearch: Decouple frontend dependencies from core

* Remove not needed code change
2024-02-09 14:11:08 +02:00

118 lines
2.7 KiB
TypeScript

import { ElasticsearchQuery } from './types';
import { flattenObject, isTimeSeriesQuery, removeEmpty } from './utils';
describe('removeEmpty', () => {
it('Should remove all empty', () => {
const original = {
stringsShouldBeKept: 'Something',
unlessTheyAreEmpty: '',
nullToBeRemoved: null,
undefinedToBeRemoved: null,
zeroShouldBeKept: 0,
booleansShouldBeKept: false,
emptyObjectsShouldBeRemoved: {},
emptyArrayShouldBeRemoved: [],
nonEmptyArraysShouldBeKept: [1, 2, 3],
nestedObjToBeRemoved: {
toBeRemoved: undefined,
},
nestedObjectToKeep: {
thisShouldBeRemoved: null,
thisShouldBeKept: 'Hello, Grafana',
},
};
const expectedResult = {
stringsShouldBeKept: 'Something',
zeroShouldBeKept: 0,
booleansShouldBeKept: false,
nonEmptyArraysShouldBeKept: [1, 2, 3],
nestedObjectToKeep: {
thisShouldBeKept: 'Hello, Grafana',
},
};
expect(removeEmpty(original)).toStrictEqual(expectedResult);
});
});
describe('isTimeSeriesQuery', () => {
it('should return false when given a log query', () => {
const logsQuery: ElasticsearchQuery = {
refId: `A`,
metrics: [{ type: 'logs', id: '1' }],
};
expect(isTimeSeriesQuery(logsQuery)).toBe(false);
});
it('should return false when bucket aggs are empty', () => {
const query: ElasticsearchQuery = {
refId: `A`,
bucketAggs: [],
};
expect(isTimeSeriesQuery(query)).toBe(false);
});
it('returns false when empty date_histogram is not last', () => {
const query: ElasticsearchQuery = {
refId: `A`,
bucketAggs: [
{ id: '1', type: 'date_histogram' },
{ id: '2', type: 'terms' },
],
};
expect(isTimeSeriesQuery(query)).toBe(false);
});
it('returns true when empty date_histogram is last', () => {
const query: ElasticsearchQuery = {
refId: `A`,
bucketAggs: [
{ id: '1', type: 'terms' },
{ id: '2', type: 'date_histogram' },
],
};
expect(isTimeSeriesQuery(query)).toBe(true);
});
});
describe('flattenObject', () => {
it('flattens objects of arbitrary depth', () => {
const nestedObject = {
a: {
b: {
c: 1,
d: {
e: 2,
f: 3,
},
},
g: 4,
},
h: 5,
};
expect(flattenObject(nestedObject)).toEqual({
'a.b.c': 1,
'a.b.d.e': 2,
'a.b.d.f': 3,
'a.g': 4,
h: 5,
});
});
it('does not alter other objects', () => {
const nestedObject = {
a: 'uno',
b: 'dos',
c: 3,
};
expect(flattenObject(nestedObject)).toEqual(nestedObject);
});
});