mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Baldm0mma/xy tooltip tests (#81746)
* baldm0mma/xyTooltipTests/ add first tests * passing test!!! * baldm0mma/xyTooltipTests/ add tests * baldm0mma/xyTooltipTests/ revert destructure move * baldm0mma/xyTooltipTests/ clean up test * baldm0mma/xyTooltipTests/ update test names * baldm0mma/xyTooltipTests/ ignore ts issue * baldm0mma/xyTooltipTests/ update any * baldm0mma/xyTooltipTests/ add follwing types * baldm0mma/xyTooltipTests/ remove "field" * baldm0mma/xyTooltipTests/ remove debug
This commit is contained in:
parent
d5ac9340e5
commit
49b49e28af
172
public/app/plugins/panel/xychart/XYChartTooltip.test.tsx
Normal file
172
public/app/plugins/panel/xychart/XYChartTooltip.test.tsx
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
import { render } from '@testing-library/react';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import { DataFrame, FieldType, ValueLinkConfig, LinkTarget } from '@grafana/data';
|
||||||
|
import { SortOrder, VisibilityMode } from '@grafana/schema';
|
||||||
|
import { LegendDisplayMode, TooltipDisplayMode } from '@grafana/ui';
|
||||||
|
|
||||||
|
import { XYChartTooltip, Props } from './XYChartTooltip';
|
||||||
|
import { ScatterSeries } from './types';
|
||||||
|
|
||||||
|
describe('XYChartTooltip', () => {
|
||||||
|
it('should render null when `allSeries` is empty', () => {
|
||||||
|
const { container } = render(<XYChartTooltip {...getProps()} />);
|
||||||
|
|
||||||
|
expect(container.firstChild).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render null when `dataIdxs` is null', () => {
|
||||||
|
const { container } = render(<XYChartTooltip {...getProps({ dataIdxs: [null] })} />);
|
||||||
|
|
||||||
|
expect(container.firstChild).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render the tooltip header label with series name', () => {
|
||||||
|
const seriesName = 'seriesName_1';
|
||||||
|
const { getByText } = render(
|
||||||
|
<XYChartTooltip
|
||||||
|
{...getProps({ allSeries: buildAllSeries(seriesName), data: buildData(), dataIdxs: [1], seriesIdx: 1 })}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(getByText(seriesName)).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render the tooltip content with x and y field names and values', () => {
|
||||||
|
const field1Name = 'test_field_1';
|
||||||
|
const field2Name = 'test_field_2';
|
||||||
|
const { getByText } = render(
|
||||||
|
<XYChartTooltip
|
||||||
|
{...getProps({
|
||||||
|
allSeries: buildAllSeries(),
|
||||||
|
data: buildData({ field1Name, field2Name }),
|
||||||
|
dataIdxs: [1],
|
||||||
|
seriesIdx: 1,
|
||||||
|
})}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(getByText(field1Name)).toBeInTheDocument();
|
||||||
|
expect(getByText('32.799')).toBeInTheDocument();
|
||||||
|
expect(getByText(field2Name)).toBeInTheDocument();
|
||||||
|
expect(getByText(300)).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render the tooltip footer with data links', () => {
|
||||||
|
const dataLinkTitle = 'Google';
|
||||||
|
const { getByText } = render(
|
||||||
|
<XYChartTooltip
|
||||||
|
{...getProps({
|
||||||
|
allSeries: buildAllSeries(),
|
||||||
|
data: buildData({ dataLinkTitle }),
|
||||||
|
dataIdxs: [1],
|
||||||
|
seriesIdx: 1,
|
||||||
|
isPinned: true,
|
||||||
|
})}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(getByText(dataLinkTitle)).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function getProps(additionalProps: Partial<Props> | null = null): Props {
|
||||||
|
if (!additionalProps) {
|
||||||
|
return getDefaultProps();
|
||||||
|
}
|
||||||
|
|
||||||
|
return { ...getDefaultProps(), ...additionalProps };
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDefaultProps(): Props {
|
||||||
|
return {
|
||||||
|
data: [],
|
||||||
|
allSeries: [],
|
||||||
|
dataIdxs: [],
|
||||||
|
seriesIdx: null,
|
||||||
|
isPinned: false,
|
||||||
|
dismiss: jest.fn(),
|
||||||
|
options: {
|
||||||
|
dims: {
|
||||||
|
frame: 0,
|
||||||
|
},
|
||||||
|
series: [],
|
||||||
|
legend: {
|
||||||
|
calcs: [],
|
||||||
|
displayMode: LegendDisplayMode.List,
|
||||||
|
placement: 'bottom',
|
||||||
|
showLegend: true,
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
mode: TooltipDisplayMode.Single,
|
||||||
|
sort: SortOrder.Ascending,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildAllSeries(testSeriesName = 'test'): ScatterSeries[] {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
name: testSeriesName,
|
||||||
|
legend: jest.fn(),
|
||||||
|
frame: (frames: DataFrame[]) => frames[0],
|
||||||
|
x: (frame: DataFrame) => frame.fields[0],
|
||||||
|
y: (frame: DataFrame) => frame.fields[1],
|
||||||
|
pointColor: (_frame: DataFrame) => '#111',
|
||||||
|
showLine: false,
|
||||||
|
lineWidth: 1,
|
||||||
|
lineStyle: {},
|
||||||
|
lineColor: jest.fn(),
|
||||||
|
showPoints: VisibilityMode.Always,
|
||||||
|
pointSize: jest.fn(),
|
||||||
|
pointSymbol: jest.fn(),
|
||||||
|
label: VisibilityMode.Always,
|
||||||
|
labelValue: jest.fn(),
|
||||||
|
show: true,
|
||||||
|
hints: {
|
||||||
|
pointSize: { fixed: 10, max: 10, min: 1 },
|
||||||
|
pointColor: {
|
||||||
|
mode: {
|
||||||
|
id: 'threshold',
|
||||||
|
name: 'Threshold',
|
||||||
|
getCalculator: jest.fn(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildData({ dataLinkTitle = 'Grafana', field1Name = 'field_1', field2Name = 'field_2' } = {}): DataFrame[] {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: field1Name,
|
||||||
|
type: FieldType.number,
|
||||||
|
config: {},
|
||||||
|
values: [
|
||||||
|
61.385, 32.799, 33.7712, 36.17, 39.0646, 27.8333, 42.0046, 40.3363, 39.8647, 37.669, 42.2373, 43.3504,
|
||||||
|
35.6411, 40.314, 34.8375, 40.3736, 44.5672,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: field2Name,
|
||||||
|
type: FieldType.number,
|
||||||
|
config: {},
|
||||||
|
values: [500, 300, 150, 250, 600, 500, 700, 400, 540, 630, 460, 250, 500, 400, 800, 930, 360],
|
||||||
|
getLinks: (_config: ValueLinkConfig) => [
|
||||||
|
{
|
||||||
|
href: 'http://www.someWebsite.com',
|
||||||
|
title: dataLinkTitle,
|
||||||
|
target: '_blank' as LinkTarget,
|
||||||
|
origin: { name: '', type: FieldType.boolean, config: {}, values: [] },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
length: 17,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user