@@ -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