From 479b451916e5e8205ce4bf43146735993aceef10 Mon Sep 17 00:00:00 2001 From: Will Hunt Date: Tue, 23 Sep 2025 13:38:18 +0100 Subject: [PATCH] Add tests to cover joining and starting an Element call (#30843) * Add tests * Add test IDs * Revert to pre-new-widget-refactors state * Update codeowners * Remove one of the test IDs * Update snapshots as DMs don't have room names :) * Remove only * fix a import * fix docstring * update snaps * remove a line * update snaps --- .github/CODEOWNERS | 7 +- playwright/e2e/voip/element-call.spec.ts | 312 ++++++++++++++++++ playwright/pages/client.ts | 21 ++ ...ming-call-dm-video-toast-checked-linux.png | Bin 0 -> 13096 bytes ...ng-call-dm-video-toast-unchecked-linux.png | Bin 0 -> 13389 bytes ...g-call-group-video-toast-checked-linux.png | Bin 0 -> 13457 bytes ...call-group-video-toast-unchecked-linux.png | Bin 0 -> 13749 bytes .../views/rooms/RoomHeader/RoomHeader.tsx | 1 + 8 files changed, 338 insertions(+), 3 deletions(-) create mode 100644 playwright/e2e/voip/element-call.spec.ts create mode 100644 playwright/snapshots/voip/element-call.spec.ts/incoming-call-dm-video-toast-checked-linux.png create mode 100644 playwright/snapshots/voip/element-call.spec.ts/incoming-call-dm-video-toast-unchecked-linux.png create mode 100644 playwright/snapshots/voip/element-call.spec.ts/incoming-call-group-video-toast-checked-linux.png create mode 100644 playwright/snapshots/voip/element-call.spec.ts/incoming-call-group-video-toast-unchecked-linux.png diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c36793bd2c..ae2cf6294d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -18,9 +18,10 @@ /playwright/e2e/settings/encryption-user-tab/ @element-hq/element-crypto-web-reviewers -/src/models/Call.ts @element-hq/element-call-reviewers -/src/call-types.ts @element-hq/element-call-reviewers -/src/components/views/voip @element-hq/element-call-reviewers +/src/models/Call.ts @element-hq/element-call-reviewers +/src/call-types.ts @element-hq/element-call-reviewers +/src/components/views/voip @element-hq/element-call-reviewers +/playwright/e2e/voip/element-call.spec.ts @element-hq/element-call-reviewers # Ignore translations as those will be updated by GHA for Localazy download /src/i18n/strings diff --git a/playwright/e2e/voip/element-call.spec.ts b/playwright/e2e/voip/element-call.spec.ts new file mode 100644 index 0000000000..6514cd1bbb --- /dev/null +++ b/playwright/e2e/voip/element-call.spec.ts @@ -0,0 +1,312 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import type { EventType, Preset } from "matrix-js-sdk/src/matrix"; +import { SettingLevel } from "../../../src/settings/SettingLevel"; +import { test, expect } from "../../element-web-test"; +import type { Credentials } from "../../plugins/homeserver"; +import type { Bot } from "../../pages/bot"; + +function assertCommonCallParameters( + url: URLSearchParams, + hash: URLSearchParams, + user: Credentials, + room: { roomId: string }, +): void { + expect(url.has("widgetId")).toEqual(true); + expect(url.has("parentUrl")).toEqual(true); + + expect(hash.get("perParticipantE2EE")).toEqual("false"); + expect(hash.get("userId")).toEqual(user.userId); + expect(hash.get("deviceId")).toEqual(user.deviceId); + expect(hash.get("roomId")).toEqual(room.roomId); + expect(hash.get("preload")).toEqual("false"); + + expect(hash.get("returnToLobby")).toEqual("false"); +} + +async function sendRTCState(bot: Bot, roomId: string, notification?: "ring" | "notification") { + const resp = await bot.sendStateEvent( + roomId, + "org.matrix.msc3401.call.member", + { + application: "m.call", + call_id: "", + device_id: "OiDFxsZrjz", + expires: 180000000, + foci_preferred: [ + { + livekit_alias: roomId, + livekit_service_url: "https://example.org", + type: "livekit", + }, + ], + focus_active: { + focus_selection: "oldest_membership", + type: "livekit", + }, + scope: "m.room", + }, + `_@${bot.credentials.userId}_OiDFxsZrjz_m.call`, + ); + if (!notification) { + return; + } + await bot.sendEvent(roomId, null, "org.matrix.msc4075.rtc.notification", { + "lifetime": 30000, + "m.mentions": { + room: true, + user_ids: [], + }, + "m.relates_to": { + event_id: resp.event_id, + rel_type: "org.matrix.msc4075.rtc.notification.parent", + }, + "notification_type": notification, + "sender_ts": 1758611895996, + }); +} + +test.describe("Element Call", () => { + test.use({ + config: { + element_call: { + use_exclusively: false, + }, + features: { + feature_group_calls: true, + }, + }, + displayName: "Alice", + botCreateOpts: { + autoAcceptInvites: true, + displayName: "Bob", + }, + }); + + test.beforeEach(async ({ page, user, app }) => { + // Mock a widget page. It doesn't need to actually be Element Call. + await page.route("/widget.html", async (route) => { + await route.fulfill({ + status: 200, + body: "

Hello world

", + }); + }); + await app.settings.setValue( + "Developer.elementCallUrl", + null, + SettingLevel.DEVICE, + new URL("/widget.html#", page.url()).toString(), + ); + }); + + test.describe("Group Chat", () => { + test.use({ + room: async ({ page, app, user, bot }, use) => { + const roomId = await app.client.createRoom({ name: "TestRoom", invite: [bot.credentials.userId] }); + await use({ roomId }); + }, + }); + test("should be able to start a video call", async ({ page, user, room, app }) => { + await app.viewRoomById(room.roomId); + await expect(page.getByText("Bob joined the room")).toBeVisible(); + + await page.getByRole("button", { name: "Video call" }).click(); + await page.getByRole("menuitem", { name: "Element Call" }).click(); + + const frameUrlStr = await page.locator("iframe").getAttribute("src"); + await expect(frameUrlStr).toBeDefined(); + // Ensure we set the correct parameters for ECall. + const url = new URL(frameUrlStr); + const hash = new URLSearchParams(url.hash.slice(1)); + assertCommonCallParameters(url.searchParams, hash, user, room); + expect(hash.get("intent")).toEqual("start_call"); + expect(hash.get("skipLobby")).toEqual("false"); + }); + + test("should be able to skip lobby by holding down shift", async ({ page, user, bot, room, app }) => { + await app.viewRoomById(room.roomId); + await expect(page.getByText("Bob joined the room")).toBeVisible(); + + await page.getByRole("button", { name: "Video call" }).click(); + await page.keyboard.down("Shift"); + await page.getByRole("menuitem", { name: "Element Call" }).click(); + await page.keyboard.up("Shift"); + + const frameUrlStr = await page.locator("iframe").getAttribute("src"); + await expect(frameUrlStr).toBeDefined(); + const url = new URL(frameUrlStr); + const hash = new URLSearchParams(url.hash.slice(1)); + assertCommonCallParameters(url.searchParams, hash, user, room); + expect(hash.get("intent")).toEqual("start_call"); + expect(hash.get("skipLobby")).toEqual("true"); + }); + + test("should be able to join a call in progress", async ({ page, user, bot, room, app }) => { + await app.viewRoomById(room.roomId); + // Allow bob to create a call + await app.client.setPowerLevel(room.roomId, bot.credentials.userId, 50); + await expect(page.getByText("Bob joined the room")).toBeVisible(); + // Fake a start of a call + await sendRTCState(bot, room.roomId); + const button = page.getByTestId("join-call-button"); + await expect(button).toBeInViewport({ timeout: 5000 }); + // And test joining + await button.click(); + const frameUrlStr = await page.locator("iframe").getAttribute("src"); + console.log(frameUrlStr); + await expect(frameUrlStr).toBeDefined(); + const url = new URL(frameUrlStr); + const hash = new URLSearchParams(url.hash.slice(1)); + assertCommonCallParameters(url.searchParams, hash, user, room); + + expect(hash.get("intent")).toEqual("join_existing"); + expect(hash.get("skipLobby")).toEqual("false"); + }); + + [true, false].forEach((skipLobbyToggle) => { + test( + `should be able to join a call via incoming call toast (skipLobby=${skipLobbyToggle})`, + { tag: ["@screenshot"] }, + async ({ page, user, bot, room, app }) => { + await app.viewRoomById(room.roomId); + // Allow bob to create a call + await app.client.setPowerLevel(room.roomId, bot.credentials.userId, 50); + await expect(page.getByText("Bob joined the room")).toBeVisible(); + // Fake a start of a call + await sendRTCState(bot, room.roomId, "notification"); + const toast = page.locator(".mx_Toast_toast"); + const button = toast.getByRole("button", { name: "Join" }); + if (skipLobbyToggle) { + await toast.getByRole("switch").check(); + await expect(toast).toMatchScreenshot("incoming-call-group-video-toast-checked.png"); + } else { + await toast.getByRole("switch").uncheck(); + await expect(toast).toMatchScreenshot("incoming-call-group-video-toast-unchecked.png"); + } + + // And test joining + await button.click(); + const frameUrlStr = await page.locator("iframe").getAttribute("src"); + console.log(frameUrlStr); + await expect(frameUrlStr).toBeDefined(); + const url = new URL(frameUrlStr); + const hash = new URLSearchParams(url.hash.slice(1)); + assertCommonCallParameters(url.searchParams, hash, user, room); + + expect(hash.get("intent")).toEqual("join_existing"); + expect(hash.get("skipLobby")).toEqual(skipLobbyToggle.toString()); + }, + ); + }); + }); + + test.describe("DMs", () => { + test.use({ + room: async ({ page, app, user, bot }, use) => { + const roomId = await app.client.createRoom({ + preset: "trusted_private_chat" as Preset.TrustedPrivateChat, + invite: [bot.credentials.userId], + }); + await app.client.setAccountData("m.direct" as EventType.Direct, { + [bot.credentials.userId]: [roomId], + }); + await use({ roomId }); + }, + }); + + test("should be able to start a video call", async ({ page, user, room, app }) => { + await app.viewRoomById(room.roomId); + await expect(page.getByText("Bob joined the room")).toBeVisible(); + + await page.getByRole("button", { name: "Video call" }).click(); + await page.getByRole("menuitem", { name: "Element Call" }).click(); + const frameUrlStr = await page.locator("iframe").getAttribute("src"); + + await expect(frameUrlStr).toBeDefined(); + const url = new URL(frameUrlStr); + const hash = new URLSearchParams(url.hash.slice(1)); + assertCommonCallParameters(url.searchParams, hash, user, room); + expect(hash.get("intent")).toEqual("start_call_dm"); + expect(hash.get("skipLobby")).toEqual("false"); + }); + + test("should be able to skip lobby by holding down shift", async ({ page, user, room, app }) => { + await app.viewRoomById(room.roomId); + await expect(page.getByText("Bob joined the room")).toBeVisible(); + + await page.getByRole("button", { name: "Video call" }).click(); + await page.keyboard.down("Shift"); + await page.getByRole("menuitem", { name: "Element Call" }).click(); + await page.keyboard.up("Shift"); + const frameUrlStr = await page.locator("iframe").getAttribute("src"); + + await expect(frameUrlStr).toBeDefined(); + const url = new URL(frameUrlStr); + const hash = new URLSearchParams(url.hash.slice(1)); + assertCommonCallParameters(url.searchParams, hash, user, room); + expect(hash.get("intent")).toEqual("start_call_dm"); + expect(hash.get("skipLobby")).toEqual("true"); + }); + + test("should be able to join a call in progress", async ({ page, user, bot, room, app }) => { + await app.viewRoomById(room.roomId); + // Allow bob to create a call + await expect(page.getByText("Bob joined the room")).toBeVisible(); + // Fake a start of a call + await sendRTCState(bot, room.roomId); + const button = page.getByTestId("join-call-button"); + await expect(button).toBeInViewport({ timeout: 5000 }); + // And test joining + await button.click(); + const frameUrlStr = await page.locator("iframe").getAttribute("src"); + console.log(frameUrlStr); + await expect(frameUrlStr).toBeDefined(); + const url = new URL(frameUrlStr); + const hash = new URLSearchParams(url.hash.slice(1)); + assertCommonCallParameters(url.searchParams, hash, user, room); + + expect(hash.get("intent")).toEqual("join_existing_dm"); + expect(hash.get("skipLobby")).toEqual("false"); + }); + + [true, false].forEach((skipLobbyToggle) => { + test( + `should be able to join a call via incoming call toast (skipLobby=${skipLobbyToggle})`, + { tag: ["@screenshot"] }, + async ({ page, user, bot, room, app }) => { + await app.viewRoomById(room.roomId); + // Allow bob to create a call + await expect(page.getByText("Bob joined the room")).toBeVisible(); + // Fake a start of a call + await sendRTCState(bot, room.roomId, "ring"); + const toast = page.locator(".mx_Toast_toast"); + const button = toast.getByRole("button", { name: "Join" }); + if (skipLobbyToggle) { + await toast.getByRole("switch").check(); + await expect(toast).toMatchScreenshot("incoming-call-dm-video-toast-checked.png"); + } else { + await toast.getByRole("switch").uncheck(); + await expect(toast).toMatchScreenshot("incoming-call-dm-video-toast-unchecked.png"); + } + + // And test joining + await button.click(); + const frameUrlStr = await page.locator("iframe").getAttribute("src"); + console.log(frameUrlStr); + await expect(frameUrlStr).toBeDefined(); + const url = new URL(frameUrlStr); + const hash = new URLSearchParams(url.hash.slice(1)); + assertCommonCallParameters(url.searchParams, hash, user, room); + + expect(hash.get("intent")).toEqual("join_existing_dm"); + expect(hash.get("skipLobby")).toEqual(skipLobbyToggle.toString()); + }, + ); + }); + }); +}); diff --git a/playwright/pages/client.ts b/playwright/pages/client.ts index 8296e9111e..86cb581397 100644 --- a/playwright/pages/client.ts +++ b/playwright/pages/client.ts @@ -469,6 +469,27 @@ export class Client { ); } + /** + * Set a power level to one or multiple users. + * Will apply changes atop of current power level event. + * @param roomId - the room to update power levels in + * @param userId - the ID of the user or users to update power levels of + * @param powerLevel - the numeric power level to update given users to + */ + public async setPowerLevel( + roomId: string, + userId: string | string[], + powerLevel: number, + ): Promise { + const client = await this.prepareClient(); + return client.evaluate( + async (client, { roomId, userId, powerLevel }) => { + return client.setPowerLevel(roomId, userId, powerLevel); + }, + { roomId, userId, powerLevel }, + ); + } + /** * Leaves the given room. * @param roomId ID of the room to leave diff --git a/playwright/snapshots/voip/element-call.spec.ts/incoming-call-dm-video-toast-checked-linux.png b/playwright/snapshots/voip/element-call.spec.ts/incoming-call-dm-video-toast-checked-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..f309c37f3ae93c5647035cc302d29e1df3aed11e GIT binary patch literal 13096 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 bQ4!#%`b$DO?{jqCdf;Rw6(y>~e)#`?SoKJ_ literal 0 HcmV?d00001 diff --git a/src/components/views/rooms/RoomHeader/RoomHeader.tsx b/src/components/views/rooms/RoomHeader/RoomHeader.tsx index 281df80a29..7e88a31eac 100644 --- a/src/components/views/rooms/RoomHeader/RoomHeader.tsx +++ b/src/components/views/rooms/RoomHeader/RoomHeader.tsx @@ -129,6 +129,7 @@ export default function RoomHeader({ disabled={!!videoCallDisabledReason} color="primary" aria-label={videoCallDisabledReason ?? _t("action|join")} + data-testId="join-call-button" > {_t("action|join")}