Add refID tests to affected transformations

This commit is contained in:
Kristina Durivage
2025-10-07 12:44:53 -05:00
parent 09b7d424d4
commit 96b2ed367e
5 changed files with 90 additions and 54 deletions
@@ -14,6 +14,7 @@ describe('JOIN Transformer', () => {
describe('outer join', () => {
const everySecondSeries = toDataFrame({
refId: 'A',
name: 'even',
fields: [
{ name: 'time', type: FieldType.time, values: [3000, 4000, 5000, 6000] },
@@ -23,6 +24,7 @@ describe('JOIN Transformer', () => {
});
const everyOtherSecondSeries = toDataFrame({
refId: 'B',
name: 'odd',
fields: [
{ name: 'time', type: FieldType.time, values: [1000, 3000, 5000, 7000] },
@@ -31,18 +33,20 @@ describe('JOIN Transformer', () => {
],
});
it('joins by time field', async () => {
it('joins by time field with defined refId', async () => {
const cfg: DataTransformerConfig<JoinByFieldOptions> = {
id: DataTransformerID.seriesToColumns,
options: {
byField: 'time',
},
refId: 'test',
};
await expect(transformDataFrame([cfg], [everySecondSeries, everyOtherSecondSeries])).toEmitValuesWith(
(received) => {
const data = received[0];
const filtered = data[0];
expect(filtered.refId).toBe('test');
expect(filtered.fields).toMatchInlineSnapshot(`
[
{
@@ -133,7 +137,7 @@ describe('JOIN Transformer', () => {
);
});
it('joins by temperature field', async () => {
it('joins by temperature field with dynamic refId', async () => {
const cfg: DataTransformerConfig<JoinByFieldOptions> = {
id: DataTransformerID.seriesToColumns,
options: {
@@ -145,6 +149,7 @@ describe('JOIN Transformer', () => {
(received) => {
const data = received[0];
const filtered = data[0];
expect(filtered.refId).toBe('joinByField-A-B');
expect(filtered.fields).toMatchInlineSnapshot(`
[
{
@@ -32,8 +32,9 @@ describe('Merge multiple to single', () => {
});
});
it('combine two series into one', async () => {
it('combine two series into one with dynamic refId', async () => {
const seriesA = toDataFrame({
refId: 'A',
name: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [1000] },
@@ -42,6 +43,7 @@ describe('Merge multiple to single', () => {
});
const seriesB = toDataFrame({
refId: 'B',
name: 'B',
fields: [
{ name: 'Time', type: FieldType.time, values: [2000] },
@@ -55,7 +57,7 @@ describe('Merge multiple to single', () => {
createField('Time', FieldType.time, [1000, 2000]),
createField('Temp', FieldType.number, [1, -1]),
];
expect(result[0].refId).toBe('merge-A-B');
expect(unwrap(result[0].fields)).toEqual(expected);
});
});
@@ -77,13 +79,15 @@ describe('Merge multiple to single', () => {
],
});
await expect(transformDataFrame([cfg], [seriesA, seriesB])).toEmitValuesWith((received) => {
const config = { ...cfg, refId: 'test' };
await expect(transformDataFrame([config], [seriesA, seriesB])).toEmitValuesWith((received) => {
const result = received[0];
const expected: Field[] = [
createField('Time', FieldType.time, [100, 150, 200, 100, 125, 126]),
createField('Temp', FieldType.number, [1, 4, 5, -1, 2, 3]),
];
expect(result[0].refId).toBe('test');
expect(unwrap(result[0].fields)).toEqual(expected);
});
});
@@ -11,6 +11,7 @@ import { DataTransformerID } from './ids';
import { reduceFields, reduceTransformer, ReduceTransformerMode, ReduceTransformerOptions } from './reduce';
const seriesAWithSingleField = toDataFrame({
refId: 'A',
name: 'A',
fields: [
{ name: 'time', type: FieldType.time, values: [3000, 4000, 5000, 6000] },
@@ -19,6 +20,7 @@ const seriesAWithSingleField = toDataFrame({
});
const seriesAWithMultipleFields = toDataFrame({
refId: 'B',
name: 'A',
fields: [
{ name: 'time', type: FieldType.time, values: [3000, 4000, 5000, 6000] },
@@ -28,6 +30,7 @@ const seriesAWithMultipleFields = toDataFrame({
});
const seriesAWithAllNulls = toDataFrame({
refId: 'C',
name: 'A',
fields: [
{ name: 'time', type: FieldType.time, values: [3000, 4000, 5000, 6000] },
@@ -36,6 +39,7 @@ const seriesAWithAllNulls = toDataFrame({
});
const seriesBWithSingleField = toDataFrame({
refId: 'D',
name: 'B',
fields: [
{ name: 'time', type: FieldType.time, values: [1000, 3000, 5000, 7000] },
@@ -44,6 +48,7 @@ const seriesBWithSingleField = toDataFrame({
});
const seriesBWithMultipleFields = toDataFrame({
refId: 'E',
name: 'B',
fields: [
{ name: 'time', type: FieldType.time, values: [1000, 3000, 5000, 7000] },
@@ -53,6 +58,7 @@ const seriesBWithMultipleFields = toDataFrame({
});
const seriesBWithAllNulls = toDataFrame({
refId: 'F',
name: 'B',
fields: [
{ name: 'time', type: FieldType.time, values: [3000, 4000, 5000, 6000] },
@@ -65,7 +71,7 @@ describe('Reducer Transformer', () => {
mockTransformationsRegistry([reduceTransformer]);
});
it('reduces multiple data frames with many fields', async () => {
it('reduces multiple data frames with many fields and dynamic refId', async () => {
const cfg = {
id: DataTransformerID.reduce,
options: {
@@ -135,6 +141,7 @@ describe('Reducer Transformer', () => {
},
];
expect(processed[0].refId).toBe('reduce-B-E');
expect(processed.length).toEqual(1);
expect(processed[0].length).toEqual(4);
expect(processed[0].fields).toEqual(expected);
@@ -142,12 +149,13 @@ describe('Reducer Transformer', () => {
);
});
it('reduces multiple data frames with single field', async () => {
it('reduces multiple data frames with single field and static refId', async () => {
const cfg = {
id: DataTransformerID.reduce,
options: {
reducers: [ReducerID.first, ReducerID.min, ReducerID.max, ReducerID.last],
},
refId: 'test',
};
await expect(transformDataFrame([cfg], [seriesAWithSingleField, seriesBWithSingleField])).toEmitValuesWith(
@@ -187,6 +195,7 @@ describe('Reducer Transformer', () => {
];
expect(processed.length).toEqual(1);
expect(processed[0].refId).toBe('test');
expect(processed[0].length).toEqual(2);
expect(processed[0].fields).toEqual(expected);
}
@@ -39,10 +39,11 @@ describe('Series to rows', () => {
});
});
it('combine two series into one', async () => {
it('combine two series into one with static refId', async () => {
const cfg: DataTransformerConfig<SeriesToRowsTransformerOptions> = {
id: DataTransformerID.seriesToRows,
options: {},
refId: 'test',
};
const seriesA = toDataFrame({
@@ -69,18 +70,19 @@ describe('Series to rows', () => {
createField('Metric', FieldType.string, ['B', 'A']),
createField('Value', FieldType.number, [-1, 1]),
];
expect(result[0].refId).toBe('test');
expect(unwrap(result[0].fields)).toEqual(expected);
});
});
it('combine two series with multiple values into one', async () => {
it('combine two series with multiple values into one with dynamic refid', async () => {
const cfg: DataTransformerConfig<SeriesToRowsTransformerOptions> = {
id: DataTransformerID.seriesToRows,
options: {},
};
const seriesA = toDataFrame({
refId: 'A',
name: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [100, 150, 200] },
@@ -89,6 +91,7 @@ describe('Series to rows', () => {
});
const seriesB = toDataFrame({
refId: 'B',
name: 'B',
fields: [
{ name: 'Time', type: FieldType.time, values: [100, 125, 126] },
@@ -104,7 +107,7 @@ describe('Series to rows', () => {
createField('Metric', FieldType.string, ['A', 'A', 'B', 'B', 'A', 'B']),
createField('Value', FieldType.number, [5, 4, 3, 2, 1, -1]),
];
expect(result[0].refId).toBe('seriesToRows-A-B');
expect(unwrap(result[0].fields)).toEqual(expected);
});
});
@@ -3,58 +3,62 @@ import { toDataFrame, FieldType, DataFrame } from '@grafana/data';
import { joinByLabels } from './joinByLabels';
describe('Join by labels', () => {
it('Simple join', () => {
const input = [
toDataFrame({
fields: [
{ name: 'Time', type: FieldType.time, values: [1, 2] },
{
name: 'Value',
type: FieldType.number,
config: {
displayNameFromDS: '111',
},
values: [10, 200],
labels: { what: 'Temp', cluster: 'A', job: 'J1' },
const input = [
toDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [1, 2] },
{
name: 'Value',
type: FieldType.number,
config: {
displayNameFromDS: '111',
},
],
}),
toDataFrame({
fields: [
{ name: 'Time', type: FieldType.time, values: [1, 2] },
{
name: 'Value',
type: FieldType.number,
config: {
displayNameFromDS: '222',
},
values: [10, 200],
labels: { what: 'Temp', cluster: 'B', job: 'J1' },
values: [10, 200],
labels: { what: 'Temp', cluster: 'A', job: 'J1' },
},
],
}),
toDataFrame({
refId: 'B',
fields: [
{ name: 'Time', type: FieldType.time, values: [1, 2] },
{
name: 'Value',
type: FieldType.number,
config: {
displayNameFromDS: '222',
},
],
}),
toDataFrame({
fields: [
{ name: 'Time', type: FieldType.time, values: [22, 28] },
{
name: 'Value',
type: FieldType.number,
config: {
displayNameFromDS: '333',
},
values: [22, 77],
labels: { what: 'Speed', cluster: 'B', job: 'J1' },
values: [10, 200],
labels: { what: 'Temp', cluster: 'B', job: 'J1' },
},
],
}),
toDataFrame({
refId: 'C',
fields: [
{ name: 'Time', type: FieldType.time, values: [22, 28] },
{
name: 'Value',
type: FieldType.number,
config: {
displayNameFromDS: '333',
},
],
}),
];
values: [22, 77],
labels: { what: 'Speed', cluster: 'B', job: 'J1' },
},
],
}),
];
it('Simple join with dynamic refId', () => {
const result = joinByLabels(
{
value: 'what',
},
input
);
expect(result.refId).toBe('joinByLabels-A-B-C');
expect(result.fields[result.fields.length - 1].config).toMatchInlineSnapshot(`{}`);
expect(toRowsSnapshow(result)).toMatchInlineSnapshot(`
{
@@ -94,6 +98,17 @@ describe('Join by labels', () => {
`);
});
it('Simple join with static refId', () => {
const result = joinByLabels(
{
value: 'what',
refId: 'test',
},
input
);
expect(result.refId).toBe('test');
});
it('Error handling (no labels)', () => {
const input = [
toDataFrame({