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
54 lines
1.2 KiB
TypeScript
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"]');
|
|
}
|
|
}
|