| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- import _ from 'lodash';
- import TableModel from 'app/core/table_model';
- import { TableRenderer } from '../renderer';
- describe('when rendering table', () => {
- describe('given 2 columns', () => {
- var table = new TableModel();
- table.columns = [
- { text: 'Time' },
- { text: 'Value' },
- { text: 'Colored' },
- { text: 'Undefined' },
- { text: 'String' },
- { text: 'United', unit: 'bps' },
- { text: 'Sanitized' },
- { text: 'Link' },
- { text: 'Array' },
- ];
- table.rows = [[1388556366666, 1230, 40, undefined, '', '', 'my.host.com', 'host1', ['value1', 'value2']]];
- var panel = {
- pageSize: 10,
- styles: [
- {
- pattern: 'Time',
- type: 'date',
- format: 'LLL',
- alias: 'Timestamp',
- },
- {
- pattern: '/(Val)ue/',
- type: 'number',
- unit: 'ms',
- decimals: 3,
- alias: '$1',
- },
- {
- pattern: 'Colored',
- type: 'number',
- unit: 'none',
- decimals: 1,
- colorMode: 'value',
- thresholds: [50, 80],
- colors: ['green', 'orange', 'red'],
- },
- {
- pattern: 'String',
- type: 'string',
- },
- {
- pattern: 'United',
- type: 'number',
- unit: 'ms',
- decimals: 2,
- },
- {
- 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,
- },
- {
- pattern: 'Array',
- type: 'number',
- unit: 'ms',
- decimals: 3,
- },
- ],
- };
- var sanitize = function(value) {
- return 'sanitized';
- };
- 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, 0, 1388556366666);
- expect(html).toBe('<td>2014-01-01T06:06:06Z</td>');
- });
- it('undefined time column should be rendered as -', () => {
- var html = renderer.renderCell(0, 0, undefined);
- expect(html).toBe('<td>-</td>');
- });
- it('null time column should be rendered as -', () => {
- var html = renderer.renderCell(0, 0, null);
- expect(html).toBe('<td>-</td>');
- });
- it('number column with unit specified should ignore style unit', () => {
- var html = renderer.renderCell(5, 0, 1230);
- expect(html).toBe('<td>1.23 kbps</td>');
- });
- it('number column should be formated', () => {
- var html = renderer.renderCell(1, 0, 1230);
- expect(html).toBe('<td>1.230 s</td>');
- });
- it('number style should ignore string values', () => {
- var html = renderer.renderCell(1, 0, 'asd');
- expect(html).toBe('<td>asd</td>');
- });
- it('colored cell should have style', () => {
- var html = renderer.renderCell(2, 0, 40);
- expect(html).toBe('<td style="color:green">40.0</td>');
- });
- it('colored cell should have style', () => {
- var html = renderer.renderCell(2, 0, 55);
- expect(html).toBe('<td style="color:orange">55.0</td>');
- });
- it('colored cell should have style', () => {
- var html = renderer.renderCell(2, 0, 85);
- expect(html).toBe('<td style="color:red">85.0</td>');
- });
- it('unformated undefined should be rendered as string', () => {
- var html = renderer.renderCell(3, 0, 'value');
- expect(html).toBe('<td>value</td>');
- });
- it('string style with escape html should return escaped html', () => {
- var html = renderer.renderCell(4, 0, '&breaking <br /> the <br /> row');
- expect(html).toBe('<td>&breaking <br /> the <br /> row</td>');
- });
- it('undefined formater should return escaped html', () => {
- var html = renderer.renderCell(3, 0, '&breaking <br /> the <br /> row');
- expect(html).toBe('<td>&breaking <br /> the <br /> row</td>');
- });
- it('undefined value should render as -', () => {
- var html = renderer.renderCell(3, 0, undefined);
- expect(html).toBe('<td></td>');
- });
- it('sanitized value should render as', () => {
- var html = renderer.renderCell(6, 0, 'text <a href="http://google.com">link</a>');
- expect(html).toBe('<td>sanitized</td>');
- });
- it('Time column title should be Timestamp', () => {
- expect(table.columns[0].title).toBe('Timestamp');
- });
- it('Value column title should be Val', () => {
- expect(table.columns[1].title).toBe('Val');
- });
- it('Colored column title should be Colored', () => {
- expect(table.columns[2].title).toBe('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)).toBe(normalize(expectedHtml));
- });
- it('Array column should not use number as formatter', () => {
- var html = renderer.renderCell(8, 0, ['value1', 'value2']);
- expect(html).toBe('<td>value1, value2</td>');
- });
- });
- });
- function normalize(str) {
- return str.replace(/\s+/gm, ' ').trim();
- }
|