1
import * as React from 'react';
2
import { mount, shallow } from 'enzyme';
3
import DataTable, { DataTableProps } from './DataTable';
4
import { Alert, Table } from 'reactstrap';
5
import SeriesName from './SeriesName';
7
describe('DataTable', () => {
8
describe('when data is null', () => {
9
it('renders an alert', () => {
10
const table = shallow(<DataTable useLocalTime={false} data={null} />);
11
const alert = table.find(Alert);
12
expect(Object.keys(alert.props())).toHaveLength(7);
13
expect(alert.prop('color')).toEqual('light');
14
expect(alert.prop('children')).toEqual('No data queried yet');
18
describe('when data.result is empty', () => {
19
it('renders an alert', () => {
20
const dataTableProps: DataTableProps = {
27
const table = shallow(<DataTable {...dataTableProps} />);
28
const alert = table.find(Alert);
29
expect(Object.keys(alert.props())).toHaveLength(7);
30
expect(alert.prop('color')).toEqual('secondary');
31
expect(alert.prop('children')).toEqual('Empty query result');
35
describe('when resultType is a vector with values', () => {
36
const dataTableProps: DataTableProps = {
42
__name__: 'metric_name_1',
46
value: [1572098246.599, '0'],
50
__name__: 'metric_name_2',
54
value: [1572098246.599, '1'],
60
const dataTable = shallow(<DataTable {...dataTableProps} />);
62
it('renders a table', () => {
63
const table = dataTable.find(Table);
64
expect(table.prop('hover')).toBe(true);
65
expect(table.prop('size')).toEqual('sm');
66
expect(table.prop('className')).toEqual('data-table');
67
expect(table.find('tbody')).toHaveLength(1);
70
it('renders rows', () => {
71
const table = dataTable.find(Table);
72
table.find('tr').forEach((row, idx) => {
73
expect(row.find(SeriesName)).toHaveLength(1);
74
expect(row.find('td').at(1).text()).toEqual(`${idx}`);
79
describe('when resultType is a vector with histograms', () => {
80
const dataTableProps: DataTableProps = {
86
__name__: 'metric_name_1',
96
[1, '-1', '-0.5', '2'],
97
[3, '-0.5', '0.5', '3'],
105
__name__: 'metric_name_2',
115
[0, '0.5', '1', '2'],
123
__name__: 'metric_name_2',
132
const dataTable = shallow(<DataTable {...dataTableProps} />);
134
it('renders a table', () => {
135
const table = dataTable.find(Table).first();
136
expect(table.prop('hover')).toBe(true);
137
expect(table.prop('size')).toEqual('sm');
138
expect(table.prop('className')).toEqual('data-table');
139
expect(table.find('tbody')).toHaveLength(dataTableProps.data?.result.length as number);
142
it('renders rows', () => {
143
const table = dataTable.find(Table);
144
table.find('tr').forEach((row, idx) => {
145
const seriesNameComponent = dataTable.find('SeriesName');
146
expect(seriesNameComponent).toHaveLength(dataTableProps.data?.result.length as number);
151
describe('when resultType is a vector with too many values', () => {
152
const dataTableProps: DataTableProps = {
154
resultType: 'vector',
155
result: Array.from(Array(10001).keys()).map((i) => {
158
__name__: `metric_name_${i}`,
162
value: [1572098246.599, `${i}`],
168
const dataTable = shallow(<DataTable {...dataTableProps} />);
170
it('renders limited rows', () => {
171
const table = dataTable.find(Table);
172
expect(table.find('tr')).toHaveLength(10000);
175
it('renders a warning', () => {
176
const alerts = dataTable.find(Alert);
177
expect(alerts.first().render().text()).toEqual('Warning: Fetched 10001 metrics, only displaying first 10000.');
181
describe('when resultType is vector and size is more than maximum limit of formatting', () => {
182
const dataTableProps: DataTableProps = {
184
resultType: 'vector',
185
result: Array.from(Array(1001).keys()).map((i) => {
188
__name__: `metric_name_${i}`,
192
value: [1572098246.599, `${i}`],
198
const dataTable = shallow(<DataTable {...dataTableProps} />);
200
it('renders a warning', () => {
201
const alerts = dataTable.find(Alert);
202
expect(alerts.first().render().text()).toEqual(
203
'Notice: Showing more than 1000 series, turning off label formatting for performance reasons.'
208
describe('when result type is a matrix', () => {
209
const dataTableProps: DataTableProps = {
211
resultType: 'matrix',
215
__name__: 'promhttp_metric_handler_requests_total',
217
instance: 'localhost:9090',
221
[1572097950.93, '9'],
222
[1572097965.931, '10'],
223
[1572097980.929, '11'],
224
[1572097995.931, '12'],
225
[1572098010.932, '13'],
226
[1572098025.933, '14'],
227
[1572098040.93, '15'],
228
[1572098055.93, '16'],
229
[1572098070.93, '17'],
230
[1572098085.936, '18'],
231
[1572098100.936, '19'],
232
[1572098115.933, '20'],
233
[1572098130.932, '21'],
234
[1572098145.932, '22'],
235
[1572098160.933, '23'],
236
[1572098175.934, '24'],
237
[1572098190.937, '25'],
238
[1572098205.934, '26'],
239
[1572098220.933, '27'],
240
[1572098235.934, '28'],
245
__name__: 'promhttp_metric_handler_requests_total',
247
instance: 'localhost:9090',
251
[1572097950.93, '0'],
252
[1572097965.931, '0'],
253
[1572097980.929, '0'],
254
[1572097995.931, '0'],
255
[1572098010.932, '0'],
256
[1572098025.933, '0'],
257
[1572098040.93, '0'],
258
[1572098055.93, '0'],
259
[1572098070.93, '0'],
260
[1572098085.936, '0'],
261
[1572098100.936, '0'],
262
[1572098115.933, '0'],
263
[1572098130.932, '0'],
264
[1572098145.932, '0'],
265
[1572098160.933, '0'],
266
[1572098175.934, '0'],
267
[1572098190.937, '0'],
268
[1572098205.934, '0'],
269
[1572098220.933, '0'],
270
[1572098235.934, '0'],
275
__name__: 'promhttp_metric_handler_requests_total',
277
instance: 'localhost:9090',
281
[1572097950.93, '0'],
282
[1572097965.931, '0'],
283
[1572097980.929, '0'],
284
[1572097995.931, '0'],
285
[1572098010.932, '0'],
286
[1572098025.933, '0'],
287
[1572098040.93, '0'],
288
[1572098055.93, '0'],
289
[1572098070.93, '0'],
290
[1572098085.936, '0'],
291
[1572098100.936, '0'],
292
[1572098115.933, '0'],
293
[1572098130.932, '0'],
294
[1572098145.932, '0'],
295
[1572098160.933, '0'],
296
[1572098175.934, '0'],
297
[1572098190.937, '0'],
298
[1572098205.934, '0'],
299
[1572098220.933, '0'],
300
[1572098235.934, '0'],
307
const dataTable = shallow(<DataTable {...dataTableProps} />);
308
it('renders rows', () => {
309
const table = dataTable.find(Table);
310
const rows = table.find('tr');
311
expect(table.find('tr')).toHaveLength(3);
312
const row = rows.at(0);
313
expect(row.text()).toEqual(
314
`<SeriesName />9 @1572097950.9310 @1572097965.93111 @1572097980.92912 @1572097995.93113 @1572098010.93214 @1572098025.93315 @1572098040.9316 @1572098055.9317 @1572098070.9318 @1572098085.93619 @1572098100.93620 @1572098115.93321 @1572098130.93222 @1572098145.93223 @1572098160.93324 @1572098175.93425 @1572098190.93726 @1572098205.93427 @1572098220.93328 @1572098235.934 `
319
describe('when resultType is a scalar', () => {
320
const dataTableProps: DataTableProps = {
322
resultType: 'scalar',
323
result: [1572098246.599, '5'],
327
const dataTable = shallow(<DataTable {...dataTableProps} />);
328
it('renders a scalar row', () => {
329
const table = dataTable.find(Table);
330
const rows = table.find('tr');
331
expect(rows.text()).toEqual('scalar5');
335
describe('when resultType is a string', () => {
336
const dataTableProps: DataTableProps = {
338
resultType: 'string',
339
result: [1572098246.599, 'test'],
343
const dataTable = shallow(<DataTable {...dataTableProps} />);
344
it('renders a string row', () => {
345
const table = dataTable.find(Table);
346
const rows = table.find('tr');
347
expect(rows.text()).toEqual('stringtest');