mirror of
https://github.com/grafana/grafana.git
synced 2025-02-12 00:25:46 -06:00
* Add and configure eslint-plugin-import * Fix the lint:ts npm command * Autofix + prettier all the files * Manually fix remaining files * Move jquery code in jest-setup to external file to safely reorder imports * Resolve issue caused by circular dependencies within Prometheus * Update .betterer.results * Fix missing // @ts-ignore * ignore iconBundle.ts * Fix missing // @ts-ignore
178 lines
5.1 KiB
TypeScript
178 lines
5.1 KiB
TypeScript
import { toDataFrame, FieldType } from '@grafana/data';
|
|
|
|
import { rowsToFields } from './rowsToFields';
|
|
|
|
describe('Rows to fields', () => {
|
|
it('Will extract min & max from field', () => {
|
|
const input = toDataFrame({
|
|
fields: [
|
|
{ name: 'Name', type: FieldType.string, values: ['Temperature', 'Pressure'] },
|
|
{ name: 'Value', type: FieldType.number, values: [10, 200] },
|
|
{ name: 'Unit', type: FieldType.string, values: ['degree', 'pressurebar'] },
|
|
{ name: 'Miiin', type: FieldType.number, values: [3, 100] },
|
|
{ name: 'max', type: FieldType.string, values: [15, 200] },
|
|
],
|
|
});
|
|
|
|
const result = rowsToFields(
|
|
{
|
|
mappings: [
|
|
{
|
|
fieldName: 'Miiin',
|
|
handlerKey: 'min',
|
|
},
|
|
],
|
|
},
|
|
input
|
|
);
|
|
|
|
expect(result).toMatchInlineSnapshot(`
|
|
Object {
|
|
"fields": Array [
|
|
Object {
|
|
"config": Object {
|
|
"max": 15,
|
|
"min": 3,
|
|
"unit": "degree",
|
|
},
|
|
"labels": Object {},
|
|
"name": "Temperature",
|
|
"type": "number",
|
|
"values": Array [
|
|
10,
|
|
],
|
|
},
|
|
Object {
|
|
"config": Object {
|
|
"max": 200,
|
|
"min": 100,
|
|
"unit": "pressurebar",
|
|
},
|
|
"labels": Object {},
|
|
"name": "Pressure",
|
|
"type": "number",
|
|
"values": Array [
|
|
200,
|
|
],
|
|
},
|
|
],
|
|
"length": 1,
|
|
}
|
|
`);
|
|
});
|
|
|
|
it('Can handle custom name and value field mapping', () => {
|
|
const input = toDataFrame({
|
|
fields: [
|
|
{ name: 'Name', type: FieldType.string, values: ['Ignore'] },
|
|
{ name: 'SensorName', type: FieldType.string, values: ['Temperature'] },
|
|
{ name: 'Value', type: FieldType.number, values: [10] },
|
|
{ name: 'SensorReading', type: FieldType.number, values: [100] },
|
|
],
|
|
});
|
|
|
|
const result = rowsToFields(
|
|
{
|
|
mappings: [
|
|
{ fieldName: 'SensorName', handlerKey: 'field.name' },
|
|
{ fieldName: 'SensorReading', handlerKey: 'field.value' },
|
|
],
|
|
},
|
|
input
|
|
);
|
|
|
|
expect(result.fields[0].name).toBe('Temperature');
|
|
expect(result.fields[0].config).toEqual({});
|
|
expect(result.fields[0].values.get(0)).toBe(100);
|
|
});
|
|
|
|
it('Can handle colors', () => {
|
|
const input = toDataFrame({
|
|
fields: [
|
|
{ name: 'Name', type: FieldType.string, values: ['Temperature'] },
|
|
{ name: 'Value', type: FieldType.number, values: [10] },
|
|
{ name: 'Color', type: FieldType.string, values: ['blue'] },
|
|
],
|
|
});
|
|
|
|
const result = rowsToFields({}, input);
|
|
|
|
expect(result.fields[0].config.color?.fixedColor).toBe('blue');
|
|
});
|
|
|
|
it('Can handle thresholds', () => {
|
|
const input = toDataFrame({
|
|
fields: [
|
|
{ name: 'Name', type: FieldType.string, values: ['Temperature'] },
|
|
{ name: 'Value', type: FieldType.number, values: [10] },
|
|
{ name: 'threshold1', type: FieldType.string, values: [30] },
|
|
{ name: 'threshold2', type: FieldType.string, values: [500] },
|
|
],
|
|
});
|
|
|
|
const result = rowsToFields({}, input);
|
|
expect(result.fields[0].config.thresholds?.steps[1].value).toBe(30);
|
|
});
|
|
|
|
it('Will extract other string fields to labels', () => {
|
|
const input = toDataFrame({
|
|
fields: [
|
|
{ name: 'Name', type: FieldType.string, values: ['Temperature', 'Pressure'] },
|
|
{ name: 'Value', type: FieldType.number, values: [10, 200] },
|
|
{ name: 'City', type: FieldType.string, values: ['Stockholm', 'New York'] },
|
|
],
|
|
});
|
|
|
|
const result = rowsToFields({}, input);
|
|
|
|
expect(result.fields[0].labels).toEqual({ City: 'Stockholm' });
|
|
expect(result.fields[1].labels).toEqual({ City: 'New York' });
|
|
});
|
|
|
|
it('Can ignore field as auto picked for value or name', () => {
|
|
const input = toDataFrame({
|
|
fields: [
|
|
{ name: 'Name', type: FieldType.string, values: ['Temperature'] },
|
|
{ name: 'Value', type: FieldType.number, values: [10] },
|
|
{ name: 'City', type: FieldType.string, values: ['Stockholm'] },
|
|
{ name: 'Value2', type: FieldType.number, values: [20] },
|
|
],
|
|
});
|
|
|
|
const result = rowsToFields(
|
|
{
|
|
mappings: [
|
|
{ fieldName: 'Name', handlerKey: '__ignore' },
|
|
{ fieldName: 'Value', handlerKey: '__ignore' },
|
|
],
|
|
},
|
|
input
|
|
);
|
|
|
|
expect(result.fields[0].name).toEqual('Stockholm');
|
|
expect(result.fields[0].values.get(0)).toEqual(20);
|
|
});
|
|
|
|
it('Can handle number fields as name field', () => {
|
|
const input = toDataFrame({
|
|
fields: [
|
|
{ name: 'SensorID', type: FieldType.number, values: [10, 20, 30] },
|
|
{ name: 'Value', type: FieldType.number, values: [1, 2, 3] },
|
|
],
|
|
});
|
|
|
|
const result = rowsToFields(
|
|
{
|
|
mappings: [
|
|
{ fieldName: 'SensorID', handlerKey: 'field.name' },
|
|
{ fieldName: 'Value', handlerKey: 'field.value' },
|
|
],
|
|
},
|
|
input
|
|
);
|
|
|
|
expect(result.fields[0].name).toEqual('10');
|
|
expect(result.fields[0].values.get(0)).toEqual(1);
|
|
});
|
|
});
|