import { expect, type Page, test } from "@playwright/test"; import { routePatchRpc, signup } from "./helpers"; async function forceNeedsModel(page: Page) { await routePatchRpc(page, "me", (json) => ({ ...json, needsModel: true })); } test("onboarding shows the look picker when a model is still required", async ({ page }) => { await forceNeedsModel(page); const stamp = Date.now(); await signup( page, `model-required-${stamp}@rakazo.test`, "password12", `Model required ${stamp}`, ); await page.waitForURL(/\/onboarding/, { timeout: 20_000 }); await expect(page.locator('[data-rakazo-surface="onboarding"]')).toHaveAttribute( "data-onboarding-step", /^(emoji|preferences|language|voice|integrations)$/, { timeout: 30_000 }, ); await expect(page.getByRole("heading", { name: /Design your Oo/i })).toBeVisible({ timeout: 20_000, }); await expect(page.getByRole("heading", { name: "Connect a model" })).toHaveCount(0); await expect(page.getByRole("combobox", { name: "Message" })).toHaveCount(0); }); for (const unavailable of ["empty", "failed"] as const) { test(`onboarding still opens when the model catalog is ${unavailable}`, async ({ page }) => { await forceNeedsModel(page); await page.route("**/rpc/models/list", (route) => unavailable === "failed" ? route.abort() : route.fulfill({ json: { json: [] } }), ); const stamp = Date.now(); await signup(page, `catalog-${unavailable}-${stamp}@rakazo.test`, "password12", "Model setup"); await page.waitForURL(/\/onboarding/, { timeout: 20_000 }); await expect(page.locator('[data-rakazo-surface="onboarding"]')).toHaveAttribute( "data-onboarding-step", /^(emoji|preferences|language|voice|integrations)$/, { timeout: 30_000 }, ); await expect(page.getByRole("heading", { name: /Design your Oo/i })).toBeVisible({ timeout: 20_000, }); await expect(page.getByRole("heading", { name: "Connect a model" })).toHaveCount(0); await expect(page.getByRole("combobox", { name: "Message" })).toHaveCount(0); }); }