Merge pull request #3690 from element-hq/valere/playwright/improve_sticky_test
playwright: intercept send request to ensure sticky events are sent
This commit is contained in:
@@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|||||||
Please see LICENSE in the repository root for full details.
|
Please see LICENSE in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { test } from "@playwright/test";
|
import { expect, type Page, test, type Request } from "@playwright/test";
|
||||||
|
|
||||||
import { SpaHelpers } from "./spa-helpers";
|
import { SpaHelpers } from "./spa-helpers";
|
||||||
|
|
||||||
@@ -21,7 +21,19 @@ test("One to One call using matrix rtc 2.0 aka sticky events", async ({
|
|||||||
|
|
||||||
await page.goto("/");
|
await page.goto("/");
|
||||||
|
|
||||||
await SpaHelpers.createCall(page, "John Doe", "HelloCall", true, "2_0");
|
let androlHasSentStickyEvent = false;
|
||||||
|
|
||||||
|
await interceptEventSend(
|
||||||
|
page,
|
||||||
|
// This room is not encrypted, so the event is sent in clear
|
||||||
|
"org.matrix.msc4143.rtc.member",
|
||||||
|
(req) => {
|
||||||
|
androlHasSentStickyEvent =
|
||||||
|
androlHasSentStickyEvent || isStickySend(req.url());
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
await SpaHelpers.createCall(page, "Androl", "HelloCall", true, "2_0");
|
||||||
|
|
||||||
const inviteLink = await SpaHelpers.getCallInviteLink(page);
|
const inviteLink = await SpaHelpers.getCallInviteLink(page);
|
||||||
|
|
||||||
@@ -33,8 +45,49 @@ test("One to One call using matrix rtc 2.0 aka sticky events", async ({
|
|||||||
|
|
||||||
await guestPage.goto("/");
|
await guestPage.goto("/");
|
||||||
|
|
||||||
await SpaHelpers.joinCallFromInviteLink(guestPage, inviteLink);
|
let pevaraHasSentStickyEvent = false;
|
||||||
|
|
||||||
|
await interceptEventSend(
|
||||||
|
guestPage,
|
||||||
|
// This room is not encrypted, so the event is sent in clear
|
||||||
|
"org.matrix.msc4143.rtc.member",
|
||||||
|
(req) => {
|
||||||
|
pevaraHasSentStickyEvent =
|
||||||
|
pevaraHasSentStickyEvent || isStickySend(req.url());
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
await SpaHelpers.joinCallFromInviteLink(
|
||||||
|
guestPage,
|
||||||
|
inviteLink,
|
||||||
|
"Pevara",
|
||||||
|
"2_0",
|
||||||
|
);
|
||||||
|
|
||||||
await SpaHelpers.expectVideoTilesCount(page, 2);
|
await SpaHelpers.expectVideoTilesCount(page, 2);
|
||||||
await SpaHelpers.expectVideoTilesCount(guestPage, 2);
|
await SpaHelpers.expectVideoTilesCount(guestPage, 2);
|
||||||
|
|
||||||
|
// Assert both sides have sent sticky membership events
|
||||||
|
expect(androlHasSentStickyEvent).toEqual(true);
|
||||||
|
expect(pevaraHasSentStickyEvent).toEqual(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function isStickySend(url: string): boolean {
|
||||||
|
return !!new URL(url).searchParams.get(
|
||||||
|
"org.matrix.msc4354.sticky_duration_ms",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function interceptEventSend(
|
||||||
|
page: Page,
|
||||||
|
eventType: string,
|
||||||
|
callback: (request: Request) => void,
|
||||||
|
): Promise<void> {
|
||||||
|
await page.route(
|
||||||
|
`**/_matrix/client/v3/rooms/**/send/${eventType}/**`,
|
||||||
|
async (route, req) => {
|
||||||
|
callback(req);
|
||||||
|
return route.continue();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user