From 29d9d8cf5188e3dc5dff6d47bb53c6aaa2872ae1 Mon Sep 17 00:00:00 2001 From: Alex Spencer <52186778+alexjonspencer1@users.noreply.github.com> Date: Wed, 22 Jan 2025 09:37:21 -0700 Subject: [PATCH] GroupingToMatrix: Defensively guard against `null` column name (#99286) * bugfix: defensive guard against null columnName * fix: per suggestion limit diff and revert alphabetization of properties * test: add test for null case * chore: remove it.only * test: convert to inline snapshot --- .../transformers/groupingToMatrix.test.ts | 71 +++++++++++++++++++ .../transformers/groupingToMatrix.ts | 2 +- 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/packages/grafana-data/src/transformations/transformers/groupingToMatrix.test.ts b/packages/grafana-data/src/transformations/transformers/groupingToMatrix.test.ts index bf358b539fd..debc814c89e 100644 --- a/packages/grafana-data/src/transformations/transformers/groupingToMatrix.test.ts +++ b/packages/grafana-data/src/transformations/transformers/groupingToMatrix.test.ts @@ -155,6 +155,77 @@ describe('Grouping to Matrix', () => { }); }); + it('properly handles null column name values', async () => { + const cfg: DataTransformerConfig = { + id: DataTransformerID.groupingToMatrix, + options: { + columnField: 'Column', + rowField: 'Row', + valueField: 'Temp', + }, + }; + + const seriesA = toDataFrame({ + name: 'C', + fields: [ + { name: 'Column', type: FieldType.string, values: ['C1', null, 'C2'] }, + { name: 'Row', type: FieldType.string, values: ['R1', 'R2', 'R1'] }, + { name: 'Temp', type: FieldType.number, values: [1, 4, 5], config: { units: 'celsius' } }, + ], + }); + + await expect(transformDataFrame([cfg], [seriesA])).toEmitValuesWith((received) => { + const processed = received[0]; + + expect(processed[0].fields).toMatchInlineSnapshot(` + [ + { + "config": {}, + "name": "Row\\Column", + "type": "string", + "values": [ + "R1", + "R2", + ], + }, + { + "config": { + "units": "celsius", + }, + "name": "C1", + "type": "number", + "values": [ + 1, + "", + ], + }, + { + "config": { + "units": "celsius", + }, + "name": null, + "type": "number", + "values": [ + "", + 4, + ], + }, + { + "config": { + "units": "celsius", + }, + "name": "C2", + "type": "number", + "values": [ + 5, + "", + ], + }, + ] + `); + }); + }); + it('generates Matrix with multiple fields and value type', async () => { const cfg: DataTransformerConfig = { id: DataTransformerID.groupingToMatrix, diff --git a/packages/grafana-data/src/transformations/transformers/groupingToMatrix.ts b/packages/grafana-data/src/transformations/transformers/groupingToMatrix.ts index 59c6d015df5..94ce41f79e2 100644 --- a/packages/grafana-data/src/transformations/transformers/groupingToMatrix.ts +++ b/packages/grafana-data/src/transformations/transformers/groupingToMatrix.ts @@ -127,7 +127,7 @@ export const groupingToMatrixTransformer: DataTransformerInfo