Skip to content

Commit 6de8910

Browse files
test(VisualizationTooltip): add unit tests for tooltip rendering and positioning
1 parent 65413a4 commit 6de8910

1 file changed

Lines changed: 76 additions & 0 deletions

File tree

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// components/dashboard/VisualizationTooltip.test.tsx
2+
import { render, screen } from '@testing-library/react';
3+
import { describe, expect, it, vi } from 'vitest';
4+
import type { HTMLAttributes, ReactNode } from 'react';
5+
import VisualizationTooltip from './VisualizationTooltip';
6+
import '@testing-library/jest-dom/vitest';
7+
8+
// framer-motion mock
9+
vi.mock('framer-motion', () => ({
10+
motion: {
11+
div: ({ children, ...props }: HTMLAttributes<HTMLDivElement> & { children?: ReactNode }) => (
12+
<div {...props}>{children}</div>
13+
),
14+
},
15+
}));
16+
17+
describe('VisualizationTooltip', () => {
18+
it('renders tooltip role', () => {
19+
render(
20+
<VisualizationTooltip title="Tooltip Title" x={100} y={200}>
21+
Content
22+
</VisualizationTooltip>
23+
);
24+
25+
expect(screen.getByRole('tooltip')).toBeInTheDocument();
26+
});
27+
28+
it('renders title correctly', () => {
29+
render(
30+
<VisualizationTooltip title="Commits" x={100} y={200}>
31+
Content
32+
</VisualizationTooltip>
33+
);
34+
35+
expect(screen.getByText('Commits')).toBeInTheDocument();
36+
});
37+
38+
it('renders children content', () => {
39+
render(
40+
<VisualizationTooltip title="Title" x={100} y={200}>
41+
<span>5 contributions</span>
42+
</VisualizationTooltip>
43+
);
44+
45+
expect(screen.getByText('5 contributions')).toBeInTheDocument();
46+
});
47+
48+
it('applies x and y coordinates to style', () => {
49+
render(
50+
<VisualizationTooltip title="Title" x={150} y={250}>
51+
Content
52+
</VisualizationTooltip>
53+
);
54+
55+
const tooltip = screen.getByRole('tooltip');
56+
57+
expect(tooltip).toHaveStyle({
58+
left: '150px',
59+
top: '250px',
60+
});
61+
});
62+
63+
it('renders nested React elements passed as children', () => {
64+
render(
65+
<VisualizationTooltip title="Stats" x={10} y={20}>
66+
<>
67+
<div>Total: 10</div>
68+
<div>Today: 2</div>
69+
</>
70+
</VisualizationTooltip>
71+
);
72+
73+
expect(screen.getByText('Total: 10')).toBeInTheDocument();
74+
expect(screen.getByText('Today: 2')).toBeInTheDocument();
75+
});
76+
});

0 commit comments

Comments
 (0)