From 949cd1decc03fae5f89ff26b3675afa45431089b Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Wed, 15 Apr 2026 17:38:20 +0200 Subject: [PATCH] chore: move util functions of room list specs --- .../room-list-filter-sort.spec.ts | 19 +--- .../room-list-panel/room-list-header.spec.ts | 10 +- .../room-list-panel/room-list-panel.spec.ts | 11 +-- .../room-list-panel/room-list-search.spec.ts | 11 +-- .../room-list-sections.spec.ts | 31 +------ .../room-list-panel/room-list.spec.ts | 9 +- .../e2e/left-panel/room-list-panel/utils.ts | 92 +++++++++++++++++++ 7 files changed, 99 insertions(+), 84 deletions(-) create mode 100644 apps/web/playwright/e2e/left-panel/room-list-panel/utils.ts diff --git a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-filter-sort.spec.ts b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-filter-sort.spec.ts index 99ffed3ff8..7356a2e6bf 100644 --- a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-filter-sort.spec.ts +++ b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-filter-sort.spec.ts @@ -6,10 +6,11 @@ */ import { type Visibility } from "matrix-js-sdk/src/matrix"; -import { type Locator, type Page } from "@playwright/test"; +import { type Page } from "@playwright/test"; import { expect, test } from "../../../element-web-test"; import { SettingLevel } from "../../../../src/settings/SettingLevel"; +import { getFilterCollapseButton, getFilterExpandButton, getPrimaryFilters, getRoomOptionsMenu } from "./utils"; test.describe("Room list filters and sort", () => { test.use({ @@ -21,22 +22,6 @@ test.describe("Room list filters and sort", () => { labsFlags: ["feature_new_room_list"], }); - function getPrimaryFilters(page: Page): Locator { - return page.getByTestId("primary-filters"); - } - - function getRoomOptionsMenu(page: Page): Locator { - return page.getByRole("button", { name: "Room Options" }); - } - - function getFilterExpandButton(page: Page): Locator { - return getPrimaryFilters(page).getByRole("button", { name: "Expand filter list" }); - } - - function getFilterCollapseButton(page: Page): Locator { - return getPrimaryFilters(page).getByRole("button", { name: "Collapse filter list" }); - } - /** * Get the room list * @param page diff --git a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-header.spec.ts b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-header.spec.ts index 96e0ca8597..1ffa49429d 100644 --- a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-header.spec.ts +++ b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-header.spec.ts @@ -6,21 +6,13 @@ */ import { test, expect } from "../../../element-web-test"; -import type { Page } from "@playwright/test"; +import { getHeaderSection } from "./utils"; test.describe("Header section of the room list", () => { test.use({ labsFlags: ["feature_new_room_list"], }); - /** - * Get the header section of the room list - * @param page - */ - function getHeaderSection(page: Page) { - return page.getByTestId("room-list-header"); - } - test.beforeEach(async ({ page, app, user }) => { // The notification toast is displayed above the search section await app.closeNotificationToast(); diff --git a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-panel.spec.ts b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-panel.spec.ts index bc1387cbce..ad87eac89b 100644 --- a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-panel.spec.ts +++ b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-panel.spec.ts @@ -5,23 +5,14 @@ * Please see LICENSE files in the repository root for full details. */ -import { type Page } from "@playwright/test"; - import { test, expect } from "../../../element-web-test"; +import { getRoomListView } from "./utils"; test.describe("Room list panel", () => { test.use({ labsFlags: ["feature_new_room_list"], }); - /** - * Get the room list view - * @param page - */ - function getRoomListView(page: Page) { - return page.getByRole("navigation", { name: "Room list" }); - } - test.beforeEach(async ({ page, app, user }) => { // The notification toast is displayed above the search section await app.closeNotificationToast(); diff --git a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-search.spec.ts b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-search.spec.ts index 028503f622..37263d9b67 100644 --- a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-search.spec.ts +++ b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-search.spec.ts @@ -5,23 +5,14 @@ * Please see LICENSE files in the repository root for full details. */ -import { type Page } from "@playwright/test"; - import { test, expect } from "../../../element-web-test"; +import { getSearchSection } from "./utils"; test.describe("Search section of the room list", () => { test.use({ labsFlags: ["feature_new_room_list"], }); - /** - * Get the search section of the room list - * @param page - */ - function getSearchSection(page: Page) { - return page.getByRole("search"); - } - test.beforeEach(async ({ page, app, user }) => { // The notification toast is displayed above the search section await app.closeNotificationToast(); diff --git a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-sections.spec.ts b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-sections.spec.ts index 9bc9bbe2b0..80651c409f 100644 --- a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-sections.spec.ts +++ b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-sections.spec.ts @@ -5,9 +5,8 @@ * Please see LICENSE files in the repository root for full details. */ -import { type Locator, type Page } from "@playwright/test"; - import { expect, test } from "../../../element-web-test"; +import { getPrimaryFilters, getRoomList, getSectionHeader } from "./utils"; test.describe("Room list sections", () => { test.use({ @@ -19,34 +18,6 @@ test.describe("Room list sections", () => { }, }); - /** - * Get the room list - * @param page - */ - function getRoomList(page: Page): Locator { - return page.getByTestId("room-list"); - } - - /** - * Get the primary filters - * @param page - */ - function getPrimaryFilters(page: Page): Locator { - return page.getByTestId("primary-filters"); - } - - /** - * Get a section header toggle button by section name - * @param page - * @param sectionName The display name of the section (e.g. "Favourites", "Chats", "Low Priority") - * @param isUnread Whether to look for the unread version of the section header - */ - function getSectionHeader(page: Page, sectionName: string, isUnread = false): Locator { - return getRoomList(page).getByRole("gridcell", { - name: isUnread ? `Toggle ${sectionName} section with unread room(s)` : `Toggle ${sectionName} section`, - }); - } - test.beforeEach(async ({ page, app, user }) => { // The notification toast is displayed above the search section await app.closeNotificationToast(); diff --git a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list.spec.ts b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list.spec.ts index 79cc0b4cf3..30dd461041 100644 --- a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list.spec.ts +++ b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list.spec.ts @@ -10,6 +10,7 @@ import { type Page } from "@playwright/test"; import { expect, test } from "../../../element-web-test"; import { type Bot } from "../../../pages/bot"; import { type ElementAppPage } from "../../../pages/ElementAppPage"; +import { getRoomList } from "./utils"; test.describe("Room list", () => { test.use({ @@ -20,14 +21,6 @@ test.describe("Room list", () => { }, }); - /** - * Get the room list - * @param page - */ - function getRoomList(page: Page) { - return page.getByTestId("room-list"); - } - test.beforeEach(async ({ page, app, user }) => { // The notification toast is displayed above the search section await app.closeNotificationToast(); diff --git a/apps/web/playwright/e2e/left-panel/room-list-panel/utils.ts b/apps/web/playwright/e2e/left-panel/room-list-panel/utils.ts new file mode 100644 index 0000000000..523b268c80 --- /dev/null +++ b/apps/web/playwright/e2e/left-panel/room-list-panel/utils.ts @@ -0,0 +1,92 @@ +/* + * Copyright 2026 Element Creations 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 Locator, type Page } from "@playwright/test"; + +/** + * Get the room list + * @param page + */ +export function getRoomList(page: Page): Locator { + return page.getByTestId("room-list"); +} + +/** + * Get the room list header + * @param page + */ +export function getRoomListHeader(page: Page): Locator { + return page.getByTestId("room-list-header"); +} + +/** + * Get a section header toggle button by section name + * @param page + * @param sectionName The display name of the section + * @param isUnread Whether to look for the unread version of the section header + */ +export function getSectionHeader(page: Page, sectionName: string, isUnread = false): Locator { + return getRoomList(page).getByRole("gridcell", { + name: isUnread ? `Toggle ${sectionName} section with unread room(s)` : `Toggle ${sectionName} section`, + }); +} + +/** + * Get the primary filters container + * @param page + */ +export function getPrimaryFilters(page: Page): Locator { + return page.getByTestId("primary-filters"); +} + +/** + * Get the room options menu button in the room list header + * @param page + */ +export function getRoomOptionsMenu(page: Page): Locator { + return page.getByRole("button", { name: "Room Options" }); +} + +/** + * Get the filter list expand button in the room list header + * @param page + */ +export function getFilterExpandButton(page: Page): Locator { + return getPrimaryFilters(page).getByRole("button", { name: "Expand filter list" }); +} + +/** + * Get the filter list collapse button in the room list header + * @param page + */ +export function getFilterCollapseButton(page: Page): Locator { + return getPrimaryFilters(page).getByRole("button", { name: "Collapse filter list" }); +} + +/** + * Get the header section of the room list + * @param page + */ +export function getHeaderSection(page: Page) { + return page.getByTestId("room-list-header"); +} + +/** + * Get the room list view + * @param page + */ +export function getRoomListView(page: Page) { + return page.getByRole("navigation", { name: "Room list" }); +} + +/** + * Get the search section of the room list + * @param page + */ +export function getSearchSection(page: Page) { + return page.getByRole("search"); +}