Skip to content

Commit 0faea76

Browse files
test: add mouse interactivity tests for resume parser
1 parent 0783fae commit 0faea76

1 file changed

Lines changed: 80 additions & 0 deletions

File tree

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { describe, it, expect, vi, beforeEach } from 'vitest';
2+
3+
describe('Resume Parser Mouse Interactivity', () => {
4+
let element: HTMLElement;
5+
6+
beforeEach(() => {
7+
element = document.createElement('div');
8+
document.body.appendChild(element);
9+
});
10+
11+
it('shows tooltip on hover (mouseenter event triggers handler)', () => {
12+
const showTooltip = vi.fn();
13+
14+
element.addEventListener('mouseenter', showTooltip);
15+
element.dispatchEvent(new MouseEvent('mouseenter', { bubbles: true }));
16+
17+
expect(showTooltip).toHaveBeenCalledTimes(1);
18+
});
19+
20+
it('hides tooltip on mouseleave', () => {
21+
const hideTooltip = vi.fn();
22+
23+
element.addEventListener('mouseleave', hideTooltip);
24+
element.dispatchEvent(new MouseEvent('mouseleave', { bubbles: true }));
25+
26+
expect(hideTooltip).toHaveBeenCalledTimes(1);
27+
});
28+
29+
it('handles click event propagation correctly', () => {
30+
const parent = document.createElement('div');
31+
const child = document.createElement('div');
32+
33+
const clickHandler = vi.fn();
34+
35+
parent.addEventListener('click', clickHandler);
36+
parent.appendChild(child);
37+
document.body.appendChild(parent);
38+
39+
child.dispatchEvent(new MouseEvent('click', { bubbles: true }));
40+
41+
expect(clickHandler).toHaveBeenCalled();
42+
});
43+
44+
it('applies pointer cursor style on hover state', () => {
45+
element.style.cursor = 'default';
46+
47+
// simulate hover effect
48+
element.addEventListener('mouseenter', () => {
49+
element.style.cursor = 'pointer';
50+
});
51+
52+
element.dispatchEvent(new MouseEvent('mouseenter', { bubbles: true }));
53+
54+
expect(element.style.cursor).toBe('pointer');
55+
});
56+
57+
it('tracks tooltip position updates correctly', () => {
58+
const tooltip = {
59+
x: 0,
60+
y: 0,
61+
};
62+
63+
// simulate mouse move positioning logic
64+
element.addEventListener('mousemove', (e: MouseEvent) => {
65+
tooltip.x = e.clientX;
66+
tooltip.y = e.clientY;
67+
});
68+
69+
element.dispatchEvent(
70+
new MouseEvent('mousemove', {
71+
bubbles: true,
72+
clientX: 120,
73+
clientY: 250,
74+
})
75+
);
76+
77+
expect(tooltip.x).toBe(120);
78+
expect(tooltip.y).toBe(250);
79+
});
80+
});

0 commit comments

Comments
 (0)