@@ -15,8 +15,6 @@ import DropDown from '../components/Actions/DropDown';
1515import RecordButton from '../components/Actions/RecordButton' ;
1616import ThemeToggle from '../components/Actions/ThemeToggle' ;
1717
18- import { ThemeProvider } from '../ThemeProvider' ;
19-
2018// Mock ThemeToggle for RecordButton tests
2119jest . mock ( '../components/Actions/ThemeToggle' , ( ) => {
2220 return function MockThemeToggle ( ) {
@@ -282,48 +280,24 @@ describe('ThemeToggle Component', () => {
282280 expect ( screen . getByTestId ( 'mock-theme-toggle' ) ) . toHaveTextContent ( 'Theme Toggle' ) ;
283281 } ) ;
284282
285- beforeAll ( ( ) => {
286- // Mock window.matchMedia to control initial preference
287- Object . defineProperty ( window , 'matchMedia' , {
288- writable : true ,
289- value : jest . fn ( ) . mockImplementation ( ( query ) => ( {
290- matches : false , // Pretend system preference is 'light' by default
291- media : query ,
292- onchange : null ,
293- addListener : jest . fn ( ) ,
294- removeListener : jest . fn ( ) ,
295- addEventListener : jest . fn ( ) ,
296- removeEventListener : jest . fn ( ) ,
297- dispatchEvent : jest . fn ( ) ,
298- } ) ) ,
299- } ) ;
300- } ) ;
301-
302- test ( 'ThemeToggle switches between light and dark themes correctly' , ( ) => {
303- render (
304- < ThemeProvider >
305- < ThemeToggle />
306- </ ThemeProvider > ,
307- ) ;
308-
309- const toggleButton = screen . getByRole ( 'button' ) ;
310-
311- // Initial state: 'isDark' is false, so no `dark` class on documentElement
312- expect ( document . documentElement ) . not . toHaveClass ( 'dark' ) ;
313- expect ( toggleButton ) . toHaveAttribute ( 'aria-label' , 'Switch to dark mode' ) ;
314-
315- // Click to toggle to dark mode
316- fireEvent . click ( toggleButton ) ;
317-
318- // Now 'isDark' is true, so `dark` class should be on documentElement
319- expect ( document . documentElement ) . toHaveClass ( 'dark' ) ;
320- expect ( toggleButton ) . toHaveAttribute ( 'aria-label' , 'Switch to light mode' ) ;
321-
322- // Click again to toggle back to light mode
323- fireEvent . click ( toggleButton ) ;
283+ test ( 'toggles between light and dark mode classes' , ( ) => {
284+ // First render in light mode
285+ ( useTheme as jest . Mock ) . mockImplementation ( ( ) => ( {
286+ isDark : false ,
287+ toggleTheme : mockToggleTheme ,
288+ } ) ) ;
289+ const { rerender } = render ( < ThemeToggle /> ) ;
290+ const toggle = screen . getByTestId ( 'mock-theme-toggle' ) ;
291+ expect ( toggle ) . toHaveClass ( 'theme-toggle' ) ;
292+ expect ( toggle ) . not . toHaveClass ( 'dark' ) ;
324293
325- // Now 'isDark' is back to false
326- expect ( document . documentElement ) . not . toHaveClass ( 'dark' ) ;
327- expect ( toggleButton ) . toHaveAttribute ( 'aria-label' , 'Switch to dark mode' ) ;
294+ // Rerender in dark mode
295+ ( useTheme as jest . Mock ) . mockImplementation ( ( ) => ( {
296+ isDark : true ,
297+ toggleTheme : mockToggleTheme ,
298+ } ) ) ;
299+ rerender ( < ThemeToggle /> ) ;
300+ expect ( toggle ) . toHaveClass ( 'theme-toggle' ) ;
301+ expect ( toggle ) . toHaveClass ( 'dark' ) ;
328302 } ) ;
329303} ) ;
0 commit comments