Commit 6062930f by Torkel Ödegaard

feat(tablepanel): added more unit tests for table transforms

parent 867b8380
......@@ -6,7 +6,9 @@ import _ = require('lodash');
import moment = require('moment');
import PanelMeta = require('app/features/panel/panel_meta');
import TimeSeries = require('app/core/time_series');
import {TableModel, transformers} from './table_model';
import {TableModel} from './table_model';
import {transformers} from './transformers';
export class TablePanelCtrl {
......@@ -26,7 +28,9 @@ export class TablePanelCtrl {
var panelDefaults = {
targets: [{}],
transform: 'timeseries_to_rows'
transform: 'timeseries_to_rows',
pageSize: 50,
showHeader: true,
};
_.defaults($scope.panel, panelDefaults);
......
<div class="editor-row">
<div class="tight-form-section">
<h5>Data Table</h5>
<h5>Data</h5>
<div class="tight-form">
<ul class="tight-form-list">
<li class="tight-form-item" style="width: 170px">
Data to Table Transform
To Table Transform
</li>
<li>
<select class="input-xlarge tight-form-input"
......@@ -22,6 +22,13 @@
<div class="tight-form-section">
<h5>Table Display</h5>
</div>
<li class="tight-form-item" style="width: 80px">
Pagination (Page size)
</li>
<li>
<input type="pageSize" class="input-small tight-form-input" placeholder="50"
empty-to-null ng-model="panel.pageSize" ng-change="render()" ng-model-onblur>
</li>
</div>
<div class="editor-row">
......
import {describe, beforeEach, it, sinon, expect} from 'test/lib/common';
import {TableModel} from '../table_model';
describe('when getting tableData', () => {
describe('timeseries_to_rows', () => {
var panel = {
transform: 'timeseries_to_rows'
};
it ('should return 2 rows', () => {
var data = TableModel.transform([
{
target: 'series1',
datapoints: [[12.12, new Date().getTime()]],
},
{
target: 'series2',
datapoints: [[12.12, new Date().getTime()]],
}
], panel);
expect(data.columns.length).to.be(3);
expect(data.rows.length).to.be(2);
expect(data.columns[0].text).to.be('Time');
expect(data.columns[1].text).to.be('Series');
expect(data.columns[2].text).to.be('Value');
expect(data.rows[0][1]).to.be('series1');
expect(data.rows[0][2]).to.be('12.12');
expect(data.rows[1][1]).to.be('series2');
});
});
describe('timeseries_to_rows', () => {
var panel = {
transform: 'timeseries_to_columns'
};
it ('should return 3 columns', () => {
var data = TableModel.transform([
{
target: 'series1',
datapoints: [[12.12, new Date().getTime()]],
},
{
target: 'series2',
datapoints: [[16.12, new Date().getTime()]],
}
], panel);
expect(data.columns.length).to.be(3);
expect(data.rows.length).to.be(1);
expect(data.columns[0].text).to.be('Time');
expect(data.columns[1].text).to.be('series1');
expect(data.columns[2].text).to.be('series2');
expect(data.rows[0][1]).to.be('12.12');
expect(data.rows[0][2]).to.be('16.12');
});
});
});
import {describe, beforeEach, it, sinon, expect} from 'test/lib/common';
import {TableModel} from '../table_model';
describe('when transforming time series table', () => {
var table;
describe('given 2 time series', () => {
var time = new Date().getTime();
var timeSeries = [
{
target: 'series1',
datapoints: [[12.12, time], [14.44, time+1]],
},
{
target: 'series2',
datapoints: [[16.12, time]],
}
];
describe('timeseries_to_rows', () => {
var panel = {transform: 'timeseries_to_rows'};
beforeEach(() => {
table = TableModel.transform(timeSeries, panel);
});
it('should return 3 rows', () => {
expect(table.rows.length).to.be(3);
expect(table.rows[0][1]).to.be('series1');
expect(table.rows[1][1]).to.be('series1');
expect(table.rows[2][1]).to.be('series2');
expect(table.rows[0][2]).to.be('12.12');
});
it('should return 3 rows', () => {
expect(table.columns.length).to.be(3);
expect(table.columns[0].text).to.be('Time');
expect(table.columns[1].text).to.be('Series');
expect(table.columns[2].text).to.be('Value');
});
});
describe('timeseries_to_columns', () => {
var panel = {
transform: 'timeseries_to_columns'
};
beforeEach(() => {
table = TableModel.transform(timeSeries, panel);
});
it ('should return 3 columns', () => {
expect(table.columns.length).to.be(3);
expect(table.columns[0].text).to.be('Time');
expect(table.columns[1].text).to.be('series1');
expect(table.columns[2].text).to.be('series2');
});
it ('should return 2 rows', () => {
expect(table.rows.length).to.be(2);
expect(table.rows[0][1]).to.be('12.12');
expect(table.rows[0][2]).to.be('16.12');
});
it ('should show - when no value for timestamp', () => {
expect(table.rows[1][2]).to.be('-');
});
});
});
});
///<reference path="../../headers/common.d.ts" />
import moment = require('moment');
import _ = require('lodash');
var transformers = {};
transformers['timeseries_to_rows'] = {
description: 'Time series to rows',
transform: function(data, panel, model) {
model.columns = [
{text: 'Time'},
{text: 'Series'},
{text: 'Value'},
];
model.rows = [];
for (var i = 0; i < data.length; i++) {
var series = data[i];
for (var y = 0; y < series.datapoints.length; y++) {
var dp = series.datapoints[y];
var time = moment(dp[1]).format('LLL');
var value = dp[0];
if (value === null) {
value = 'null';
} else if (_.isNumber(value)) {
value = value.toFixed(2);
}
model.rows.push([time, series.target, value]);
}
}
},
};
transformers['timeseries_to_columns'] = {
description: 'Time series to columns',
transform: function(data, panel, model) {
model.columns = [{text: 'Time'}];
model.rows = [];
var points = {};
for (var i = 0; i < data.length; i++) {
var series = data[i];
model.columns.push({text: series.target});
for (var y = 0; y < series.datapoints.length; y++) {
var dp = series.datapoints[y];
var time = dp[1];
if (!points[time]) {
points[time] = {};
points[time][i] = [dp[0]];
}
else {
points[time][i] = dp[0];
}
}
}
for (var time in points) {
var point = points[time];
var values = [time];
for (var i = 0; i < data.length; i++) {
if (point[i] !== undefined) {
values.push(point[i]);
}
}
model.rows.push(values);
}
}
};
export {transformers}
import {transformers} from './transformers';
export class TableModel {
columns: any[];
......
///<reference path="../../headers/common.d.ts" />
import moment = require('moment');
import _ = require('lodash');
var transformers = {};
transformers['timeseries_to_rows'] = {
description: 'Time series to rows',
transform: function(data, panel, model) {
model.columns = [
{text: 'Time'},
{text: 'Series'},
{text: 'Value'},
];
model.rows = [];
for (var i = 0; i < data.length; i++) {
var series = data[i];
for (var y = 0; y < series.datapoints.length; y++) {
var dp = series.datapoints[y];
var time = moment(dp[1]).format('LLL');
var value = dp[0];
if (value === null) {
value = 'null';
} else if (_.isNumber(value)) {
value = value.toFixed(2);
}
model.rows.push([time, series.target, value]);
}
}
},
};
transformers['timeseries_to_columns'] = {
description: 'Time series to columns',
transform: function(data, panel, model) {
model.columns = [{text: 'Time'}];
model.rows = [];
// group by time
var points = {};
for (var i = 0; i < data.length; i++) {
var series = data[i];
model.columns.push({text: series.target});
for (var y = 0; y < series.datapoints.length; y++) {
var dp = series.datapoints[y];
var timeKey = dp[1].toString();
if (!points[timeKey]) {
points[timeKey] = {time: dp[1]};
points[timeKey][i] = dp[0];
}
else {
points[timeKey][i] = dp[0];
}
}
}
for (var time in points) {
var point = points[time];
var values = [moment(point.time).format('LLL')];
for (var i = 0; i < data.length; i++) {
var value = point[i];
if (_.isNumber(value)) {
values.push(value.toFixed(2));
} else {
values.push('-');
}
}
model.rows.push(values);
}
}
};
export {transformers}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment