@@ -13,16 +13,25 @@ const locators = {
1313  navLinksLocator : `[aria-label="${ englishLocale . components . containers . navBar . controls . toggle }  "] + div` , 
1414  // Global UI controls 
1515  languageDropdownName : englishLocale . components . common . languageDropdown . label , 
16-   themeToggleName : englishLocale . components . common . themeToggle . label , 
17- 
16+   themeToggleAriaLabels : { 
17+     light : englishLocale . components . common . themeToggle . light , 
18+     dark : englishLocale . components . common . themeToggle . dark , 
19+   } , 
1820  // Search components (from Orama library) 
1921  searchButtonTag : 'orama-button' , 
2022  searchInputTag : 'orama-input' , 
2123  searchResultsTag : 'orama-search-results' , 
2224} ; 
2325
2426const  getTheme  =  ( page : Page )  => 
25-   page . evaluate ( ( )  =>  document . documentElement . dataset . theme ) ; 
27+   page . evaluate ( 
28+     ( )  =>  document . documentElement . dataset . theme  as  'light'  |  'dark' 
29+   ) ; 
30+ 
31+ const  getCurrentAriaLabel  =  ( theme : string )  => 
32+   theme  ===  'dark' 
33+     ? locators . themeToggleAriaLabels . light 
34+     : locators . themeToggleAriaLabels . dark ; 
2635
2736const  openLanguageMenu  =  async  ( page : Page )  =>  { 
2837  const  button  =  page . getByRole ( 'button' ,  { 
@@ -65,21 +74,27 @@ test.describe('Node.js Website', () => {
6574  test . describe ( 'Theme' ,  ( )  =>  { 
6675    test ( 'should toggle between light/dark themes' ,  async  ( {  page } )  =>  { 
6776      const  themeToggle  =  page . getByRole ( 'button' ,  { 
68-         name : locators . themeToggleName , 
77+         name : / S w i t c h   t o   ( L i g h t | D a r k )   M o d e / i , 
6978      } ) ; 
70-       await  expect ( themeToggle ) . toBeVisible ( ) ; 
7179
7280      const  initialTheme  =  await  getTheme ( page ) ; 
81+       const  initialAriaLabel  =  getCurrentAriaLabel ( initialTheme ) ; 
82+       let  currentAriaLabel  =  await  themeToggle . getAttribute ( 'aria-label' ) ; 
83+       expect ( currentAriaLabel ) . toBe ( initialAriaLabel ) ; 
84+ 
7385      await  themeToggle . click ( ) ; 
7486
7587      const  newTheme  =  await  getTheme ( page ) ; 
76-       expect ( newTheme ) . not . toEqual ( initialTheme ) ; 
77-       expect ( [ 'light' ,  'dark' ] ) . toContain ( newTheme ) ; 
88+       const  newAriaLabel  =  getCurrentAriaLabel ( newTheme ) ; 
89+       currentAriaLabel  =  await  themeToggle . getAttribute ( 'aria-label' ) ; 
90+ 
91+       expect ( newTheme ) . not . toBe ( initialTheme ) ; 
92+       expect ( currentAriaLabel ) . toBe ( newAriaLabel ) ; 
7893    } ) ; 
7994
8095    test ( 'should persist theme across page navigation' ,  async  ( {  page } )  =>  { 
8196      const  themeToggle  =  page . getByRole ( 'button' ,  { 
82-         name : locators . themeToggleName , 
97+         name : / S w i t c h   t o   ( L i g h t | D a r k )   M o d e / i , 
8398      } ) ; 
8499      await  themeToggle . click ( ) ; 
85100      const  selectedTheme  =  await  getTheme ( page ) ; 
0 commit comments