Skip to content

Commit cbddb21

Browse files
committed
Added tests cases for PeopleTasksPieChart.
1 parent fe769d4 commit cbddb21

1 file changed

Lines changed: 131 additions & 0 deletions

File tree

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
import React from 'react';
2+
import { render, screen, fireEvent } from '@testing-library/react';
3+
import { useSelector } from 'react-redux';
4+
import { PeopleTasksPieChart } from './PeopleTasksPieChart';
5+
6+
// Mock useSelector
7+
jest.mock('react-redux', () => ({
8+
useSelector: jest.fn(),
9+
}));
10+
11+
describe('PeopleTasksPieChart', () => {
12+
beforeEach(() => {
13+
useSelector.mockClear();
14+
});
15+
16+
const defaultSelectorData = {
17+
tasksWithLoggedHoursById: { task1: 10, task2: 20 },
18+
showTasksPieChart: true,
19+
showProjectsPieChart: false,
20+
tasksLegend: {
21+
task1: ['Task 1', '10 hours'],
22+
task2: ['Task 2', '20 hours'],
23+
},
24+
projectsWithLoggedHoursById: {},
25+
projectsWithLoggedHoursLegend: {},
26+
displayedTasksWithLoggedHoursById: { task1: 10, task2: 20 },
27+
displayedTasksLegend: {
28+
task1: ['Task 1', '10 hours'],
29+
task2: ['Task 2', '20 hours'],
30+
},
31+
showViewAllTasksButton: true,
32+
};
33+
34+
it('renders PieChart for tasks when showTasksPieChart is true', () => {
35+
useSelector.mockReturnValue(defaultSelectorData);
36+
37+
render(<PeopleTasksPieChart darkMode={false} />);
38+
39+
expect(screen.getByText(/Tasks With Completed Hours/i)).toBeInTheDocument();
40+
});
41+
42+
it('renders without crashing when showTasksPieChart and showProjectsPieChart are false', () => {
43+
useSelector.mockReturnValue({
44+
...defaultSelectorData,
45+
showTasksPieChart: false,
46+
showProjectsPieChart: false,
47+
});
48+
49+
const { container } = render(<PeopleTasksPieChart darkMode={false} />);
50+
expect(container.firstChild).toBeNull();
51+
});
52+
53+
it('renders PieChart for projects when showProjectsPieChart is true', () => {
54+
useSelector.mockReturnValue({
55+
...defaultSelectorData,
56+
showProjectsPieChart: true,
57+
});
58+
59+
render(<PeopleTasksPieChart darkMode={false} />);
60+
61+
expect(screen.getByText('Projects With Completed Hours')).toBeInTheDocument();
62+
});
63+
64+
it('renders in dark mode when darkMode prop is true', () => {
65+
useSelector.mockReturnValue(defaultSelectorData);
66+
67+
const { container } = render(<PeopleTasksPieChart darkMode={true} />);
68+
expect(container.firstChild).toHaveClass('text-light');
69+
});
70+
71+
it('toggles "View all" button correctly', () => {
72+
useSelector.mockReturnValue(defaultSelectorData);
73+
74+
render(<PeopleTasksPieChart darkMode={false} />);
75+
76+
const viewAllButton = screen.getByText('View all');
77+
expect(viewAllButton).toBeInTheDocument();
78+
79+
fireEvent.click(viewAllButton);
80+
81+
expect(screen.getByText('Collapse')).toBeInTheDocument();
82+
});
83+
84+
it('does not show "View all" button when showViewAllTasksButton is false', () => {
85+
useSelector.mockReturnValue({
86+
...defaultSelectorData,
87+
showViewAllTasksButton: false,
88+
});
89+
90+
render(<PeopleTasksPieChart darkMode={false} />);
91+
92+
expect(screen.queryByText('View all')).not.toBeInTheDocument();
93+
});
94+
95+
it('displays total hours as 0.00 when there is no task data', () => {
96+
useSelector.mockReturnValue({
97+
...defaultSelectorData,
98+
tasksWithLoggedHoursById: {},
99+
displayedTasksWithLoggedHoursById: {},
100+
});
101+
102+
render(<PeopleTasksPieChart darkMode={false} />);
103+
104+
expect(screen.getByText('Total Hours : 0.00')).toBeInTheDocument();
105+
});
106+
107+
it('displays correct legend information for tasks', () => {
108+
useSelector.mockReturnValue(defaultSelectorData);
109+
110+
render(<PeopleTasksPieChart darkMode={false} />);
111+
112+
expect(screen.getByText('Task 1')).toBeInTheDocument();
113+
expect(screen.getByText('10 hours')).toBeInTheDocument();
114+
expect(screen.getByText('Task 2')).toBeInTheDocument();
115+
expect(screen.getByText('20 hours')).toBeInTheDocument();
116+
});
117+
118+
it('renders PieChart for tasks and projects based on their respective flags', () => {
119+
useSelector.mockReturnValue({
120+
...defaultSelectorData,
121+
showTasksPieChart: true,
122+
showProjectsPieChart: true,
123+
});
124+
125+
render(<PeopleTasksPieChart darkMode={false} />);
126+
127+
expect(screen.getByText(/Tasks With Completed Hours/i)).toBeInTheDocument();
128+
expect(screen.getByText('Projects With Completed Hours')).toBeInTheDocument();
129+
});
130+
131+
});

0 commit comments

Comments
 (0)