diff --git a/src/livekit/useECConnectionState.test.tsx b/src/livekit/useECConnectionState.test.tsx
index 6ee63c3b..0b13e6ce 100644
--- a/src/livekit/useECConnectionState.test.tsx
+++ b/src/livekit/useECConnectionState.test.tsx
@@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details.
*/
import { type FC, useCallback, useState } from "react";
-import { test } from "vitest";
+import { test, vi } from "vitest";
import {
ConnectionError,
ConnectionErrorReason,
@@ -60,7 +60,7 @@ test.each<[string, ConnectionError]>([
const user = userEvent.setup();
render(
-
+
,
diff --git a/src/room/GroupCallErrorBoundary.test.tsx b/src/room/GroupCallErrorBoundary.test.tsx
index 893389a7..145b606e 100644
--- a/src/room/GroupCallErrorBoundary.test.tsx
+++ b/src/room/GroupCallErrorBoundary.test.tsx
@@ -17,7 +17,10 @@ import {
import { BrowserRouter } from "react-router-dom";
import userEvent from "@testing-library/user-event";
-import { GroupCallErrorBoundary } from "./GroupCallErrorBoundary.tsx";
+import {
+ type CallErrorRecoveryAction,
+ GroupCallErrorBoundary,
+} from "./GroupCallErrorBoundary.tsx";
import {
ConnectionLostError,
E2EENotSupportedError,
@@ -60,7 +63,10 @@ test.each([
const onErrorMock = vi.fn();
const { asFragment } = render(
-
+
,
@@ -85,14 +91,17 @@ test("should render the error page with link back to home", async () => {
const onErrorMock = vi.fn();
const { asFragment } = render(
-
+
,
);
await screen.findByText("Call is not supported");
- expect(screen.getByText(/Domain: example.com/i)).toBeInTheDocument();
+ expect(screen.getByText(/Domain: example\.com/i)).toBeInTheDocument();
expect(
screen.getByText(/Error Code: MISSING_MATRIX_RTC_FOCUS/i),
).toBeInTheDocument();
@@ -105,39 +114,7 @@ test("should render the error page with link back to home", async () => {
expect(asFragment()).toMatchSnapshot();
});
-test("should have a reconnect button for ConnectionLostError", async () => {
- const user = userEvent.setup();
-
- const reconnectCallback = vi.fn();
-
- const TestComponent = (): ReactNode => {
- throw new ConnectionLostError();
- };
-
- const { asFragment } = render(
-
-
-
-
- ,
- );
-
- await screen.findByText("Connection lost");
- await screen.findByRole("button", { name: "Reconnect" });
- await screen.findByRole("button", { name: "Return to home screen" });
-
- expect(asFragment()).toMatchSnapshot();
-
- await user.click(screen.getByRole("button", { name: "Reconnect" }));
-
- expect(reconnectCallback).toHaveBeenCalledOnce();
- expect(reconnectCallback).toHaveBeenCalledWith("reconnect");
-});
-
-test("Action handling should reset error state", async () => {
+test("ConnectionLostError: Action handling should reset error state", async () => {
const user = userEvent.setup();
const TestComponent: FC<{ fail: boolean }> = ({ fail }): ReactNode => {
@@ -147,11 +124,17 @@ test("Action handling should reset error state", async () => {
return
HELLO
;
};
+ const reconnectCallbackSpy = vi.fn();
+
const WrapComponent = (): ReactNode => {
const [failState, setFailState] = useState(true);
- const reconnectCallback = useCallback(() => {
- setFailState(false);
- }, [setFailState]);
+ const reconnectCallback = useCallback(
+ (action: CallErrorRecoveryAction) => {
+ reconnectCallbackSpy(action);
+ setFailState(false);
+ },
+ [setFailState],
+ );
return (
@@ -162,15 +145,22 @@ test("Action handling should reset error state", async () => {
);
};
- render( );
+ const { asFragment } = render( );
// Should fail first
await screen.findByText("Connection lost");
+ await screen.findByRole("button", { name: "Reconnect" });
+ await screen.findByRole("button", { name: "Return to home screen" });
+
+ expect(asFragment()).toMatchSnapshot();
await user.click(screen.getByRole("button", { name: "Reconnect" }));
// reconnect should have reset the error, thus rendering should be ok
await screen.findByText("HELLO");
+
+ expect(reconnectCallbackSpy).toHaveBeenCalledOnce();
+ expect(reconnectCallbackSpy).toHaveBeenCalledWith("reconnect");
});
describe("Rageshake button", () => {
@@ -187,7 +177,10 @@ describe("Rageshake button", () => {
render(
-
+
,
diff --git a/src/room/GroupCallErrorBoundary.tsx b/src/room/GroupCallErrorBoundary.tsx
index 67b95733..71a676ed 100644
--- a/src/room/GroupCallErrorBoundary.tsx
+++ b/src/room/GroupCallErrorBoundary.tsx
@@ -38,7 +38,7 @@ export type RecoveryActionHandler = (action: CallErrorRecoveryAction) => void;
interface ErrorPageProps {
error: ElementCallError;
- recoveryActionHandler?: RecoveryActionHandler;
+ recoveryActionHandler: RecoveryActionHandler;
resetError: () => void;
}
@@ -48,7 +48,6 @@ const ErrorPage: FC = ({
}: ErrorPageProps): ReactElement => {
const { t } = useTranslation();
- // let title: string;
let icon: ComponentType>;
switch (error.category) {
case ErrorCategory.CONFIGURATION_ISSUE:
@@ -68,7 +67,7 @@ const ErrorPage: FC = ({
if (error instanceof ConnectionLostError) {
actions.push({
label: t("call_ended_view.reconnect_button"),
- onClick: () => recoveryActionHandler?.("reconnect"),
+ onClick: () => recoveryActionHandler("reconnect"),
});
}
@@ -101,7 +100,7 @@ const ErrorPage: FC = ({
interface BoundaryProps {
children: ReactNode | (() => ReactNode);
- recoveryActionHandler?: RecoveryActionHandler;
+ recoveryActionHandler: RecoveryActionHandler;
onError?: (error: unknown) => void;
}
@@ -122,7 +121,7 @@ export const GroupCallErrorBoundary = ({
resetError={resetError}
recoveryActionHandler={(action: CallErrorRecoveryAction) => {
resetError();
- recoveryActionHandler?.(action);
+ recoveryActionHandler(action);
}}
/>
);
diff --git a/src/room/__snapshots__/GroupCallErrorBoundary.test.tsx.snap b/src/room/__snapshots__/GroupCallErrorBoundary.test.tsx.snap
index f5814114..c261b635 100644
--- a/src/room/__snapshots__/GroupCallErrorBoundary.test.tsx.snap
+++ b/src/room/__snapshots__/GroupCallErrorBoundary.test.tsx.snap
@@ -1,6 +1,6 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
-exports[`should have a reconnect button for ConnectionLostError 1`] = `
+exports[`ConnectionLostError: Action handling should reset error state 1`] = `
`;
-exports[`should render the error page 1`] = `
-
-
-
-
-
-
-
-
- Call is not supported
-
-
- The server is not configured to work with Element Call. Please contact your server admin (Domain: example.com, Error Code: MISSING_MATRIX_RTC_FOCUS).
-
-
- Return to home screen
-
-
-
-
-
-
-`;
-
exports[`should render the error page with link back to home 1`] = `