Files
Hugo Häggmark 68cbd23916 Chore: reduces barrel files (#107512)
* Chore: reduce barrel files

* chore: fixes unit test

* chore: fix broken path
2025-07-07 09:23:27 +02:00

118 lines
2.7 KiB
TypeScript

import { ElasticsearchDataQuery } from './dataquery.gen';
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: ElasticsearchDataQuery = {
refId: `A`,
metrics: [{ type: 'logs', id: '1' }],
};
expect(isTimeSeriesQuery(logsQuery)).toBe(false);
});
it('should return false when bucket aggs are empty', () => {
const query: ElasticsearchDataQuery = {
refId: `A`,
bucketAggs: [],
};
expect(isTimeSeriesQuery(query)).toBe(false);
});
it('returns false when empty date_histogram is not last', () => {
const query: ElasticsearchDataQuery = {
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: ElasticsearchDataQuery = {
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);
});
});