mirror of
https://github.com/penpot/penpot.git
synced 2025-07-08 23:47:15 +02:00
712 lines
20 KiB
JavaScript
712 lines
20 KiB
JavaScript
import { test, expect } from "@playwright/test";
|
|
import DashboardPage from "../pages/DashboardPage";
|
|
import { WorkspacePage } from "../pages/WorkspacePage";
|
|
import { SubscriptionProfilePage } from "../pages/SubscriptionProfilePage";
|
|
|
|
test.describe("Subscriptions: dashboard", () => {
|
|
test("Team with unlimited subscription has specific icon in menu", async ({
|
|
page,
|
|
}) => {
|
|
await DashboardPage.init(page);
|
|
await DashboardPage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
await DashboardPage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-unlimited-subscription.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 ({
|
|
page,
|
|
}) => {
|
|
await DashboardPage.init(page);
|
|
await DashboardPage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
await DashboardPage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-unlimited-subscription.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.describe("Subscriptions: Team members and invitations", () => {
|
|
test("Team settings has susbscription name and no manage subscription link when is member", async ({
|
|
page,
|
|
}) => {
|
|
await DashboardPage.init(page);
|
|
await DashboardPage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
await DashboardPage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"logged-in-user/get-profile-logged-in.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(
|
|
"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.init(page);
|
|
await DashboardPage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
await DashboardPage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-unlimited-subscription.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 team has more members than subscriptions. Subscribe link is shown for owners.", async ({
|
|
page,
|
|
}) => {
|
|
await DashboardPage.init(page);
|
|
await DashboardPage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
await DashboardPage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-unlimited-subscription.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(
|
|
"push-audit-events",
|
|
"workspace/audit-event-empty.json",
|
|
);
|
|
|
|
await dashboardPage.goToSecondTeamMembersSection();
|
|
await expect(page.getByTestId("cta")).toBeVisible();
|
|
await expect(page.getByText("Subscribe now.")).toBeVisible();
|
|
});
|
|
|
|
test("Members tab has warning message when team has more members than subscriptions. Contact to owner is shown for members.", async ({
|
|
page,
|
|
}) => {
|
|
await DashboardPage.init(page);
|
|
await DashboardPage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
await DashboardPage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"logged-in-user/get-profile-logged-in.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(
|
|
"push-audit-events",
|
|
"workspace/audit-event-empty.json",
|
|
);
|
|
|
|
await dashboardPage.goToSecondTeamMembersSection();
|
|
await expect(page.getByTestId("cta")).toBeVisible();
|
|
await expect(page.getByText("Contact with the team owner")).toBeVisible();
|
|
});
|
|
|
|
test("Members tab has warning message when has professional subscription and more than 8 members.", async ({
|
|
page,
|
|
}) => {
|
|
await DashboardPage.init(page);
|
|
await DashboardPage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
await DashboardPage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"logged-in-user/get-profile-logged-in.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-professional-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-more-than-8.json",
|
|
);
|
|
|
|
await dashboardPage.mockRPC(
|
|
"push-audit-events",
|
|
"workspace/audit-event-empty.json",
|
|
);
|
|
|
|
await dashboardPage.goToSecondTeamMembersSection();
|
|
await expect(page.getByTestId("cta")).toBeVisible();
|
|
await expect(
|
|
page.getByText(
|
|
"The Professional plan is designed for teams of up to 8 editors (owner, admin, and editor).",
|
|
),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test("Invitations tab has warning message when subscription is expired", async ({
|
|
page,
|
|
}) => {
|
|
await DashboardPage.init(page);
|
|
await DashboardPage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
await DashboardPage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-unlimited-subscription.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-expired-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-invitations?team-id=*",
|
|
"dashboard/get-team-invitations-empty.json",
|
|
);
|
|
|
|
await dashboardPage.mockRPC(
|
|
"push-audit-events",
|
|
"workspace/audit-event-empty.json",
|
|
);
|
|
|
|
await dashboardPage.goToSecondTeamInvitationsSection();
|
|
await expect(page.getByTestId("cta")).toBeVisible();
|
|
await expect(
|
|
page.getByText(
|
|
"Looks like your team has grown! Your plan includes seats, but you're now using more than that.",
|
|
),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test("Invitations tab has warning message when has professional subscription and more than 8 members.", async ({
|
|
page,
|
|
}) => {
|
|
await DashboardPage.init(page);
|
|
await DashboardPage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
await DashboardPage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-unlimited-subscription.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-expired-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-more-than-8.json",
|
|
);
|
|
|
|
await DashboardPage.mockRPC(
|
|
page,
|
|
"get-team-invitations?team-id=*",
|
|
"dashboard/get-team-invitations-empty.json",
|
|
);
|
|
|
|
await dashboardPage.mockRPC(
|
|
"push-audit-events",
|
|
"workspace/audit-event-empty.json",
|
|
);
|
|
|
|
await dashboardPage.goToSecondTeamInvitationsSection();
|
|
await expect(page.getByTestId("cta")).toBeVisible();
|
|
await expect(
|
|
page.getByText(
|
|
"Looks like your team has grown! Your plan includes seats, but you're now using more than that.",
|
|
),
|
|
).toBeVisible();
|
|
});
|
|
});
|
|
|
|
test.describe("Subscriptions: workspace", () => {
|
|
test("Unlimited team should have 'Power up your plan' link in main menu", async ({
|
|
page,
|
|
}) => {
|
|
await WorkspacePage.init(page);
|
|
await WorkspacePage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
|
|
const workspacePage = new WorkspacePage(page);
|
|
await workspacePage.setupEmptyFile();
|
|
|
|
await WorkspacePage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-unlimited-subscription.json",
|
|
);
|
|
|
|
await workspacePage.mockRPC(
|
|
"push-audit-events",
|
|
"workspace/audit-event-empty.json",
|
|
);
|
|
await workspacePage.goToWorkspace();
|
|
await page.getByRole("button", { name: "Main menu" }).click();
|
|
|
|
await expect(page.getByText("Power up your plan")).toBeVisible();
|
|
});
|
|
|
|
test("Enterprise team should not have 'Power up your plan' link in main menu", async ({
|
|
page,
|
|
}) => {
|
|
await WorkspacePage.init(page);
|
|
await WorkspacePage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
|
|
const workspacePage = new WorkspacePage(page);
|
|
await workspacePage.setupEmptyFile();
|
|
|
|
await WorkspacePage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-enterprise-subscription.json",
|
|
);
|
|
|
|
await workspacePage.mockRPC(
|
|
"push-audit-events",
|
|
"workspace/audit-event-empty.json",
|
|
);
|
|
await workspacePage.goToWorkspace();
|
|
await page.getByRole("button", { name: "Main menu" }).click();
|
|
|
|
await expect(page.getByText("Power up your plan")).not.toBeVisible();
|
|
});
|
|
|
|
test("Professional team should have 7 days autosaved versions", async ({
|
|
page,
|
|
}) => {
|
|
await WorkspacePage.init(page);
|
|
await WorkspacePage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
|
|
const workspacePage = new WorkspacePage(page);
|
|
await workspacePage.setupEmptyFile();
|
|
|
|
await workspacePage.mockRPC(
|
|
"push-audit-events",
|
|
"workspace/audit-event-empty.json",
|
|
);
|
|
await workspacePage.goToWorkspace();
|
|
|
|
await workspacePage.mockRPC(
|
|
"get-file-snapshots?file-id=*",
|
|
"workspace/versions-snapshot-1.json",
|
|
);
|
|
|
|
await page.getByLabel("History").click();
|
|
|
|
await expect(
|
|
page.getByText("Autosaved versions will be kept for 7 days."),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test("Unlimited team should have 30 days autosaved versions", async ({
|
|
page,
|
|
}) => {
|
|
await WorkspacePage.init(page);
|
|
await WorkspacePage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
|
|
const workspacePage = new WorkspacePage(page);
|
|
await workspacePage.setupEmptyFile();
|
|
|
|
await WorkspacePage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-unlimited-subscription.json",
|
|
);
|
|
|
|
await WorkspacePage.mockRPC(
|
|
page,
|
|
"get-teams",
|
|
"subscription/get-teams-unlimited-one-team.json",
|
|
);
|
|
|
|
await workspacePage.mockRPC(
|
|
"push-audit-events",
|
|
"workspace/audit-event-empty.json",
|
|
);
|
|
await workspacePage.goToWorkspace();
|
|
|
|
await workspacePage.mockRPC(
|
|
"get-file-snapshots?file-id=*",
|
|
"workspace/versions-snapshot-1.json",
|
|
);
|
|
|
|
await page.getByLabel("History").click();
|
|
|
|
await expect(
|
|
page.getByText("Autosaved versions will be kept for 30 days."),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test("Unlimited team should have 90 days autosaved versions", async ({
|
|
page,
|
|
}) => {
|
|
await WorkspacePage.init(page);
|
|
await WorkspacePage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
|
|
const workspacePage = new WorkspacePage(page);
|
|
await workspacePage.setupEmptyFile();
|
|
|
|
await WorkspacePage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-enterprise-subscription.json",
|
|
);
|
|
|
|
await WorkspacePage.mockRPC(
|
|
page,
|
|
"get-teams",
|
|
"subscription/get-teams-enterprise-one-team.json",
|
|
);
|
|
|
|
await workspacePage.mockRPC(
|
|
"push-audit-events",
|
|
"workspace/audit-event-empty.json",
|
|
);
|
|
await workspacePage.goToWorkspace();
|
|
|
|
await workspacePage.mockRPC(
|
|
"get-file-snapshots?file-id=*",
|
|
"workspace/versions-snapshot-1.json",
|
|
);
|
|
|
|
await page.getByLabel("History").click();
|
|
|
|
await expect(
|
|
page.getByText("Autosaved versions will be kept for 90 days."),
|
|
).toBeVisible();
|
|
});
|
|
});
|
|
|
|
test.describe("Subscriptions: profile", () => {
|
|
test("When subscription is professional there is no manage subscription link", async ({
|
|
page,
|
|
}) => {
|
|
await SubscriptionProfilePage.init(page);
|
|
await SubscriptionProfilePage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
|
|
await SubscriptionProfilePage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"logged-in-user/get-profile-logged-in.json",
|
|
);
|
|
|
|
const subscriptionProfilePage = new SubscriptionProfilePage(page);
|
|
|
|
await subscriptionProfilePage.goToSubscriptions();
|
|
|
|
await expect(
|
|
page.getByRole("button", { name: "Manage your subscription" }),
|
|
).not.toBeVisible();
|
|
|
|
await expect(
|
|
page.getByRole("heading", { name: "Other Penpot plans", level: 3 }),
|
|
).toBeVisible();
|
|
|
|
await expect(page.getByText("$7")).toBeVisible();
|
|
|
|
await expect(page.getByText("$950")).toBeVisible();
|
|
|
|
await expect(
|
|
page.getByRole("button", { name: "Try it free for 14 days" }).first(),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test("When subscription is unlimited there is manage subscription link", async ({
|
|
page,
|
|
}) => {
|
|
await SubscriptionProfilePage.init(page);
|
|
await SubscriptionProfilePage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
|
|
await SubscriptionProfilePage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-unlimited-subscription.json",
|
|
);
|
|
|
|
const subscriptionProfilePage = new SubscriptionProfilePage(page);
|
|
|
|
await subscriptionProfilePage.goToSubscriptions();
|
|
|
|
await expect(
|
|
page.getByRole("button", { name: "Manage your subscription" }),
|
|
).toBeVisible();
|
|
|
|
await expect(
|
|
page.getByRole("heading", { name: "Other Penpot plans", level: 3 }),
|
|
).toBeVisible();
|
|
|
|
await expect(page.getByText("$0")).toBeVisible();
|
|
|
|
await expect(page.getByText("$950")).toBeVisible();
|
|
|
|
await expect(
|
|
page.getByRole("button", { name: "Try it free for 14 days" }).first(),
|
|
).not.toBeVisible();
|
|
|
|
await expect(
|
|
page.getByRole("button", { name: "Subscribe" }).first(),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test("When subscription is enteprise there is manage subscription link", async ({
|
|
page,
|
|
}) => {
|
|
await SubscriptionProfilePage.init(page);
|
|
await SubscriptionProfilePage.mockConfigFlags(page, ["enable-subscriptions"]);
|
|
|
|
await SubscriptionProfilePage.mockRPC(
|
|
page,
|
|
"get-profile",
|
|
"subscription/get-profile-enterprise-subscription.json",
|
|
);
|
|
|
|
const subscriptionProfilePage = new SubscriptionProfilePage(page);
|
|
|
|
await subscriptionProfilePage.goToSubscriptions();
|
|
|
|
await expect(
|
|
page.getByRole("button", { name: "Manage your subscription" }),
|
|
).toBeVisible();
|
|
|
|
await expect(
|
|
page.getByRole("heading", { name: "Other Penpot plans", level: 3 }),
|
|
).toBeVisible();
|
|
|
|
await expect(page.getByText("$0")).toBeVisible();
|
|
|
|
await expect(page.getByText("$7")).toBeVisible();
|
|
|
|
await expect(
|
|
page.getByRole("button", { name: "Try it free for 14 days" }).first(),
|
|
).not.toBeVisible();
|
|
|
|
await expect(
|
|
page.getByRole("button", { name: "Subscribe" }).first(),
|
|
).toBeVisible();
|
|
});
|
|
});
|