|
|
@@ -94,7 +94,232 @@ describe('when transforming time series table', () => {
|
|
|
expect(table.columns[2].text).toBe('Min');
|
|
|
});
|
|
|
});
|
|
|
+ });
|
|
|
+
|
|
|
+ describe('table data sets', () => {
|
|
|
+ describe('Table', () => {
|
|
|
+ const transform = 'table';
|
|
|
+ var panel = {
|
|
|
+ transform,
|
|
|
+ };
|
|
|
+ var time = new Date().getTime();
|
|
|
+
|
|
|
+ var nonTableData = [
|
|
|
+ {
|
|
|
+ type: 'foo',
|
|
|
+ columns: [
|
|
|
+ { text: 'Time' },
|
|
|
+ { text: 'Label Key 1' },
|
|
|
+ { text: 'Value' },
|
|
|
+ ],
|
|
|
+ rows: [
|
|
|
+ [time, 'Label Value 1', 42],
|
|
|
+ ],
|
|
|
+ }
|
|
|
+ ];
|
|
|
+
|
|
|
+ var singleQueryData = [
|
|
|
+ {
|
|
|
+ type: 'table',
|
|
|
+ columns: [
|
|
|
+ { text: 'Time' },
|
|
|
+ { text: 'Label Key 1' },
|
|
|
+ { text: 'Value' },
|
|
|
+ ],
|
|
|
+ rows: [
|
|
|
+ [time, 'Label Value 1', 42],
|
|
|
+ ],
|
|
|
+ }
|
|
|
+ ];
|
|
|
+
|
|
|
+ var multipleQueriesDataSameLabels = [
|
|
|
+ {
|
|
|
+ type: 'table',
|
|
|
+ columns: [
|
|
|
+ { text: 'Time' },
|
|
|
+ { text: 'Label Key 1' },
|
|
|
+ { text: 'Label Key 2' },
|
|
|
+ { text: 'Value #A' },
|
|
|
+ ],
|
|
|
+ rows: [
|
|
|
+ [time, 'Label Value 1', 'Label Value 2', 42],
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'table',
|
|
|
+ columns: [
|
|
|
+ { text: 'Time' },
|
|
|
+ { text: 'Label Key 1' },
|
|
|
+ { text: 'Label Key 2' },
|
|
|
+ { text: 'Value #B' },
|
|
|
+ ],
|
|
|
+ rows: [
|
|
|
+ [time, 'Label Value 1', 'Label Value 2', 13],
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'table',
|
|
|
+ columns: [
|
|
|
+ { text: 'Time' },
|
|
|
+ { text: 'Label Key 1' },
|
|
|
+ { text: 'Label Key 2' },
|
|
|
+ { text: 'Value #C' },
|
|
|
+ ],
|
|
|
+ rows: [
|
|
|
+ [time, 'Label Value 1', 'Label Value 2', 4],
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'table',
|
|
|
+ columns: [
|
|
|
+ { text: 'Time' },
|
|
|
+ { text: 'Label Key 1' },
|
|
|
+ { text: 'Label Key 2' },
|
|
|
+ { text: 'Value #C' },
|
|
|
+ ],
|
|
|
+ rows: [
|
|
|
+ [time, 'Label Value 1', 'Label Value 2', 7],
|
|
|
+ ],
|
|
|
+ }
|
|
|
+ ];
|
|
|
+
|
|
|
+ var multipleQueriesDataDifferentLabels = [
|
|
|
+ {
|
|
|
+ type: 'table',
|
|
|
+ columns: [
|
|
|
+ { text: 'Time' },
|
|
|
+ { text: 'Label Key 1' },
|
|
|
+ { text: 'Value #A' },
|
|
|
+ ],
|
|
|
+ rows: [
|
|
|
+ [time, 'Label Value 1', 42],
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'table',
|
|
|
+ columns: [
|
|
|
+ { text: 'Time' },
|
|
|
+ { text: 'Label Key 2' },
|
|
|
+ { text: 'Value #B' },
|
|
|
+ ],
|
|
|
+ rows: [
|
|
|
+ [time, 'Label Value 2', 13],
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'table',
|
|
|
+ columns: [
|
|
|
+ { text: 'Time' },
|
|
|
+ { text: 'Label Key 1' },
|
|
|
+ { text: 'Value #C' },
|
|
|
+ ],
|
|
|
+ rows: [
|
|
|
+ [time, 'Label Value 3', 7],
|
|
|
+ ],
|
|
|
+ }
|
|
|
+ ];
|
|
|
+
|
|
|
+ describe('getColumns', function() {
|
|
|
+ it('should return data columns given a single query', function() {
|
|
|
+ var columns = transformers[transform].getColumns(singleQueryData);
|
|
|
+ expect(columns[0].text).toBe('Time');
|
|
|
+ expect(columns[1].text).toBe('Label Key 1');
|
|
|
+ expect(columns[2].text).toBe('Value');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should return the union of data columns given a multiple queries', function() {
|
|
|
+ var columns = transformers[transform].getColumns(multipleQueriesDataSameLabels);
|
|
|
+ expect(columns[0].text).toBe('Time');
|
|
|
+ expect(columns[1].text).toBe('Label Key 1');
|
|
|
+ expect(columns[2].text).toBe('Label Key 2');
|
|
|
+ expect(columns[3].text).toBe('Value #A');
|
|
|
+ expect(columns[4].text).toBe('Value #B');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should return the union of data columns given a multiple queries with different labels', function() {
|
|
|
+ var columns = transformers[transform].getColumns(multipleQueriesDataDifferentLabels);
|
|
|
+ expect(columns[0].text).toBe('Time');
|
|
|
+ expect(columns[1].text).toBe('Label Key 1');
|
|
|
+ expect(columns[2].text).toBe('Value #A');
|
|
|
+ expect(columns[3].text).toBe('Label Key 2');
|
|
|
+ expect(columns[4].text).toBe('Value #B');
|
|
|
+ expect(columns[5].text).toBe('Value #C');
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe('transform', function() {
|
|
|
+ it ('should throw an error with non-table data', () => {
|
|
|
+ expect(() => transformDataToTable(nonTableData, panel)).toThrow();
|
|
|
+ });
|
|
|
+
|
|
|
+ it ('should return 3 columns for single queries', () => {
|
|
|
+ table = transformDataToTable(singleQueryData, panel);
|
|
|
+ expect(table.columns.length).toBe(3);
|
|
|
+ expect(table.columns[0].text).toBe('Time');
|
|
|
+ expect(table.columns[1].text).toBe('Label Key 1');
|
|
|
+ expect(table.columns[2].text).toBe('Value');
|
|
|
+ });
|
|
|
+
|
|
|
+ it ('should return the union of columns for multiple queries', () => {
|
|
|
+ table = transformDataToTable(multipleQueriesDataSameLabels, panel);
|
|
|
+ expect(table.columns.length).toBe(6);
|
|
|
+ expect(table.columns[0].text).toBe('Time');
|
|
|
+ expect(table.columns[1].text).toBe('Label Key 1');
|
|
|
+ expect(table.columns[2].text).toBe('Label Key 2');
|
|
|
+ expect(table.columns[3].text).toBe('Value #A');
|
|
|
+ expect(table.columns[4].text).toBe('Value #B');
|
|
|
+ expect(table.columns[5].text).toBe('Value #C');
|
|
|
+ });
|
|
|
|
|
|
+ it ('should return 1 row for a single query', () => {
|
|
|
+ table = transformDataToTable(singleQueryData, panel);
|
|
|
+ expect(table.rows.length).toBe(1);
|
|
|
+ expect(table.rows[0][0]).toBe(time);
|
|
|
+ expect(table.rows[0][1]).toBe('Label Value 1');
|
|
|
+ expect(table.rows[0][2]).toBe(42);
|
|
|
+ });
|
|
|
+
|
|
|
+ it ('should return 2 rows for a mulitple queries with same label values plus one extra row', () => {
|
|
|
+ table = transformDataToTable(multipleQueriesDataSameLabels, panel);
|
|
|
+ expect(table.rows.length).toBe(2);
|
|
|
+ expect(table.rows[0][0]).toBe(time);
|
|
|
+ expect(table.rows[0][1]).toBe('Label Value 1');
|
|
|
+ expect(table.rows[0][2]).toBe('Label Value 2');
|
|
|
+ expect(table.rows[0][3]).toBe(42);
|
|
|
+ expect(table.rows[0][4]).toBe(13);
|
|
|
+ expect(table.rows[0][5]).toBe(4);
|
|
|
+ expect(table.rows[1][0]).toBe(time);
|
|
|
+ expect(table.rows[1][1]).toBe('Label Value 1');
|
|
|
+ expect(table.rows[1][2]).toBe('Label Value 2');
|
|
|
+ expect(table.rows[1][3]).toBeUndefined();
|
|
|
+ expect(table.rows[1][4]).toBeUndefined();
|
|
|
+ expect(table.rows[1][5]).toBe(7);
|
|
|
+ });
|
|
|
+
|
|
|
+ it ('should return 2 rows for mulitple queries with different label values', () => {
|
|
|
+ table = transformDataToTable(multipleQueriesDataDifferentLabels, panel);
|
|
|
+ expect(table.rows.length).toBe(2);
|
|
|
+ expect(table.columns.length).toBe(6);
|
|
|
+
|
|
|
+ expect(table.rows[0][0]).toBe(time);
|
|
|
+ expect(table.rows[0][1]).toBe('Label Value 1');
|
|
|
+ expect(table.rows[0][2]).toBe(42);
|
|
|
+ expect(table.rows[0][3]).toBe('Label Value 2');
|
|
|
+ expect(table.rows[0][4]).toBe(13);
|
|
|
+ expect(table.rows[0][5]).toBeUndefined();
|
|
|
+
|
|
|
+ expect(table.rows[1][0]).toBe(time);
|
|
|
+ expect(table.rows[1][1]).toBe('Label Value 3');
|
|
|
+ expect(table.rows[1][2]).toBeUndefined();
|
|
|
+ expect(table.rows[1][3]).toBeUndefined();
|
|
|
+ expect(table.rows[1][4]).toBeUndefined();
|
|
|
+ expect(table.rows[1][5]).toBe(7);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe('doc data sets', () => {
|
|
|
describe('JSON Data', () => {
|
|
|
var panel = {
|
|
|
transform: 'json',
|
|
|
@@ -148,7 +373,9 @@ describe('when transforming time series table', () => {
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
+ });
|
|
|
|
|
|
+ describe('annotation data', () => {
|
|
|
describe('Annnotations', () => {
|
|
|
var panel = {transform: 'annotations'};
|
|
|
var rawData = {
|