@@ -107,6 +107,76 @@ test('legacy Proceeding through blocked navigation works', async ({ page }) => {
107107 await expect ( page . getByRole ( 'heading' ) ) . toContainText ( 'Editing A' )
108108} )
109109
110+ test ( 'useCanGoBack correctly disables back button' , async ( { page } ) => {
111+ const getBackButtonDisabled = async ( ) => {
112+ const backButton = await page . getByRole ( 'button' , { name : 'Back' } )
113+ const isDisabled = ( await backButton . getAttribute ( 'disabled' ) ) !== null
114+ return isDisabled
115+ }
116+
117+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( true )
118+
119+ await page . getByRole ( 'link' , { name : 'Posts' } ) . click ( )
120+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( false )
121+
122+ await page . getByRole ( 'link' , { name : 'sunt aut facere repe' } ) . click ( )
123+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( false )
124+
125+ await page . reload ( )
126+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( false )
127+
128+ await page . goBack ( )
129+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( false )
130+
131+ await page . goForward ( )
132+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( false )
133+
134+ await page . goBack ( )
135+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( false )
136+
137+ await page . goBack ( )
138+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( true )
139+
140+ await page . reload ( )
141+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( true )
142+ } )
143+
144+ test ( 'useCanGoBack correctly disables back button, using router.history and window.history' , async ( {
145+ page,
146+ } ) => {
147+ const getBackButtonDisabled = async ( ) => {
148+ const backButton = await page . getByRole ( 'button' , { name : 'Back' } )
149+ const isDisabled = ( await backButton . getAttribute ( 'disabled' ) ) !== null
150+ return isDisabled
151+ }
152+
153+ await page . getByRole ( 'link' , { name : 'Posts' } ) . click ( )
154+ await page . getByRole ( 'link' , { name : 'sunt aut facere repe' } ) . click ( )
155+ await page . getByRole ( 'button' , { name : 'Back' } ) . click ( )
156+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( false )
157+
158+ await page . reload ( )
159+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( false )
160+
161+ await page . getByRole ( 'button' , { name : 'Back' } ) . click ( )
162+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( true )
163+
164+ await page . evaluate ( 'window.history.forward()' )
165+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( false )
166+
167+ await page . evaluate ( 'window.history.forward()' )
168+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( false )
169+
170+ await page . evaluate ( 'window.history.back()' )
171+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( false )
172+
173+ await page . evaluate ( 'window.history.back()' )
174+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( true )
175+
176+ await page . reload ( )
177+ await expect ( await getBackButtonDisabled ( ) ) . toBe ( true )
178+ } )
179+
110180const testCases = [
111181 {
112182 description : 'Navigating to a route inside a route group' ,
0 commit comments