@@ -17,9 +17,12 @@ test.describe('Announcement Banner', () => {
1717
1818 await page . goto ( '/assert.html' ) ;
1919
20- const banner = page . getByRole ( 'region' , { name : 'Announcements ' } ) ;
20+ const banner = page . getByRole ( 'region' , { name : 'Announcement ' } ) ;
2121 await expect ( banner ) . toBeVisible ( ) ;
2222 await expect ( banner ) . toContainText ( 'Important announcement for all users' ) ;
23+ await expect (
24+ banner . getByRole ( 'button' , { name : 'Close banner' } )
25+ ) . toBeVisible ( ) ;
2326 } ) ;
2427
2528 test ( 'renders a banner with a link' , async ( { page } ) => {
@@ -39,7 +42,7 @@ test.describe('Announcement Banner', () => {
3942
4043 await page . goto ( '/assert.html' ) ;
4144
42- const banner = page . getByRole ( 'region' , { name : 'Announcements ' } ) ;
45+ const banner = page . getByRole ( 'region' , { name : 'Announcement ' } ) ;
4346 await expect ( banner ) . toBeVisible ( ) ;
4447
4548 const link = banner . getByRole ( 'link' , { name : 'Read the release notes' } ) ;
@@ -60,7 +63,37 @@ test.describe('Announcement Banner', () => {
6063 await page . waitForLoadState ( 'networkidle' ) ;
6164
6265 await expect (
63- page . getByRole ( 'region' , { name : 'Announcements ' } )
66+ page . getByRole ( 'region' , { name : 'Announcement ' } )
6467 ) . not . toBeAttached ( ) ;
6568 } ) ;
69+
70+ test ( 'persists dismissal until the banner text changes' , async ( { page } ) => {
71+ let text = 'Dismiss this announcement' ;
72+
73+ await page . route ( REMOTE_CONFIG_URL , route =>
74+ route . fulfill ( {
75+ contentType : 'application/json' ,
76+ body : JSON . stringify ( {
77+ websiteBanners : { index : { text } } ,
78+ } ) ,
79+ } )
80+ ) ;
81+
82+ await page . goto ( '/assert.html' ) ;
83+
84+ const banner = page . getByRole ( 'region' , { name : 'Announcement' } ) ;
85+ await banner . getByRole ( 'button' , { name : 'Close banner' } ) . click ( ) ;
86+ await expect ( banner ) . not . toBeAttached ( ) ;
87+ await expect
88+ . poll ( ( ) => page . evaluate ( ( ) => localStorage . getItem ( 'banner-dismissal' ) ) )
89+ . toBe ( text ) ;
90+
91+ await page . reload ( ) ;
92+ await page . waitForLoadState ( 'networkidle' ) ;
93+ await expect ( banner ) . not . toBeAttached ( ) ;
94+
95+ text = 'A new announcement' ;
96+ await page . reload ( ) ;
97+ await expect ( banner ) . toContainText ( text ) ;
98+ } ) ;
6699} ) ;
0 commit comments