@@ -7,7 +7,13 @@ Please see LICENSE in the repository root for full details.
77
88import { describe , expect , test , vi } from "vitest" ;
99import { render , screen } from "@testing-library/react" ;
10- import { type ReactElement , type ReactNode } from "react" ;
10+ import {
11+ type FC ,
12+ type ReactElement ,
13+ type ReactNode ,
14+ useCallback ,
15+ useState ,
16+ } from "react" ;
1117import { BrowserRouter } from "react-router-dom" ;
1218import userEvent from "@testing-library/user-event" ;
1319
@@ -131,6 +137,42 @@ test("should have a reconnect button for ConnectionLostError", async () => {
131137 expect ( reconnectCallback ) . toHaveBeenCalledWith ( "reconnect" ) ;
132138} ) ;
133139
140+ test ( "Action handling should reset error state" , async ( ) => {
141+ const user = userEvent . setup ( ) ;
142+
143+ const TestComponent : FC < { fail : boolean } > = ( { fail } ) : ReactNode => {
144+ if ( fail ) {
145+ throw new ConnectionLostError ( ) ;
146+ }
147+ return < div > HELLO</ div > ;
148+ } ;
149+
150+ const WrapComponent = ( ) : ReactNode => {
151+ const [ failState , setFailState ] = useState ( true ) ;
152+ const reconnectCallback = useCallback ( ( ) => {
153+ setFailState ( false ) ;
154+ } , [ setFailState ] ) ;
155+
156+ return (
157+ < BrowserRouter >
158+ < GroupCallErrorBoundary recoveryActionHandler = { reconnectCallback } >
159+ < TestComponent fail = { failState } />
160+ </ GroupCallErrorBoundary >
161+ </ BrowserRouter >
162+ ) ;
163+ } ;
164+
165+ render ( < WrapComponent /> ) ;
166+
167+ // Should fail first
168+ await screen . findByText ( "Connection lost" ) ;
169+
170+ await user . click ( screen . getByRole ( "button" , { name : "Reconnect" } ) ) ;
171+
172+ // reconnect should have reset the error, thus rendering should be ok
173+ await screen . findByText ( "HELLO" ) ;
174+ } ) ;
175+
134176describe ( "Rageshake button" , ( ) => {
135177 function setupTest ( testError : ElementCallError ) : void {
136178 mockConfig ( {
0 commit comments