import React from 'react'; import { cleanup, screen } from '@testing-library/react'; import { render } from '../../theme-render-wrapper'; import type { Theme } from '../../../components/@styles/theme-provider'; import ChartTooltip from './ChartTooltip'; import type { TooltipFormatterType } from './ChartTooltip'; import { textToDate } from '../formatters/formatters'; declare module '@mui/styles/defaultTheme' { // eslint-disable-next-line @typescript-eslint/no-empty-interface interface DefaultTheme extends Theme {} } afterEach(cleanup); const payload = [ { color: '#E49307', name: 'ticket', value: 6 }, { color: '#4DC9F6', name: 'chat', value: 5 } ]; const config = [ { name: 'Chat123', id: 'chat', show: true, color: '#4DC9F6' }, { name: 'Ticket234', id: 'ticket', show: true, color: '#E49307' } ]; const activeFalse = false; const activeTrue = true; const labelTest = '2021-01-01'; const format = 'date'; const dataXFormat = 'month'; const dataYFormat = 'percent'; const tooltipFormatter: TooltipFormatterType = (item, index) => { const color = index > 0 ? 'green' : 'red'; const value = `$${item.value} USD`; return { ...item, color, value }; }; const formattedLabel = (text: string) => { if (format === 'date') { return textToDate(text, { month: 'short', year: 'numeric' }); } return text; }; describe('', () => { it(`Should render CustomTooltip with all data`, () => { const { queryByText } = render( ); let elm = queryByText(formattedLabel(labelTest)); expect(elm?.innerHTML).toBe(formattedLabel(labelTest)); elm = queryByText(`${config[0].name}:`); expect(elm?.innerHTML).toBe(`${config[0].name}:`); elm = queryByText(payload[0].value); expect(elm?.innerHTML).toBe(payload[0].value.toString()); }); it(`Should render CustomTooltip with postfix`, () => { render( ); const firstValue = payload[0].value; const postfix = screen.queryByText(`${firstValue}%`); expect(postfix).toBeTruthy(); }); it(`Should render CustomTooltip without payload`, () => { const { queryByTestId } = render( ); // label let elm = queryByTestId('label'); expect(elm?.innerHTML).toBe(formattedLabel(labelTest)); // name elm = queryByTestId('name-0'); expect(elm).toBeNull(); // shouldn't exist // values elm = queryByTestId('value-0'); expect(elm).toBeNull(); // shouldn't exist }); it(`Should render CustomTooltip without formatting`, () => { const { queryByTestId } = render( ); // label let elm = queryByTestId('label'); expect(elm?.innerHTML).toBe(labelTest); // name elm = queryByTestId('name-0'); expect(elm?.innerHTML).toBe(`${config[0].name}:`); // values elm = queryByTestId('value-0'); expect(elm?.innerHTML).toBe(payload[1].value.toString()); }); it(`Should render CustomTooltip without label and formatting`, () => { const { queryByTestId } = render( ); // label let elm = queryByTestId('label'); expect(elm?.innerHTML).toBe(''); // name elm = queryByTestId('name-0'); expect(elm?.innerHTML).toBe(`${config[0].name}:`); // values elm = queryByTestId('value-0'); expect(elm?.innerHTML).toBe(payload[1].value.toString()); }); it(`Should render CustomTooltip with percentages`, () => { const { queryByText } = render( ); let elm = queryByText(formattedLabel(labelTest)); expect(elm?.innerHTML).toBe(formattedLabel(labelTest)); elm = queryByText(`${config[1].name}:`); expect(elm?.innerHTML).toBe(`${config[1].name}:`); elm = queryByText(`${payload[1].value}%`); expect(elm?.innerHTML).toBe(`${payload[1].value}%`); }); it(`Should render CustomTooltip with formatted values`, () => { const { queryByTestId } = render( ); // label let elm = queryByTestId('label'); expect(elm?.innerHTML).toBe(formattedLabel(labelTest)); // names elm = queryByTestId('name-0'); expect(elm?.innerHTML).toBe(`${config[0].name}:`); elm = queryByTestId('name-1'); expect(elm?.innerHTML).toBe(`${config[1].name}:`); // values elm = queryByTestId('value-0'); expect(elm?.innerHTML).toBe(`$${payload[1].value} USD`); elm = queryByTestId('value-1'); expect(elm?.innerHTML).toBe(`$${payload[0].value} USD`); }); it(`Should render CustomTooltip with formatted squares`, () => { let elm, style; const { queryByTestId } = render( ); // label elm = queryByTestId('label'); expect(elm?.innerHTML).toBe(formattedLabel(labelTest)); // squares elm = queryByTestId('square-0'); style = elm ? getComputedStyle(elm) : { backgroundColor: '' }; expect(style.backgroundColor).toBe('red'); elm = queryByTestId('square-1'); style = elm ? getComputedStyle(elm) : { backgroundColor: '' }; expect(style.backgroundColor).toBe('green'); }); it(`Should not render CustomTooltip`, () => { const { container } = render(); expect(container.firstChild).toBeNull(); }); });