Files
twitter-lite/e2e/models/WorkspacePage.ts
T

62 lines
2.1 KiB
TypeScript

import { expect, type Locator, type Page } from "@playwright/test";
type Destination = "Home" | "Vitals" | "Messages" | "Journal" | "Reader" | "Research";
export class WorkspacePage {
readonly manageAccounts: Locator;
readonly toggleSidebar: Locator;
readonly mobileSidebar: Locator;
readonly closeSidebar: Locator;
readonly deckManager: Locator;
readonly researchChat: Locator;
readonly researchReady: Locator;
constructor(readonly page: Page) {
this.manageAccounts = page.getByRole("button", { name: "Manage connected accounts" });
this.toggleSidebar = page.getByRole("button", { name: "Toggle sidebar" });
this.mobileSidebar = page.locator('[data-mobile="true"][data-sidebar="sidebar"]');
this.closeSidebar = page.getByRole("button", { name: "Close sidebar", exact: true });
this.deckManager = page.getByRole("button", { name: "Deck manager", exact: true });
this.researchChat = page.getByRole("button", { name: "Research chat", exact: true });
this.researchReady = page.getByRole("button", { name: "Rename", includeHidden: true });
}
navigationLink(destination: Destination) {
return this.page.getByRole("link", { name: destination, exact: true }).first();
}
async navigateTo(destination: Destination) {
const link = this.navigationLink(destination);
if (!(await link.isVisible())) await this.ensureSidebarOpen();
await link.click();
}
async ensureSidebarOpen() {
if (!(await this.manageAccounts.isVisible())) await this.toggleSidebar.click();
}
async showDeckManagement() {
await expect(this.researchReady).toBeEnabled();
await this.ensureSidebarOpen();
await this.deckManager.click();
}
async showResearch() {
await expect(this.researchReady).toBeEnabled();
await this.ensureSidebarOpen();
await this.researchChat.click();
}
async closeMobileSidebar() {
if (await this.mobileSidebar.isVisible()) {
await this.closeSidebar.click();
await expect(this.mobileSidebar).toBeHidden();
}
}
async openConnectedAccounts() {
await this.ensureSidebarOpen();
await this.manageAccounts.click();
}
}