Do not crash timeseries panel if there is no time series data in the response (#33993)

This commit is contained in:
Dominik Prokop
2021-05-12 14:14:39 +02:00
committed by GitHub
parent f2fcf721eb
commit baa5ceb4c0
4 changed files with 110 additions and 8 deletions
@@ -0,0 +1,78 @@
import { toDataFrame } from './processDataFrame';
import { FieldType } from '../types';
import { anySeriesWithTimeField } from './utils';
describe('anySeriesWithTimeField', () => {
describe('single frame', () => {
test('without time field', () => {
const frameA = toDataFrame({
fields: [
{ name: 'name', type: FieldType.string, values: ['a', 'b', 'c'] },
{ name: 'value', type: FieldType.number, values: [1, 2, 3] },
],
});
expect(anySeriesWithTimeField([frameA])).toBeFalsy();
});
test('with time field', () => {
const frameA = toDataFrame({
fields: [
{ name: 'time', type: FieldType.time, values: [100, 200, 300] },
{ name: 'name', type: FieldType.string, values: ['a', 'b', 'c'] },
{ name: 'value', type: FieldType.number, values: [1, 2, 3] },
],
});
expect(anySeriesWithTimeField([frameA])).toBeTruthy();
});
});
describe('multiple frames', () => {
test('without time field', () => {
const frameA = toDataFrame({
fields: [
{ name: 'name', type: FieldType.string, values: ['a', 'b', 'c'] },
{ name: 'value', type: FieldType.number, values: [1, 2, 3] },
],
});
const frameB = toDataFrame({
fields: [{ name: 'value', type: FieldType.number, values: [1, 2, 3] }],
});
expect(anySeriesWithTimeField([frameA, frameB])).toBeFalsy();
});
test('with time field in any frame', () => {
const frameA = toDataFrame({
fields: [
{ name: 'time', type: FieldType.time, values: [100, 200, 300] },
{ name: 'name', type: FieldType.string, values: ['a', 'b', 'c'] },
{ name: 'value', type: FieldType.number, values: [1, 2, 3] },
],
});
const frameB = toDataFrame({
fields: [{ name: 'value', type: FieldType.number, values: [1, 2, 3] }],
});
const frameC = toDataFrame({
fields: [{ name: 'name', type: FieldType.string, values: ['a', 'b', 'c'] }],
});
expect(anySeriesWithTimeField([frameA, frameB, frameC])).toBeTruthy();
});
test('with time field in a all frames', () => {
const frameA = toDataFrame({
fields: [
{ name: 'time', type: FieldType.time, values: [100, 200, 300] },
{ name: 'value', type: FieldType.number, values: [1, 2, 3] },
],
});
const frameB = toDataFrame({
fields: [
{ name: 'time', type: FieldType.time, values: [100, 200, 300] },
{ name: 'name', type: FieldType.string, values: ['a', 'b', 'c'] },
{ name: 'value', type: FieldType.number, values: [1, 2, 3] },
],
});
expect(anySeriesWithTimeField([frameA, frameB])).toBeTruthy();
});
});
});