From fbd64d37f28d356f061796957117ee7eb62cb7b3 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 27 Nov 2023 16:24:02 +0000 Subject: [PATCH] Migrate create-room.spec.ts from Cypress to Playwright (#11941) * Install playwright Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add foundations for writing tests under Playwright Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * .gitignore juggling Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add tsconfig and fix eslint rules Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add docker & synapse plugins Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add login.spec.ts Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Wire up fixture which sets up ElementAppPage & bakes config.json Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Remove launch test, it has served its purpose Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Remove test which has been ported to Playwright Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix test not cleaning up after itself Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Move registerUser to the Homeserver interface Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Remove unused fixture param Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Remove redundant launch test Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add newline * Run both legacy & rust crypto tests in Playwright Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Remove redundant comment Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Create plugin for mail-hog * Move injectAxe into element-web-test.ts Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Switch out axe-playwright for @axe-core/playwright Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Migrate email.spec.ts from Cypress to Playwright Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * prettier Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Use Playwright snapshot utility over Percy Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Remove commented our Percy badge as we're unlikely to want to go back Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Migrate user-onboarding-old.spec.ts Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Migrate user-onboarding-new.spec.ts Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add screenshots Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix bad merge Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix test and re-enable Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Run linters on playwright Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Make typescript happier Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix types Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update typescript Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Migrate create-room.spec.ts from Cypress to Playwright Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * prettier Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> Co-authored-by: R Midhun Suresh --- cypress/e2e/create-room/create-room.spec.ts | 60 ------------------- .../e2e/create-room/create-room.spec.ts | 43 +++++++++++++ playwright/pages/ElementAppPage.ts | 9 +++ 3 files changed, 52 insertions(+), 60 deletions(-) delete mode 100644 cypress/e2e/create-room/create-room.spec.ts create mode 100644 playwright/e2e/create-room/create-room.spec.ts diff --git a/cypress/e2e/create-room/create-room.spec.ts b/cypress/e2e/create-room/create-room.spec.ts deleted file mode 100644 index a5a81b03f5..0000000000 --- a/cypress/e2e/create-room/create-room.spec.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* -Copyright 2022-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("Create Room", () => { - let homeserver: HomeserverInstance; - - beforeEach(() => { - cy.startHomeserver("default").then((data) => { - homeserver = data; - - cy.initTestUser(homeserver, "Jim"); - }); - }); - - afterEach(() => { - cy.stopHomeserver(homeserver); - }); - - it("should allow us to create a public room with name, topic & address set", () => { - const name = "Test room 1"; - const topic = "This room is dedicated to this test and this test only!"; - - cy.openCreateRoomDialog().within(() => { - // Fill name & topic - cy.findByRole("textbox", { name: "Name" }).type(name); - cy.findByRole("textbox", { name: "Topic (optional)" }).type(topic); - // Change room to public - cy.findByRole("button", { name: "Room visibility" }).click(); - cy.findByRole("option", { name: "Public room" }).click(); - // Fill room address - cy.findByRole("textbox", { name: "Room address" }).type("test-room-1"); - // Submit - cy.findByRole("button", { name: "Create room" }).click(); - }); - - cy.url().should("contain", "/#/room/#test-room-1:localhost"); - - cy.get(".mx_LegacyRoomHeader").within(() => { - cy.findByText(name); - cy.findByText(topic); - }); - }); -}); diff --git a/playwright/e2e/create-room/create-room.spec.ts b/playwright/e2e/create-room/create-room.spec.ts new file mode 100644 index 0000000000..0e5882e23c --- /dev/null +++ b/playwright/e2e/create-room/create-room.spec.ts @@ -0,0 +1,43 @@ +/* +Copyright 2022-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("Create Room", () => { + test.use({ displayName: "Jim" }); + + test("should allow us to create a public room with name, topic & address set", async ({ page, user, app }) => { + const name = "Test room 1"; + const topic = "This room is dedicated to this test and this test only!"; + + const dialog = await app.openCreateRoomDialog(); + // Fill name & topic + await dialog.getByRole("textbox", { name: "Name" }).fill(name); + await dialog.getByRole("textbox", { name: "Topic" }).fill(topic); + // Change room to public + await dialog.getByRole("button", { name: "Room visibility" }).click(); + await dialog.getByRole("option", { name: "Public room" }).click(); + // Fill room address + await dialog.getByRole("textbox", { name: "Room address" }).fill("test-room-1"); + // Submit + await dialog.getByRole("button", { name: "Create room" }).click(); + + await expect(page).toHaveURL(/\/#\/room\/#test-room-1:localhost/); + const header = page.locator(".mx_LegacyRoomHeader"); + await expect(header).toContainText(name); + await expect(header).toContainText(topic); + }); +}); diff --git a/playwright/pages/ElementAppPage.ts b/playwright/pages/ElementAppPage.ts index a913675f0c..1735877f5b 100644 --- a/playwright/pages/ElementAppPage.ts +++ b/playwright/pages/ElementAppPage.ts @@ -52,6 +52,15 @@ export class ElementAppPage { return this.page.locator(".mx_UserSettingsDialog"); } + /** + * Open room creation dialog. + */ + public async openCreateRoomDialog(): Promise { + await this.page.getByRole("button", { name: "Add room", exact: true }).click(); + await this.page.getByRole("menuitem", { name: "New room", exact: true }).click(); + return this.page.locator(".mx_CreateRoomDialog"); + } + /** * Create a room with given options. * @param options the options to apply when creating the room