import { expect } from "@playwright/test"; import { BaseWebSocketPage } from "./BaseWebSocketPage"; export class DashboardPage extends BaseWebSocketPage { static async init(page) { await BaseWebSocketPage.initWebSockets(page); await BaseWebSocketPage.mockRPC( page, "get-teams", "logged-in-user/get-teams-default.json", ); await BaseWebSocketPage.mockRPC( page, "get-font-variants?team-id=*", "workspace/get-font-variants-empty.json", ); await BaseWebSocketPage.mockRPC( page, "get-projects?team-id=*", "logged-in-user/get-projects-default.json", ); await BaseWebSocketPage.mockRPC( page, "get-team-members?team-id=*", "logged-in-user/get-team-members-your-penpot.json", ); await BaseWebSocketPage.mockRPC( page, "get-team-users?team-id=*", "logged-in-user/get-team-users-single-user.json", ); await BaseWebSocketPage.mockRPC( page, "get-unread-comment-threads?team-id=*", "logged-in-user/get-team-users-single-user.json", ); await BaseWebSocketPage.mockRPC( page, "get-team-recent-files?team-id=*", "logged-in-user/get-team-recent-files-empty.json", ); await BaseWebSocketPage.mockRPC( page, "get-profiles-for-file-comments", "workspace/get-profile-for-file-comments.json", ); await BaseWebSocketPage.mockRPC( page, "get-builtin-templates", "logged-in-user/get-built-in-templates-empty.json", ); } static anyTeamId = "c7ce0794-0992-8105-8004-38e630f40f6d"; static secondTeamId = "dd33ff88-f4e5-8033-8003-8096cc07bdf3"; static draftProjectId = "c7ce0794-0992-8105-8004-38e630f7920b"; constructor(page) { super(page); this.sidebar = page.getByTestId("dashboard-sidebar"); this.sidebarMenu = this.sidebar.getByRole("menu"); this.mainHeading = page .getByTestId("dashboard-header") .getByRole("heading", { level: 1 }); this.addProjectButton = page.getByRole("button", { name: "+ NEW PROJECT" }); this.projectName = page.getByText("Project 1"); this.draftsLink = this.sidebar.getByText("Drafts"); this.fontsLink = this.sidebar.getByText("Fonts"); this.libsLink = this.sidebar.getByText("Libraries"); this.searchButton = page.getByRole("button", { name: "dashboard-search" }); this.searchInput = page.getByPlaceholder("Search…"); this.teamDropdown = this.sidebar.getByRole("button", { name: "Your Penpot", }); this.userAccount = this.sidebar.getByRole("button", { name: /Princesa Leia/, }); this.userProfileOption = this.sidebarMenu.getByText("Your account"); } async setupDraftsEmpty() { await this.mockRPC( "get-project-files?project-id=*", "dashboard/get-project-files-empty.json", ); } async setupSearchEmpty() { await this.mockRPC("search-files", "dashboard/search-files-empty.json", { method: "POST", }); } async setupLibrariesEmpty() { await this.mockRPC( "get-team-shared-files?team-id=*", "dashboard/get-shared-files-empty.json", ); } async setupDrafts() { await this.mockRPC( "get-project-files?project-id=*", "dashboard/get-project-files.json", ); await this.mockRPC(/assets\/by-id/gi, "dashboard/thumbnail.png", { contentType: "image/png", }); } async setupNewProject() { await this.mockRPC("create-project", "dashboard/create-project.json", { method: "POST", }); await this.mockRPC( "get-projects?team-id=*", "dashboard/get-projects-new.json", ); } async setupDashboardFull() { await this.mockRPC( "get-projects?team-id=*", "dashboard/get-projects-full.json", ); await this.mockRPC( "get-project-files?project-id=*", "dashboard/get-project-files.json", ); await this.mockRPC( "get-team-shared-files?team-id=*", "dashboard/get-shared-files.json", ); await this.mockRPC( "get-team-shared-files?project-id=*", "dashboard/get-shared-files.json", ); await this.mockRPC( "get-team-recent-files?team-id=*", "dashboard/get-team-recent-files.json", ); await this.mockRPC( "get-font-variants?team-id=*", "dashboard/get-font-variants.json", ); await this.mockRPC("search-files", "dashboard/search-files.json", { method: "POST", }); await this.mockRPC("search-files", "dashboard/search-files.json"); await this.mockRPC("get-teams", "logged-in-user/get-teams-complete.json"); } async setupAccessTokensEmpty() { await this.mockRPC( "get-access-tokens", "dashboard/get-access-tokens-empty.json", ); } async createAccessToken() { await this.mockRPC( "create-access-token", "dashboard/create-access-token.json", { method: "POST" }, ); } async setupAccessTokens() { await this.mockRPC("get-access-tokens", "dashboard/get-access-tokens.json"); } async setupTeamInvitationsEmpty() { await this.mockRPC( "get-team-invitations?team-id=*", "dashboard/get-team-invitations-empty.json", ); } async setupTeamInvitations() { await this.mockRPC( "get-team-invitations?team-id=*", "dashboard/get-team-invitations.json", ); } async setupTeamWebhooksEmpty() { await this.mockRPC( "get-webhooks?team-id=*", "dashboard/get-webhooks-empty.json", ); } async setupTeamWebhooks() { await this.mockRPC("get-webhooks?team-id=*", "dashboard/get-webhooks.json"); } async setupTeamSettings() { await this.mockRPC( "get-team-stats?team-id=*", "dashboard/get-team-stats.json", ); } async goToDashboard() { await this.page.goto( `#/dashboard/recent?team-id=${DashboardPage.anyTeamId}`, ); await expect(this.mainHeading).toBeVisible(); } async goToSecondTeamDashboard() { await this.page.goto( `#/dashboard/recent?team-id=${DashboardPage.secondTeamId}`, ); } async goToSecondTeamMembersSection() { await this.page.goto( `#/dashboard/members?team-id=${DashboardPage.secondTeamId}`, ); } async goToSecondTeamInvitationsSection() { await this.page.goto( `#/dashboard/invitations?team-id=${DashboardPage.secondTeamId}`, ); } async goToSecondTeamWebhooksSection() { await this.page.goto( `#/dashboard/webhooks?team-id=${DashboardPage.secondTeamId}`, ); } async goToSecondTeamWebhooksSection() { await this.page.goto( `#/dashboard/webhooks?team-id=${DashboardPage.secondTeamId}`, ); } async goToSecondTeamSettingsSection() { await this.page.goto( `#/dashboard/settings?team-id=${DashboardPage.secondTeamId}`, ); } async goToSearch() { await this.page.goto( `#/dashboard/search?team-id=${DashboardPage.anyTeamId}`, ); } async goToDrafts() { await this.page.goto( `#/dashboard/files?team-id=${DashboardPage.anyTeamId}&project-id=${DashboardPage.draftProjectId}`, ); await expect(this.mainHeading).toHaveText("Drafts"); } async goToFonts() { await this.page.goto( `#/dashboard/fonts?team-id=${DashboardPage.anyTeamId}`, ); await expect(this.mainHeading).toHaveText("Fonts"); } async goToAccount() { await this.userAccount.click(); await this.userProfileOption.click(); } } export default DashboardPage;