processSeriesData.test.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import {
  2. isSeriesData,
  3. toLegacyResponseData,
  4. isTableData,
  5. toSeriesData,
  6. guessFieldTypes,
  7. guessFieldTypeFromValue,
  8. } from './processSeriesData';
  9. import { FieldType, TimeSeries } from '../types/data';
  10. import { dateTime } from './moment_wrapper';
  11. describe('toSeriesData', () => {
  12. it('converts timeseries to series', () => {
  13. const input1 = {
  14. target: 'Field Name',
  15. datapoints: [[100, 1], [200, 2]],
  16. };
  17. let series = toSeriesData(input1);
  18. expect(series.fields[0].name).toBe(input1.target);
  19. expect(series.rows).toBe(input1.datapoints);
  20. // Should fill a default name if target is empty
  21. const input2 = {
  22. // without target
  23. target: '',
  24. datapoints: [[100, 1], [200, 2]],
  25. };
  26. series = toSeriesData(input2);
  27. expect(series.fields[0].name).toEqual('Value');
  28. });
  29. it('keeps seriesData unchanged', () => {
  30. const input = {
  31. fields: [{ text: 'A' }, { text: 'B' }, { text: 'C' }],
  32. rows: [[100, 'A', 1], [200, 'B', 2], [300, 'C', 3]],
  33. };
  34. const series = toSeriesData(input);
  35. expect(series).toBe(input);
  36. });
  37. it('Guess Colum Types from value', () => {
  38. expect(guessFieldTypeFromValue(1)).toBe(FieldType.number);
  39. expect(guessFieldTypeFromValue(1.234)).toBe(FieldType.number);
  40. expect(guessFieldTypeFromValue(3.125e7)).toBe(FieldType.number);
  41. expect(guessFieldTypeFromValue(true)).toBe(FieldType.boolean);
  42. expect(guessFieldTypeFromValue(false)).toBe(FieldType.boolean);
  43. expect(guessFieldTypeFromValue(new Date())).toBe(FieldType.time);
  44. expect(guessFieldTypeFromValue(dateTime())).toBe(FieldType.time);
  45. });
  46. it('Guess Colum Types from strings', () => {
  47. expect(guessFieldTypeFromValue('1')).toBe(FieldType.number);
  48. expect(guessFieldTypeFromValue('1.234')).toBe(FieldType.number);
  49. expect(guessFieldTypeFromValue('3.125e7')).toBe(FieldType.number);
  50. expect(guessFieldTypeFromValue('True')).toBe(FieldType.boolean);
  51. expect(guessFieldTypeFromValue('FALSE')).toBe(FieldType.boolean);
  52. expect(guessFieldTypeFromValue('true')).toBe(FieldType.boolean);
  53. expect(guessFieldTypeFromValue('xxxx')).toBe(FieldType.string);
  54. });
  55. it('Guess Colum Types from series', () => {
  56. const series = {
  57. fields: [{ name: 'A (number)' }, { name: 'B (strings)' }, { name: 'C (nulls)' }, { name: 'Time' }],
  58. rows: [[123, null, null, '2000'], [null, 'Hello', null, 'XXX']],
  59. };
  60. const norm = guessFieldTypes(series);
  61. expect(norm.fields[0].type).toBe(FieldType.number);
  62. expect(norm.fields[1].type).toBe(FieldType.string);
  63. expect(norm.fields[2].type).toBeUndefined();
  64. expect(norm.fields[3].type).toBe(FieldType.time); // based on name
  65. });
  66. });
  67. describe('SerisData backwards compatibility', () => {
  68. it('converts TimeSeries to series and back again', () => {
  69. const timeseries = {
  70. target: 'Field Name',
  71. datapoints: [[100, 1], [200, 2]],
  72. };
  73. const series = toSeriesData(timeseries);
  74. expect(isSeriesData(timeseries)).toBeFalsy();
  75. expect(isSeriesData(series)).toBeTruthy();
  76. const roundtrip = toLegacyResponseData(series) as TimeSeries;
  77. expect(isSeriesData(roundtrip)).toBeFalsy();
  78. expect(roundtrip.target).toBe(timeseries.target);
  79. });
  80. it('converts TableData to series and back again', () => {
  81. const table = {
  82. columns: [{ text: 'a', unit: 'ms' }, { text: 'b', unit: 'zz' }, { text: 'c', unit: 'yy' }],
  83. rows: [[100, 1, 'a'], [200, 2, 'a']],
  84. };
  85. const series = toSeriesData(table);
  86. expect(isTableData(table)).toBeTruthy();
  87. expect(isSeriesData(series)).toBeTruthy();
  88. const roundtrip = toLegacyResponseData(series) as TimeSeries;
  89. expect(isTableData(roundtrip)).toBeTruthy();
  90. expect(roundtrip).toMatchObject(table);
  91. });
  92. });