diff --git a/frontend/playwright/ui/specs/subscriptions-dashboard.spec.js b/frontend/playwright/ui/specs/subscriptions-dashboard.spec.js index 7945d87cb4..15f312bbd5 100644 --- a/frontend/playwright/ui/specs/subscriptions-dashboard.spec.js +++ b/frontend/playwright/ui/specs/subscriptions-dashboard.spec.js @@ -9,403 +9,399 @@ test.beforeEach(async ({ page }) => { ]); }); -test.describe("Subscriptions: dashboard", () => { - test("Team with unlimited subscription has specific icon in menu", async ({ +test("Team with unlimited subscription has specific icon in menu", async ({ + page, +}) => { + await DashboardPage.mockRPC( page, - }) => { - await DashboardPage.mockRPC( - page, - "get-profile", - "subscription/get-profile-unlimited-subscription.json", - ); + "get-profile", + "subscription/get-profile-unlimited-subscription.json", + ); - await DashboardPage.mockRPC( - page, - "get-subscription-usage", - "subscription/get-subscription-usage.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-info", - "subscription/get-team-info-subscriptions.json", - ); - - const dashboardPage = new DashboardPage(page); - await dashboardPage.setupDashboardFull(); - await DashboardPage.mockRPC( - page, - "get-teams", - "subscription/get-teams-unlimited-subscription-owner.json", - ); - - await DashboardPage.mockRPC( - page, - "get-projects?team-id=*", - "dashboard/get-projects-second-team.json", - ); - await dashboardPage.mockRPC( - "push-audit-events", - "workspace/audit-event-empty.json", - ); - await dashboardPage.goToSecondTeamDashboard(); - await expect(page.getByTestId("subscription-icon")).toBeVisible(); - }); - - test("The Unlimited subscription has its name in the sidebar dropdown", async ({ + await DashboardPage.mockRPC( page, - }) => { - await DashboardPage.mockRPC( - page, - "get-profile", - "subscription/get-profile-unlimited-subscription.json", - ); + "get-subscription-usage", + "subscription/get-subscription-usage.json", + ); - await DashboardPage.mockRPC( - page, - "get-subscription-usage", - "subscription/get-subscription-usage-one-editor.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-info", - "subscription/get-team-info-subscriptions.json", - ); - - const dashboardPage = new DashboardPage(page); - await dashboardPage.setupDashboardFull(); - await DashboardPage.mockRPC( - page, - "get-teams", - "subscription/get-teams-unlimited-subscription-owner.json", - ); - - await dashboardPage.mockRPC( - "push-audit-events", - "workspace/audit-event-empty.json", - ); - await dashboardPage.goToDashboard(); - - await expect(page.getByTestId("subscription-name")).toHaveText( - "Unlimited plan (trial)", - ); - }); - - test("When the subscription status is unpaid, the sidebar dropdown displays the name Professional for the Unlimited subscription", async ({ + await DashboardPage.mockRPC( page, - }) => { - await DashboardPage.mockRPC( - page, - "get-profile", - "subscription/get-profile-unlimited-unpaid-subscription.json", - ); + "get-team-info", + "subscription/get-team-info-subscriptions.json", + ); - await DashboardPage.mockRPC( - page, - "get-subscription-usage", - "subscription/get-subscription-usage.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-info", - "subscription/get-team-info-subscriptions.json", - ); - - const dashboardPage = new DashboardPage(page); - await dashboardPage.setupDashboardFull(); - await DashboardPage.mockRPC( - page, - "get-teams", - "subscription/get-teams-unlimited-subscription-owner.json", - ); - - await dashboardPage.mockRPC( - "push-audit-events", - "workspace/audit-event-empty.json", - ); - await dashboardPage.goToDashboard(); - - await expect(page.getByTestId("subscription-name")).toHaveText( - "Professional plan", - ); - }); - - test("When the subscription status is canceled, the sidebar dropdown displays the name Professional for the Enterprise subscription", async ({ + const dashboardPage = new DashboardPage(page); + await dashboardPage.setupDashboardFull(); + await DashboardPage.mockRPC( page, - }) => { - await DashboardPage.mockRPC( - page, - "get-profile", - "subscription/get-profile-enterprise-canceled-subscription.json", - ); + "get-teams", + "subscription/get-teams-unlimited-subscription-owner.json", + ); - await DashboardPage.mockRPC( - page, - "get-subscription-usage", - "subscription/get-subscription-usage.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-info", - "subscription/get-team-info-subscriptions.json", - ); - - const dashboardPage = new DashboardPage(page); - await dashboardPage.setupDashboardFull(); - await DashboardPage.mockRPC( - page, - "get-teams", - "subscription/get-teams-unlimited-subscription-owner.json", - ); - - await dashboardPage.mockRPC( - "push-audit-events", - "workspace/audit-event-empty.json", - ); - await dashboardPage.goToDashboard(); - - await expect(page.getByTestId("subscription-name")).toHaveText( - "Professional plan", - ); - }); + await DashboardPage.mockRPC( + page, + "get-projects?team-id=*", + "dashboard/get-projects-second-team.json", + ); + await dashboardPage.mockRPC( + "push-audit-events", + "workspace/audit-event-empty.json", + ); + await dashboardPage.goToSecondTeamDashboard(); + await expect(page.getByTestId("subscription-icon")).toBeVisible(); }); -test.describe("Subscriptions: team members and invitations", () => { - test("Team settings has susbscription name and no manage subscription link when is member", async ({ +test("The Unlimited subscription has its name in the sidebar dropdown", async ({ + page, +}) => { + await DashboardPage.mockRPC( page, - }) => { - await DashboardPage.mockRPC( - page, - "get-profile", - "logged-in-user/get-profile-logged-in.json", - ); + "get-profile", + "subscription/get-profile-unlimited-subscription.json", + ); - await DashboardPage.mockRPC( - page, - "get-subscription-usage", - "subscription/get-subscription-usage.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-info", - "subscription/get-team-info-subscriptions.json", - ); - - const dashboardPage = new DashboardPage(page); - await dashboardPage.setupDashboardFull(); - await DashboardPage.mockRPC( - page, - "get-teams", - "subscription/get-teams-unlimited-subscription-member.json", - ); - - await DashboardPage.mockRPC( - page, - "get-projects?team-id=*", - "dashboard/get-projects-second-team.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-members?team-id=*", - "subscription/get-team-members-subscription-member.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-stats?team-id=*", - "dashboard/get-team-stats.json", - ); - - await dashboardPage.mockRPC( - "push-audit-events", - "workspace/audit-event-empty.json", - ); - - await dashboardPage.goToSecondTeamSettingsSection(); - await expect(page.getByText("Unlimited (trial)")).toBeVisible(); - await expect( - page.getByRole("button", { name: "Manage your subscription" }), - ).not.toBeVisible(); - }); - - test("Team settings has susbscription name and manage subscription link when is owner", async ({ + await DashboardPage.mockRPC( page, - }) => { - await DashboardPage.mockRPC( - page, - "get-profile", - "subscription/get-profile-unlimited-subscription.json", - ); + "get-subscription-usage", + "subscription/get-subscription-usage-one-editor.json", + ); - await DashboardPage.mockRPC( - page, - "get-subscription-usage", - "subscription/get-subscription-usage.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-info", - "subscription/get-team-info-subscriptions.json", - ); - - const dashboardPage = new DashboardPage(page); - await dashboardPage.setupDashboardFull(); - await DashboardPage.mockRPC( - page, - "get-teams", - "subscription/get-teams-unlimited-subscription-owner.json", - ); - - await DashboardPage.mockRPC( - page, - "get-projects?team-id=*", - "dashboard/get-projects-second-team.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-members?team-id=*", - "subscription/get-team-members-subscription-owner.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-stats?team-id=*", - "dashboard/get-team-stats.json", - ); - - await dashboardPage.mockRPC( - "push-audit-events", - "workspace/audit-event-empty.json", - ); - - await dashboardPage.goToSecondTeamSettingsSection(); - - await expect(page.getByText("Unlimited (trial)")).toBeVisible(); - await expect( - page.getByRole("button", { name: "Manage your subscription" }), - ).toBeVisible(); - }); - - test("Members tab has warning message when user has more seats than editors.", async ({ + await DashboardPage.mockRPC( page, - }) => { - await DashboardPage.mockRPC( - page, - "get-profile", - "subscription/get-profile-unlimited-subscription.json", - ); + "get-team-info", + "subscription/get-team-info-subscriptions.json", + ); - await DashboardPage.mockRPC( - page, - "get-subscription-usage", - "subscription/get-subscription-usage.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-info", - "subscription/get-team-info-subscriptions.json", - ); - - const dashboardPage = new DashboardPage(page); - await dashboardPage.setupDashboardFull(); - await DashboardPage.mockRPC( - page, - "get-teams", - "subscription/get-teams-unlimited-subscription-owner.json", - ); - - await DashboardPage.mockRPC( - page, - "get-projects?team-id=*", - "dashboard/get-projects-second-team.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-members?team-id=*", - "subscription/get-team-members-subscription-eight-member.json", - ); - - await dashboardPage.mockRPC( - "push-audit-events", - "workspace/audit-event-empty.json", - ); - - await dashboardPage.goToSecondTeamMembersSection(); - - const ctas = page.getByTestId("cta"); - await expect(ctas).toHaveCount(2); - await expect( - page.getByText("Inviting people while on the unlimited plan"), - ).toBeVisible(); - }); - - test("Invitations tab has warning message when user has more seats than editors.", async ({ + const dashboardPage = new DashboardPage(page); + await dashboardPage.setupDashboardFull(); + await DashboardPage.mockRPC( page, - }) => { - await DashboardPage.mockRPC( - page, - "get-profile", - "subscription/get-profile-unlimited-subscription.json", - ); + "get-teams", + "subscription/get-teams-unlimited-subscription-owner.json", + ); - await DashboardPage.mockRPC( - page, - "get-subscription-usage", - "subscription/get-subscription-usage.json", - ); + await dashboardPage.mockRPC( + "push-audit-events", + "workspace/audit-event-empty.json", + ); + await dashboardPage.goToDashboard(); - await DashboardPage.mockRPC( - page, - "get-team-info", - "subscription/get-team-info-subscriptions.json", - ); - - const dashboardPage = new DashboardPage(page); - await dashboardPage.setupDashboardFull(); - await DashboardPage.mockRPC( - page, - "get-teams", - "subscription/get-teams-unlimited-subscription-owner.json", - ); - - await DashboardPage.mockRPC( - page, - "get-projects?team-id=*", - "dashboard/get-projects-second-team.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-members?team-id=*", - "subscription/get-team-members-subscription-eight-member.json", - ); - - await DashboardPage.mockRPC( - page, - "get-team-invitations?team-id=*", - "subscription/get-team-invitations.json", - ); - - await dashboardPage.mockRPC( - "push-audit-events", - "workspace/audit-event-empty.json", - ); - - await dashboardPage.goToSecondTeamInvitationsSection(); - - const ctas = page.getByTestId("cta"); - await expect(ctas).toHaveCount(2); - await expect( - page.getByText("Inviting people while on the unlimited plan"), - ).toBeVisible(); - }); + await expect(page.getByTestId("subscription-name")).toHaveText( + "Unlimited plan (trial)", + ); +}); + +test("The sidebar dropdown displays the correct subscription name when status is Unpaid", async ({ + page, +}) => { + await DashboardPage.mockRPC( + page, + "get-profile", + "subscription/get-profile-unlimited-unpaid-subscription.json", + ); + + await DashboardPage.mockRPC( + page, + "get-subscription-usage", + "subscription/get-subscription-usage.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-info", + "subscription/get-team-info-subscriptions.json", + ); + + const dashboardPage = new DashboardPage(page); + await dashboardPage.setupDashboardFull(); + await DashboardPage.mockRPC( + page, + "get-teams", + "subscription/get-teams-unlimited-subscription-owner.json", + ); + + await dashboardPage.mockRPC( + "push-audit-events", + "workspace/audit-event-empty.json", + ); + await dashboardPage.goToDashboard(); + + await expect(page.getByTestId("subscription-name")).toHaveText( + "Professional plan", + ); +}); + +test("The sidebar dropdown displays the correct subscription name when status is cancelled", async ({ + page, +}) => { + await DashboardPage.mockRPC( + page, + "get-profile", + "subscription/get-profile-enterprise-canceled-subscription.json", + ); + + await DashboardPage.mockRPC( + page, + "get-subscription-usage", + "subscription/get-subscription-usage.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-info", + "subscription/get-team-info-subscriptions.json", + ); + + const dashboardPage = new DashboardPage(page); + await dashboardPage.setupDashboardFull(); + await DashboardPage.mockRPC( + page, + "get-teams", + "subscription/get-teams-unlimited-subscription-owner.json", + ); + + await dashboardPage.mockRPC( + "push-audit-events", + "workspace/audit-event-empty.json", + ); + await dashboardPage.goToDashboard(); + + await expect(page.getByTestId("subscription-name")).toHaveText( + "Professional plan", + ); +}); + +test("Team settings has susbscription name and no manage subscription link when is member", async ({ + page, +}) => { + await DashboardPage.mockRPC( + page, + "get-profile", + "logged-in-user/get-profile-logged-in.json", + ); + + await DashboardPage.mockRPC( + page, + "get-subscription-usage", + "subscription/get-subscription-usage.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-info", + "subscription/get-team-info-subscriptions.json", + ); + + const dashboardPage = new DashboardPage(page); + await dashboardPage.setupDashboardFull(); + await DashboardPage.mockRPC( + page, + "get-teams", + "subscription/get-teams-unlimited-subscription-member.json", + ); + + await DashboardPage.mockRPC( + page, + "get-projects?team-id=*", + "dashboard/get-projects-second-team.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-members?team-id=*", + "subscription/get-team-members-subscription-member.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-stats?team-id=*", + "dashboard/get-team-stats.json", + ); + + await dashboardPage.mockRPC( + "push-audit-events", + "workspace/audit-event-empty.json", + ); + + await dashboardPage.goToSecondTeamSettingsSection(); + await expect(page.getByText("Unlimited (trial)")).toBeVisible(); + await expect( + page.getByRole("button", { name: "Manage your subscription" }), + ).not.toBeVisible(); +}); + +test("Team settings has susbscription name and manage subscription link when is owner", async ({ + page, +}) => { + await DashboardPage.mockRPC( + page, + "get-profile", + "subscription/get-profile-unlimited-subscription.json", + ); + + await DashboardPage.mockRPC( + page, + "get-subscription-usage", + "subscription/get-subscription-usage.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-info", + "subscription/get-team-info-subscriptions.json", + ); + + const dashboardPage = new DashboardPage(page); + await dashboardPage.setupDashboardFull(); + await DashboardPage.mockRPC( + page, + "get-teams", + "subscription/get-teams-unlimited-subscription-owner.json", + ); + + await DashboardPage.mockRPC( + page, + "get-projects?team-id=*", + "dashboard/get-projects-second-team.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-members?team-id=*", + "subscription/get-team-members-subscription-owner.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-stats?team-id=*", + "dashboard/get-team-stats.json", + ); + + await dashboardPage.mockRPC( + "push-audit-events", + "workspace/audit-event-empty.json", + ); + + await dashboardPage.goToSecondTeamSettingsSection(); + + await expect(page.getByText("Unlimited (trial)")).toBeVisible(); + await expect( + page.getByRole("button", { name: "Manage your subscription" }), + ).toBeVisible(); +}); + +test("Members tab has warning message when user has more seats than editors", async ({ + page, +}) => { + await DashboardPage.mockRPC( + page, + "get-profile", + "subscription/get-profile-unlimited-subscription.json", + ); + + await DashboardPage.mockRPC( + page, + "get-subscription-usage", + "subscription/get-subscription-usage.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-info", + "subscription/get-team-info-subscriptions.json", + ); + + const dashboardPage = new DashboardPage(page); + await dashboardPage.setupDashboardFull(); + await DashboardPage.mockRPC( + page, + "get-teams", + "subscription/get-teams-unlimited-subscription-owner.json", + ); + + await DashboardPage.mockRPC( + page, + "get-projects?team-id=*", + "dashboard/get-projects-second-team.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-members?team-id=*", + "subscription/get-team-members-subscription-eight-member.json", + ); + + await dashboardPage.mockRPC( + "push-audit-events", + "workspace/audit-event-empty.json", + ); + + await dashboardPage.goToSecondTeamMembersSection(); + + const ctas = page.getByTestId("cta"); + await expect(ctas).toHaveCount(2); + await expect( + page.getByText("Inviting people while on the unlimited plan"), + ).toBeVisible(); +}); + +test("Invitations tab has warning message when user has more seats than editors", async ({ + page, +}) => { + await DashboardPage.mockRPC( + page, + "get-profile", + "subscription/get-profile-unlimited-subscription.json", + ); + + await DashboardPage.mockRPC( + page, + "get-subscription-usage", + "subscription/get-subscription-usage.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-info", + "subscription/get-team-info-subscriptions.json", + ); + + const dashboardPage = new DashboardPage(page); + await dashboardPage.setupDashboardFull(); + await DashboardPage.mockRPC( + page, + "get-teams", + "subscription/get-teams-unlimited-subscription-owner.json", + ); + + await DashboardPage.mockRPC( + page, + "get-projects?team-id=*", + "dashboard/get-projects-second-team.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-members?team-id=*", + "subscription/get-team-members-subscription-eight-member.json", + ); + + await DashboardPage.mockRPC( + page, + "get-team-invitations?team-id=*", + "subscription/get-team-invitations.json", + ); + + await dashboardPage.mockRPC( + "push-audit-events", + "workspace/audit-event-empty.json", + ); + + await dashboardPage.goToSecondTeamInvitationsSection(); + + const ctas = page.getByTestId("cta"); + await expect(ctas).toHaveCount(2); + await expect( + page.getByText("Inviting people while on the unlimited plan"), + ).toBeVisible(); });