From 0d617dbbeb23b788900b1bc2944ecb8166879ff4 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 12 Dec 2023 10:00:47 +0000 Subject: [PATCH] Migrate presence.spec.ts from Cypress to Playwright (#12022) * Fix bot MatrixClient being set up multiple times Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Migrate presence.spec.ts from Cypress to Playwright Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Apply suggestions from code review Co-authored-by: R Midhun Suresh * Update presence.spec.ts --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> Co-authored-by: R Midhun Suresh --- cypress/e2e/presence/presence.spec.ts | 64 ----------------------- playwright/e2e/presence/presence.spec.ts | 66 ++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 64 deletions(-) delete mode 100644 cypress/e2e/presence/presence.spec.ts create mode 100644 playwright/e2e/presence/presence.spec.ts diff --git a/cypress/e2e/presence/presence.spec.ts b/cypress/e2e/presence/presence.spec.ts deleted file mode 100644 index 12a3228b4c..0000000000 --- a/cypress/e2e/presence/presence.spec.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* -Copyright 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -/// -import { HomeserverInstance } from "../../plugins/utils/homeserver"; - -describe("Presence tests", () => { - let homeserver: HomeserverInstance; - - beforeEach(() => { - cy.startHomeserver("default").then((data) => { - homeserver = data; - }); - }); - - afterEach(() => { - cy.stopHomeserver(homeserver); - }); - - it("renders unreachable presence state correctly", () => { - cy.initTestUser(homeserver, "Janet"); - cy.getBot(homeserver, { displayName: "Bob" }).then((bob) => { - cy.intercept("GET", "**/sync*", (req) => { - req.continue((res) => { - res.body.presence = { - events: [ - { - type: "m.presence", - sender: bob.getUserId(), - content: { - presence: "io.element.unreachable", - currently_active: false, - }, - }, - ], - }; - }); - }); - cy.createRoom({ name: "My Room", invite: [bob.getUserId()] }).then((roomId) => { - cy.viewRoomById(roomId); - }); - cy.findByRole("button", { name: "Room info" }).click(); - cy.get(".mx_RightPanel").within(() => { - cy.contains("People").click(); - }); - cy.get(".mx_EntityTile_unreachable") - .should("contain.text", "Bob") - .should("contain.text", "User's server unreachable"); - }); - }); -}); diff --git a/playwright/e2e/presence/presence.spec.ts b/playwright/e2e/presence/presence.spec.ts new file mode 100644 index 0000000000..62c14b7ed5 --- /dev/null +++ b/playwright/e2e/presence/presence.spec.ts @@ -0,0 +1,66 @@ +/* +Copyright 2023 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { test, expect } from "../../element-web-test"; + +test.describe("Presence tests", () => { + test.use({ + displayName: "Janet", + botCreateOpts: { displayName: "Bob" }, + }); + + test.describe("bob unreachable", () => { + test("renders unreachable presence state correctly", async ({ page, app, user, bot: bob }) => { + await app.client.createRoom({ name: "My Room", invite: [bob.credentials.userId] }); + await app.viewRoomByName("My Room"); + + await bob.evaluate(async (client) => { + client.stopClient(); + }); + + await page.route( + `**/sync*`, + async (route) => { + const response = await route.fetch(); + await route.fulfill({ + json: { + ...(await response.json()), + presence: { + events: [ + { + type: "m.presence", + sender: bob.credentials.userId, + content: { + presence: "io.element.unreachable", + currently_active: false, + }, + }, + ], + }, + }, + }); + }, + { times: 1 }, + ); + await app.client.createRoom({}); // trigger sync + + await page.getByRole("button", { name: "Room info" }).click(); + await page.locator(".mx_RightPanel").getByText("People").click(); + await expect(page.locator(".mx_EntityTile_unreachable")).toContainText("Bob"); + await expect(page.locator(".mx_EntityTile_unreachable")).toContainText("User's server unreachable"); + }); + }); +});