|
|
@@ -1,5 +1,6 @@
|
|
|
import {describe, beforeEach, it, sinon, expect} from 'test/lib/common';
|
|
|
|
|
|
+import _ from 'lodash';
|
|
|
import TableModel from 'app/core/table_model';
|
|
|
import {TableRenderer} from '../renderer';
|
|
|
|
|
|
@@ -14,6 +15,10 @@ describe('when rendering table', () => {
|
|
|
{text: 'String'},
|
|
|
{text: 'United', unit: 'bps'},
|
|
|
{text: 'Sanitized'},
|
|
|
+ {text: 'Link'},
|
|
|
+ ];
|
|
|
+ table.rows = [
|
|
|
+ [1388556366666, 1230, 40, undefined, "", "", "my.host.com", "host1"]
|
|
|
];
|
|
|
|
|
|
var panel = {
|
|
|
@@ -55,6 +60,14 @@ describe('when rendering table', () => {
|
|
|
pattern: 'Sanitized',
|
|
|
type: 'string',
|
|
|
sanitize: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ pattern: 'Link',
|
|
|
+ type: 'string',
|
|
|
+ link: true,
|
|
|
+ linkUrl: "/dashboard?param=$__cell¶m_1=$__cell_1¶m_2=$__cell_2",
|
|
|
+ linkTooltip: "$__cell $__cell_1 $__cell_6",
|
|
|
+ linkTargetBlank: true
|
|
|
}
|
|
|
]
|
|
|
};
|
|
|
@@ -63,75 +76,87 @@ describe('when rendering table', () => {
|
|
|
return 'sanitized';
|
|
|
};
|
|
|
|
|
|
- var renderer = new TableRenderer(panel, table, 'utc', sanitize);
|
|
|
+ var templateSrv = {
|
|
|
+ replace: function(value, scopedVars) {
|
|
|
+ if (scopedVars) {
|
|
|
+ // For testing variables replacement in link
|
|
|
+ _.each(scopedVars, function(val, key) {
|
|
|
+ value = value.replace('$' + key, val.value);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ var renderer = new TableRenderer(panel, table, 'utc', sanitize, templateSrv);
|
|
|
|
|
|
it('time column should be formated', () => {
|
|
|
- var html = renderer.renderCell(0, 1388556366666);
|
|
|
+ var html = renderer.renderCell(0, 0, 1388556366666);
|
|
|
expect(html).to.be('<td>2014-01-01T06:06:06Z</td>');
|
|
|
});
|
|
|
|
|
|
it('undefined time column should be rendered as -', () => {
|
|
|
- var html = renderer.renderCell(0, undefined);
|
|
|
+ var html = renderer.renderCell(0, 0, undefined);
|
|
|
expect(html).to.be('<td>-</td>');
|
|
|
});
|
|
|
|
|
|
it('null time column should be rendered as -', () => {
|
|
|
- var html = renderer.renderCell(0, null);
|
|
|
+ var html = renderer.renderCell(0, 0, null);
|
|
|
expect(html).to.be('<td>-</td>');
|
|
|
});
|
|
|
|
|
|
it('number column with unit specified should ignore style unit', () => {
|
|
|
- var html = renderer.renderCell(5, 1230);
|
|
|
+ var html = renderer.renderCell(5, 0, 1230);
|
|
|
expect(html).to.be('<td>1.23 kbps</td>');
|
|
|
});
|
|
|
|
|
|
it('number column should be formated', () => {
|
|
|
- var html = renderer.renderCell(1, 1230);
|
|
|
+ var html = renderer.renderCell(1, 0, 1230);
|
|
|
expect(html).to.be('<td>1.230 s</td>');
|
|
|
});
|
|
|
|
|
|
it('number style should ignore string values', () => {
|
|
|
- var html = renderer.renderCell(1, 'asd');
|
|
|
+ var html = renderer.renderCell(1, 0, 'asd');
|
|
|
expect(html).to.be('<td>asd</td>');
|
|
|
});
|
|
|
|
|
|
it('colored cell should have style', () => {
|
|
|
- var html = renderer.renderCell(2, 40);
|
|
|
+ var html = renderer.renderCell(2, 0, 40);
|
|
|
expect(html).to.be('<td style="color:green">40.0</td>');
|
|
|
});
|
|
|
|
|
|
it('colored cell should have style', () => {
|
|
|
- var html = renderer.renderCell(2, 55);
|
|
|
+ var html = renderer.renderCell(2, 0, 55);
|
|
|
expect(html).to.be('<td style="color:orange">55.0</td>');
|
|
|
});
|
|
|
|
|
|
it('colored cell should have style', () => {
|
|
|
- var html = renderer.renderCell(2, 85);
|
|
|
+ var html = renderer.renderCell(2, 0, 85);
|
|
|
expect(html).to.be('<td style="color:red">85.0</td>');
|
|
|
});
|
|
|
|
|
|
it('unformated undefined should be rendered as string', () => {
|
|
|
- var html = renderer.renderCell(3, 'value');
|
|
|
+ var html = renderer.renderCell(3, 0, 'value');
|
|
|
expect(html).to.be('<td>value</td>');
|
|
|
});
|
|
|
|
|
|
it('string style with escape html should return escaped html', () => {
|
|
|
- var html = renderer.renderCell(4, "&breaking <br /> the <br /> row");
|
|
|
+ var html = renderer.renderCell(4, 0, "&breaking <br /> the <br /> row");
|
|
|
expect(html).to.be('<td>&breaking <br /> the <br /> row</td>');
|
|
|
});
|
|
|
|
|
|
it('undefined formater should return escaped html', () => {
|
|
|
- var html = renderer.renderCell(3, "&breaking <br /> the <br /> row");
|
|
|
+ var html = renderer.renderCell(3, 0, "&breaking <br /> the <br /> row");
|
|
|
expect(html).to.be('<td>&breaking <br /> the <br /> row</td>');
|
|
|
});
|
|
|
|
|
|
it('undefined value should render as -', () => {
|
|
|
- var html = renderer.renderCell(3, undefined);
|
|
|
+ var html = renderer.renderCell(3, 0, undefined);
|
|
|
expect(html).to.be('<td></td>');
|
|
|
});
|
|
|
|
|
|
it('sanitized value should render as', () => {
|
|
|
- var html = renderer.renderCell(6, 'text <a href="http://google.com">link</a>');
|
|
|
+ var html = renderer.renderCell(6, 0, 'text <a href="http://google.com">link</a>');
|
|
|
expect(html).to.be('<td>sanitized</td>');
|
|
|
});
|
|
|
|
|
|
@@ -146,7 +171,22 @@ describe('when rendering table', () => {
|
|
|
it('Colored column title should be Colored', () => {
|
|
|
expect(table.columns[2].title).to.be('Colored');
|
|
|
});
|
|
|
+
|
|
|
+ it('link should render as', () => {
|
|
|
+ var html = renderer.renderCell(7, 0, 'host1');
|
|
|
+ var expectedHtml = `
|
|
|
+ <td class="table-panel-cell-link">
|
|
|
+ <a href="/dashboard?param=host1¶m_1=1230¶m_2=40"
|
|
|
+ target="_blank" data-link-tooltip data-original-title="host1 1230 my.host.com" data-placement="right">
|
|
|
+ host1
|
|
|
+ </a>
|
|
|
+ </td>
|
|
|
+ `;
|
|
|
+ expect(normalize(html)).to.be(normalize(expectedHtml));
|
|
|
+ });
|
|
|
});
|
|
|
});
|
|
|
|
|
|
-
|
|
|
+function normalize(str) {
|
|
|
+ return str.replace(/\s+/gm, ' ').trim();
|
|
|
+}
|