1- import { render , screen } from '@testing-library/react' ;
1+ import { fireEvent , render , screen } from '@testing-library/react' ;
22import { ModeToggle } from '../ThemeModeToggle' ;
33import { useTheme } from '@/components/utils/ThemeProvider' ;
44
55// Mocking the useTheme hook
66jest . 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+
817describe ( 'ModeToggle' , ( ) => {
918 const setThemeMock = jest . fn ( ) ;
1019
@@ -19,4 +28,38 @@ describe('ModeToggle', () => {
1928 screen . getByRole ( 'button' , { name : / t o g g l e t h e m e / 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 : / t o g g l e t h e m e / 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 : / t o g g l e t h e m e / 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 : / t o g g l e t h e m e / 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