Transformations: Fix Partition by values transform missing refId (#106417)

* Fix partition by values missing refId

* have partitioned refID include original refID

---------

Co-authored-by: Kristina Durivage <kristina.durivage@grafana.com>
This commit is contained in:
KgOfHedgehogs
2025-08-20 12:19:47 -05:00
committed by GitHub
co-authored by Kristina Durivage
parent c8b0fd685b
commit 7fd5121c4f
2 changed files with 34 additions and 0 deletions
@@ -35,6 +35,7 @@ describe('Partition by values transformer', () => {
expect(partitioned[0].length).toEqual(3);
expect(partitioned[0].name).toEqual('Europe');
expect(partitioned[0].refId).toEqual('A-Europe');
expect(partitioned[0].fields[0].name).toEqual('model');
expect(partitioned[0].fields[1].name).toEqual('region');
expect(partitioned[0].fields[0].values).toEqual(['E1', 'E2', 'E3']);
@@ -42,6 +43,7 @@ describe('Partition by values transformer', () => {
expect(partitioned[1].length).toEqual(3);
expect(partitioned[1].name).toEqual('China');
expect(partitioned[1].refId).toEqual('A-China');
expect(partitioned[1].fields[0].name).toEqual('model');
expect(partitioned[1].fields[1].name).toEqual('region');
expect(partitioned[1].fields[0].values).toEqual(['C1', 'C2', 'C3']);
@@ -75,6 +77,7 @@ describe('Partition by values transformer', () => {
expect(partitioned[0].length).toEqual(1);
expect(partitioned[0].name).toEqual('Europe OK');
expect(partitioned[0].refId).toEqual('A-Europe OK');
expect(partitioned[0].fields[0].name).toEqual('model');
expect(partitioned[0].fields[1].name).toEqual('region');
expect(partitioned[0].fields[2].name).toEqual('status');
@@ -84,6 +87,7 @@ describe('Partition by values transformer', () => {
expect(partitioned[1].length).toEqual(2);
expect(partitioned[1].name).toEqual('Europe FAIL');
expect(partitioned[1].refId).toEqual('A-Europe FAIL');
expect(partitioned[1].fields[0].name).toEqual('model');
expect(partitioned[1].fields[1].name).toEqual('region');
expect(partitioned[1].fields[2].name).toEqual('status');
@@ -93,6 +97,7 @@ describe('Partition by values transformer', () => {
expect(partitioned[2].length).toEqual(2);
expect(partitioned[2].name).toEqual('China OK');
expect(partitioned[2].refId).toEqual('A-China OK');
expect(partitioned[2].fields[0].name).toEqual('model');
expect(partitioned[2].fields[1].name).toEqual('region');
expect(partitioned[2].fields[2].name).toEqual('status');
@@ -102,6 +107,7 @@ describe('Partition by values transformer', () => {
expect(partitioned[3].length).toEqual(1);
expect(partitioned[3].name).toEqual('China FAIL');
expect(partitioned[3].refId).toEqual('A-China FAIL');
expect(partitioned[3].fields[0].name).toEqual('model');
expect(partitioned[3].fields[1].name).toEqual('region');
expect(partitioned[3].fields[2].name).toEqual('status');
@@ -135,9 +141,16 @@ describe('Partition by values transformer', () => {
let partitioned = partitionByValuesTransformer.transformer(config, ctx)(source);
expect(partitioned[0].name).toEqual('region=Europe status=OK');
expect(partitioned[0].refId).toEqual('A-region=Europe status=OK');
expect(partitioned[1].name).toEqual('region=Europe status=FAIL');
expect(partitioned[1].refId).toEqual('A-region=Europe status=FAIL');
expect(partitioned[2].name).toEqual('region=China status=OK');
expect(partitioned[2].refId).toEqual('A-region=China status=OK');
expect(partitioned[3].name).toEqual('region=China status=FAIL');
expect(partitioned[3].refId).toEqual('A-region=China status=FAIL');
});
it('should partition by multiple fields with custom frame naming {append: true}', () => {
@@ -165,9 +178,16 @@ describe('Partition by values transformer', () => {
let partitioned = partitionByValuesTransformer.transformer(config, ctx)(source);
expect(partitioned[0].name).toEqual('XYZ Europe OK');
expect(partitioned[0].refId).toEqual('A-XYZ Europe OK');
expect(partitioned[1].name).toEqual('XYZ Europe FAIL');
expect(partitioned[1].refId).toEqual('A-XYZ Europe FAIL');
expect(partitioned[2].name).toEqual('XYZ China OK');
expect(partitioned[2].refId).toEqual('A-XYZ China OK');
expect(partitioned[3].name).toEqual('XYZ China FAIL');
expect(partitioned[3].refId).toEqual('A-XYZ China FAIL');
});
it('should partition by multiple fields with custom frame naming {withNames: true, append: true}', () => {
@@ -196,9 +216,16 @@ describe('Partition by values transformer', () => {
let partitioned = partitionByValuesTransformer.transformer(config, ctx)(source);
expect(partitioned[0].name).toEqual('XYZ region=Europe status=OK');
expect(partitioned[0].refId).toEqual('A-XYZ region=Europe status=OK');
expect(partitioned[1].name).toEqual('XYZ region=Europe status=FAIL');
expect(partitioned[1].refId).toEqual('A-XYZ region=Europe status=FAIL');
expect(partitioned[2].name).toEqual('XYZ region=China status=OK');
expect(partitioned[2].refId).toEqual('A-XYZ region=China status=OK');
expect(partitioned[3].name).toEqual('XYZ region=China status=FAIL');
expect(partitioned[3].refId).toEqual('A-XYZ region=China status=FAIL');
});
it('should partition by multiple fields naming: {asLabels: true}', () => {
@@ -230,6 +257,12 @@ describe('Partition by values transformer', () => {
expect(partitioned[2].name).toEqual('XYZ');
expect(partitioned[3].name).toEqual('XYZ');
// all frame refIds are same
expect(partitioned[0].refId).toEqual('A-XYZ');
expect(partitioned[1].refId).toEqual('A-XYZ');
expect(partitioned[2].refId).toEqual('A-XYZ');
expect(partitioned[3].refId).toEqual('A-XYZ');
// all frames contain all fields
expect(partitioned[0].fields[0].name).toEqual('model');
expect(partitioned[0].fields[1].name).toEqual('region');
@@ -149,6 +149,7 @@ export function partitionByValues(
return {
name: frameName,
refId: `${frame.refId}-${frameName}`,
meta: frame.meta,
length: idxs.length,
fields: filteredFields.map((f) => {