mirror of
https://github.com/vector-im/element-call.git
synced 2026-01-18 02:32:27 +00:00
* Use rtc-focus branch of js-sdk * Update makeTransport to fetch backend transports and validate all transports before response. * Fix test * Add test * Loads more tests * Add tests for openid errors * improve comment * update to develop commit * Add JWT parsing * Use JWT * Cleanup * fixup tests * fixup tests * lint * lint lint * Fix `Reconnecting`
135 lines
4.0 KiB
TypeScript
135 lines
4.0 KiB
TypeScript
/*
|
|
Copyright 2025 New Vector Ltd.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
Please see LICENSE in the repository root for full details.
|
|
*/
|
|
|
|
import { expect, test } from "@playwright/test";
|
|
|
|
import { createJTWToken } from "./fixtures/jwt-token";
|
|
|
|
test("Should show error screen if fails to get JWT token", async ({ page }) => {
|
|
await page.goto("/");
|
|
|
|
await page.getByTestId("home_callName").click();
|
|
await page.getByTestId("home_callName").fill("HelloCall");
|
|
await page.getByTestId("home_displayName").click();
|
|
await page.getByTestId("home_displayName").fill("John Doe");
|
|
await page.getByTestId("home_go").click();
|
|
|
|
await page.route(
|
|
"**/openid/request_token",
|
|
async (route) =>
|
|
await route.fulfill({
|
|
// 418 is a non retryable error, so test will fail immediately
|
|
status: 418,
|
|
}),
|
|
);
|
|
|
|
// Join the call
|
|
await page.getByTestId("lobby_joinCall").click();
|
|
|
|
// Should fail
|
|
await expect(page.getByText("Something went wrong")).toBeVisible();
|
|
await expect(page.getByText("OPEN_ID_ERROR")).toBeVisible();
|
|
});
|
|
|
|
test("Should automatically retry non fatal JWT errors", async ({
|
|
page,
|
|
browserName,
|
|
}) => {
|
|
test.skip(
|
|
browserName === "firefox",
|
|
"The test to check the video visibility is not working in Firefox CI environment. looks like video is disabled?",
|
|
);
|
|
await page.goto("/");
|
|
|
|
await page.getByTestId("home_callName").click();
|
|
await page.getByTestId("home_callName").fill("HelloCall");
|
|
await page.getByTestId("home_displayName").click();
|
|
await page.getByTestId("home_displayName").fill("John Doe");
|
|
await page.getByTestId("home_go").click();
|
|
|
|
let firstCall = true;
|
|
let hasRetriedCallback: (value: PromiseLike<void> | void) => void;
|
|
const hasRetriedPromise = new Promise<void>((resolve) => {
|
|
hasRetriedCallback = resolve;
|
|
});
|
|
await page.route("**/openid/request_token", async (route) => {
|
|
if (firstCall) {
|
|
firstCall = false;
|
|
await route.fulfill({
|
|
status: 429,
|
|
});
|
|
} else {
|
|
await route.continue();
|
|
hasRetriedCallback();
|
|
}
|
|
});
|
|
|
|
// Join the call
|
|
await page.getByTestId("lobby_joinCall").click();
|
|
// Expect that the call has been retried
|
|
await hasRetriedPromise;
|
|
await expect(page.getByTestId("video").first()).toBeVisible();
|
|
});
|
|
|
|
test("Should show error screen if call creation is restricted", async ({
|
|
page,
|
|
browserName,
|
|
}) => {
|
|
test.skip(
|
|
browserName === "firefox",
|
|
"The is test is not working on firefox CI environment.",
|
|
);
|
|
await page.goto("/");
|
|
|
|
// We need the socket connection to fail, but this cannot be done by using the websocket route.
|
|
// Instead, we will trick the app by returning a bad URL for the SFU that will not be reachable an error out.
|
|
await page.route(
|
|
"**/matrix-rtc.m.localhost/livekit/jwt/sfu/get",
|
|
async (route) =>
|
|
await route.fulfill({
|
|
status: 200,
|
|
contentType: "application/json",
|
|
body: JSON.stringify({
|
|
url: "wss://badurltotricktest/livekit/sfu",
|
|
jwt: createJTWToken("@fake:user", "!fake:room"),
|
|
}),
|
|
}),
|
|
);
|
|
|
|
// Then if the socket connection fails, livekit will try to validate the token!
|
|
// Livekit will not auto_create anymore and will return a 404 error.
|
|
await page.route(
|
|
"**/badurltotricktest/livekit/sfu/rtc/validate?**",
|
|
async (route) =>
|
|
await route.fulfill({
|
|
status: 404,
|
|
contentType: "text/plain",
|
|
body: "requested room does not exist",
|
|
}),
|
|
);
|
|
|
|
await page.pause();
|
|
|
|
await page.getByTestId("home_callName").click();
|
|
await page.getByTestId("home_callName").fill("HelloCall");
|
|
await page.getByTestId("home_displayName").click();
|
|
await page.getByTestId("home_displayName").fill("John Doe");
|
|
await page.getByTestId("home_go").click();
|
|
|
|
// Join the call
|
|
await page.getByTestId("lobby_joinCall").click();
|
|
|
|
await page.pause();
|
|
// Should fail
|
|
await expect(page.getByText("Failed to create call")).toBeVisible();
|
|
await expect(
|
|
page.getByText(
|
|
/Call creation might be restricted to authorized users only/,
|
|
),
|
|
).toBeVisible();
|
|
});
|