Files
myeasycms-v2/apps/e2e/tests/utils/billing.po.ts
Giancarlo Buomprisco 7ebff31475 Next.js Supabase V3 (#463)
Version 3 of the kit:
- Radix UI replaced with Base UI (using the Shadcn UI patterns)
- next-intl replaces react-i18next
- enhanceAction deprecated; usage moved to next-safe-action
- main layout now wrapped with [locale] path segment
- Teams only mode
- Layout updates
- Zod v4
- Next.js 16.2
- Typescript 6
- All other dependencies updated
- Removed deprecated Edge CSRF
- Dynamic Github Action runner
2026-03-24 13:40:38 +08:00

54 lines
1.2 KiB
TypeScript

import { Page, expect } from '@playwright/test';
import { StripePageObject } from './stripe.po';
export class BillingPageObject {
public readonly stripe: StripePageObject;
constructor(private readonly page: Page) {
this.stripe = new StripePageObject(page);
}
plans() {
return this.page.locator('[data-test-plan]');
}
async selectPlan(index = 0) {
await expect(async () => {
const plans = this.plans();
const plan = plans.nth(index);
await expect(plan).toBeVisible();
await this.page.waitForTimeout(500);
await plan.click();
}).toPass();
}
manageBillingButton() {
return this.page.locator('[data-test="manage-billing-redirect-button"]');
}
successStatus() {
return this.page.locator('[data-test="payment-return-success"]');
}
async returnToBilling() {
// wait a bit for the webhook to be processed
await this.page.waitForTimeout(1000);
await this.page.locator('[data-test="checkout-success-back-link"]').click();
await this.page.waitForURL('**/billing');
}
proceedToCheckout() {
return this.page.click('[data-test="checkout-submit-button"]');
}
getStatus() {
return this.page.locator('[data-test="current-plan-card-status-badge"]');
}
}