From 18e873fb598e360b902c1da6d0aa77d12da8205b Mon Sep 17 00:00:00 2001 From: Adela Almasan Date: Wed, 7 Jan 2026 15:35:18 -0600 Subject: [PATCH] test for getSeriesAndRest --- .../components/TimelineChart/utils.test.ts | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/public/app/core/components/TimelineChart/utils.test.ts b/public/app/core/components/TimelineChart/utils.test.ts index f5a823d6f29..c7da45ac025 100644 --- a/public/app/core/components/TimelineChart/utils.test.ts +++ b/public/app/core/components/TimelineChart/utils.test.ts @@ -18,6 +18,7 @@ import { preparePlotFrame } from '../GraphNG/utils'; import { findNextStateIndex, fmtDuration, + getSeriesAndRest, getThresholdItems, hasSpecialMappedValue, makeFramePerSeries, @@ -563,3 +564,95 @@ describe('hasSpecialMappedValue', () => { expect(hasSpecialMappedValue(field, valueMatch)).toEqual(expected); }); }); + +describe('getSeriesAndRest', () => { + it('should return all fields as series when none are hidden', () => { + const frame = toDataFrame({ + fields: [ + { name: 'time', type: FieldType.time, values: [1, 2, 3] }, + { name: 'value1', type: FieldType.number, values: [10, 20, 30] }, + { name: 'value2', type: FieldType.string, values: ['a', 'b', 'c'] }, + ], + }); + + const result = getSeriesAndRest(frame); + + expect(result.seriesFrame.fields).toHaveLength(3); + expect(result.restFields).toHaveLength(0); + expect(result.seriesFrame.fields.map((f) => f.name)).toEqual(['time', 'value1', 'value2']); + }); + + it('should separate hidden fields from visible fields', () => { + const frame = toDataFrame({ + fields: [ + { name: 'time', type: FieldType.time, values: [1, 2, 3] }, + { + name: 'visible1', + type: FieldType.number, + values: [10, 20, 30], + config: { custom: { hideFrom: { viz: false, legend: true } } }, + }, + { + name: 'hidden1', + type: FieldType.string, + values: ['a', 'b', 'c'], + config: { custom: { hideFrom: { viz: true } } }, + }, + { + name: 'visible2', + type: FieldType.number, + values: [100, 200, 300], + }, + { + name: 'hidden2', + type: FieldType.string, + values: ['x', 'y', 'z'], + config: { custom: { hideFrom: { viz: true, tooltip: false } } }, + }, + ], + }); + + const result = getSeriesAndRest(frame); + + expect(result.seriesFrame.fields).toHaveLength(3); + expect(result.restFields).toHaveLength(2); + expect(result.seriesFrame.fields.map((f) => f.name)).toEqual(['time', 'visible1', 'visible2']); + expect(result.restFields.map((f) => f.name)).toEqual(['hidden1', 'hidden2']); + }); + + it('should handle all fields being hidden', () => { + const frame = toDataFrame({ + fields: [ + { + name: 'time', + type: FieldType.time, + values: [1, 2, 3], + config: { custom: { hideFrom: { viz: true } } }, + }, + { + name: 'value1', + type: FieldType.number, + values: [10, 20, 30], + config: { custom: { hideFrom: { viz: true } } }, + }, + ], + }); + + const result = getSeriesAndRest(frame); + + expect(result.seriesFrame.fields).toHaveLength(0); + expect(result.restFields).toHaveLength(2); + expect(result.restFields.map((f) => f.name)).toEqual(['time', 'value1']); + }); + + it('should handle empty frame', () => { + const frame = toDataFrame({ + fields: [], + }); + + const result = getSeriesAndRest(frame); + + expect(result.seriesFrame.fields).toHaveLength(0); + expect(result.restFields).toHaveLength(0); + }); +});