playwright: Test that declining a call in DM works as expected
This commit is contained in:
25
playwright/widget/test-helpers.ts
Normal file
25
playwright/widget/test-helpers.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2026 Element Creations Ltd.
|
||||||
|
|
||||||
|
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||||
|
Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { expect, type Page } from "@playwright/test";
|
||||||
|
|
||||||
|
export class TestHelpers {
|
||||||
|
public static async startCallInCurrentRoom(
|
||||||
|
page: Page,
|
||||||
|
voice: boolean = false,
|
||||||
|
): Promise<void> {
|
||||||
|
const buttonName = voice ? "Voice call" : "Video call";
|
||||||
|
await expect(page.getByRole("button", { name: buttonName })).toBeVisible();
|
||||||
|
await page.getByRole("button", { name: buttonName }).click();
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
page.getByRole("menuitem", { name: "Element Call" }),
|
||||||
|
).toBeVisible();
|
||||||
|
|
||||||
|
await page.getByRole("menuitem", { name: "Element Call" }).click();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ Please see LICENSE in the repository root for full details.
|
|||||||
import { expect, test } from "@playwright/test";
|
import { expect, test } from "@playwright/test";
|
||||||
|
|
||||||
import { widgetTest } from "../fixtures/widget-user.ts";
|
import { widgetTest } from "../fixtures/widget-user.ts";
|
||||||
|
import { TestHelpers } from "./test-helpers.ts";
|
||||||
|
|
||||||
widgetTest.use({ callType: "dm" });
|
widgetTest.use({ callType: "dm" });
|
||||||
|
|
||||||
@@ -23,16 +24,7 @@ widgetTest(
|
|||||||
|
|
||||||
const { brooks, whistler } = asWidget;
|
const { brooks, whistler } = asWidget;
|
||||||
|
|
||||||
await expect(
|
await TestHelpers.startCallInCurrentRoom(brooks.page, true);
|
||||||
brooks.page.getByRole("button", { name: "Voice call" }),
|
|
||||||
).toBeVisible();
|
|
||||||
await brooks.page.getByRole("button", { name: "Voice call" }).click();
|
|
||||||
|
|
||||||
await expect(
|
|
||||||
brooks.page.getByRole("menuitem", { name: "Element Call" }),
|
|
||||||
).toBeVisible();
|
|
||||||
|
|
||||||
await brooks.page.getByRole("menuitem", { name: "Element Call" }).click();
|
|
||||||
|
|
||||||
await expect(
|
await expect(
|
||||||
brooks.page.locator('iframe[title="Element Call"]'),
|
brooks.page.locator('iframe[title="Element Call"]'),
|
||||||
@@ -123,16 +115,7 @@ widgetTest(
|
|||||||
|
|
||||||
const { brooks, whistler } = asWidget;
|
const { brooks, whistler } = asWidget;
|
||||||
|
|
||||||
await expect(
|
await TestHelpers.startCallInCurrentRoom(brooks.page, false);
|
||||||
brooks.page.getByRole("button", { name: "Video call" }),
|
|
||||||
).toBeVisible();
|
|
||||||
await brooks.page.getByRole("button", { name: "Video call" }).click();
|
|
||||||
|
|
||||||
await expect(
|
|
||||||
brooks.page.getByRole("menuitem", { name: "Element Call" }),
|
|
||||||
).toBeVisible();
|
|
||||||
|
|
||||||
await brooks.page.getByRole("menuitem", { name: "Element Call" }).click();
|
|
||||||
|
|
||||||
await expect(
|
await expect(
|
||||||
brooks.page.locator('iframe[title="Element Call"]'),
|
brooks.page.locator('iframe[title="Element Call"]'),
|
||||||
@@ -210,3 +193,48 @@ widgetTest(
|
|||||||
await expect(brooks.page.locator(".mx_BasicMessageComposer")).toBeVisible();
|
await expect(brooks.page.locator(".mx_BasicMessageComposer")).toBeVisible();
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
widgetTest(
|
||||||
|
"Decline a new video call in DM as widget",
|
||||||
|
async ({ asWidget, browserName }) => {
|
||||||
|
test.skip(
|
||||||
|
browserName === "firefox",
|
||||||
|
"The is test is not working on firefox CI environment. No mic/audio device inputs so cam/mic are disabled",
|
||||||
|
);
|
||||||
|
|
||||||
|
test.slow(); // Triples the timeout
|
||||||
|
|
||||||
|
const { brooks, whistler } = asWidget;
|
||||||
|
|
||||||
|
await TestHelpers.startCallInCurrentRoom(brooks.page, false);
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
brooks.page.locator('iframe[title="Element Call"]'),
|
||||||
|
).toBeVisible();
|
||||||
|
|
||||||
|
const brooksFrame = brooks.page
|
||||||
|
.locator('iframe[title="Element Call"]')
|
||||||
|
.contentFrame();
|
||||||
|
|
||||||
|
// We should show a ringing overlay, let's check for that
|
||||||
|
await expect(
|
||||||
|
brooksFrame.getByText(`Waiting for ${whistler.displayName} to join…`),
|
||||||
|
).toBeVisible();
|
||||||
|
|
||||||
|
await expect(whistler.page.getByText("Incoming video call")).toBeVisible();
|
||||||
|
await whistler.page.getByRole("button", { name: "Decline" }).click();
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
whistler.page.locator('iframe[title="Element Call"]'),
|
||||||
|
).not.toBeVisible();
|
||||||
|
|
||||||
|
// The widget should be closed and the timeline should be back on screen
|
||||||
|
await expect(
|
||||||
|
brooks.page.locator('iframe[title="Element Call"]'),
|
||||||
|
).not.toBeVisible();
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
brooks.page.getByText("This is the beginning of your"),
|
||||||
|
).toBeVisible();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user