import { expect, test } from "@playwright/test"; import { mockCoreApis } from "@e2e/fixtures/api-mocks"; import { paidVoiceMessageId } from "@e2e/fixtures/test-data"; import { clearBrowserState, expectInsufficientCreditsDialog, expectVipChatSubscriptionUrl, signInWithEmailAndOpenChat, } from "@e2e/fixtures/test-helpers"; test.beforeEach(async ({ baseURL, context, page }) => { await clearBrowserState(context, page, baseURL); await mockCoreApis(page, { paidVoiceInsufficientCreditsFlow: true, }); }); test("user sees insufficient credits when unlocking a paid voice message and can navigate to subscription", async ({ page, }) => { await signInWithEmailAndOpenChat(page); await expect( page.getByText("Elio has a locked voice message for you."), ).toBeVisible({ timeout: 10_000 }); const unlockButton = page.getByRole("button", { name: "Unlock voice message", }).last(); await expect(unlockButton).toBeVisible({ timeout: 10_000 }); const unlockRequestPromise = page.waitForRequest( "**/api/chat/unlock-private", ); await unlockButton.click(); const unlockRequest = await unlockRequestPromise; expect(unlockRequest.method()).toBe("POST"); expect(unlockRequest.postDataJSON()).toMatchObject({ messageId: paidVoiceMessageId, }); const insufficientCreditsDialog = await expectInsufficientCreditsDialog(page); await insufficientCreditsDialog .getByRole("button", { name: "Top up now" }) .click(); await expectVipChatSubscriptionUrl(page); });