Skip to content

Commit 9f6f260

Browse files
authored
test(utils): add tests for theme mode toggle (#313)
1 parent a4f23a8 commit 9f6f260

1 file changed

Lines changed: 44 additions & 1 deletion

File tree

frontend/src/components/utils/__tests__/theme-mode-toggle.test.tsx

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
1-
import { render, screen } from '@testing-library/react';
1+
import { fireEvent, render, screen } from '@testing-library/react';
22
import { ModeToggle } from '../ThemeModeToggle';
33
import { useTheme } from '@/components/utils/ThemeProvider';
44

55
// Mocking the useTheme hook
66
jest.mock('@/components/utils/ThemeProvider');
77

8+
jest.mock('@/components/ui/dropdown-menu', () => ({
9+
DropdownMenu: ({ children }: any) => <div>{children}</div>,
10+
DropdownMenuTrigger: ({ children }: any) => <div>{children}</div>,
11+
DropdownMenuContent: ({ children }: any) => <div>{children}</div>,
12+
DropdownMenuItem: ({ children, onClick }: any) => (
13+
<button onClick={onClick}>{children}</button>
14+
),
15+
}));
16+
817
describe('ModeToggle', () => {
918
const setThemeMock = jest.fn();
1019

@@ -19,4 +28,38 @@ describe('ModeToggle', () => {
1928
screen.getByRole('button', { name: /toggle theme/i })
2029
).toBeInTheDocument();
2130
});
31+
32+
test('calls setTheme(light) when Light is clicked', () => {
33+
render(<ModeToggle />);
34+
35+
fireEvent.click(screen.getByRole('button', { name: /toggle theme/i }));
36+
37+
fireEvent.click(screen.getByText('Light'));
38+
expect(setThemeMock).toHaveBeenCalledWith('light');
39+
});
40+
41+
test('calls setTheme(dark) when Dark is clicked', () => {
42+
render(<ModeToggle />);
43+
44+
fireEvent.click(screen.getByRole('button', { name: /toggle theme/i }));
45+
46+
fireEvent.click(screen.getByText('Dark'));
47+
expect(setThemeMock).toHaveBeenCalledWith('dark');
48+
});
49+
50+
test('calls setTheme(system) when System is clicked', () => {
51+
render(<ModeToggle />);
52+
53+
fireEvent.click(screen.getByRole('button', { name: /toggle theme/i }));
54+
55+
fireEvent.click(screen.getByText('System'));
56+
expect(setThemeMock).toHaveBeenCalledWith('system');
57+
});
58+
59+
test('render sun and moon icons', () => {
60+
render(<ModeToggle />);
61+
62+
expect(screen.getByTestId('sun-icon')).toBeInTheDocument();
63+
expect(screen.getByTestId('moon-icon')).toBeInTheDocument();
64+
});
2265
});

0 commit comments

Comments
 (0)