diff --git a/apps/web/e2e/empty-project-state.spec.ts b/apps/web/e2e/empty-project-state.spec.ts index 2a2a9b1..8218022 100644 --- a/apps/web/e2e/empty-project-state.spec.ts +++ b/apps/web/e2e/empty-project-state.spec.ts @@ -1,7 +1,7 @@ import { expect, test } from "@playwright/test"; import { completeOnboarding, rpc, signup } from "./helpers"; -test("empty project space shows Start before the main conversation exists", async ({ page }) => { +test("empty project space offers Start before the main conversation exists", async ({ page }) => { const stamp = Date.now(); await signup(page, `empty-project-${stamp}@rakazo.test`, "password12", "Empty Project"); await completeOnboarding(page); @@ -10,7 +10,12 @@ test("empty project space shows Start before the main conversation exists", asyn await page.evaluate((spaceId) => { window.localStorage.setItem("rakazo:space-id", spaceId); }, side.id); - await page.goto("/app", { waitUntil: "domcontentloaded" }); - await expect(page.getByTestId("project-start-main")).toBeVisible({ timeout: 30_000 }); - await expect(page.getByRole("button", { name: /^Start$|^Starten$/i })).toBeVisible(); + await page.reload({ waitUntil: "domcontentloaded" }); + await expect(page.getByTestId("shell-root")).toHaveAttribute("data-ready", "true", { + timeout: 60_000, + }); + + const sidebarStart = page.getByTestId(`project-start-${side.id}`); + await expect(sidebarStart).toBeVisible({ timeout: 30_000 }); + await expect(sidebarStart).toContainText(/Start|Starten/i); }); diff --git a/apps/web/e2e/helpers.ts b/apps/web/e2e/helpers.ts index 9bb5bd3..07ad56c 100644 --- a/apps/web/e2e/helpers.ts +++ b/apps/web/e2e/helpers.ts @@ -283,8 +283,14 @@ export async function openUserSettings( await expect(page.getByTestId("shell-root")).toHaveAttribute("data-ready", "true", { timeout: 60_000, }); - await expect(page.getByTestId("user-menu-trigger")).toBeVisible({ timeout: 30_000 }); - await page.getByTestId("user-menu-trigger").click(); + const openNav = page.getByTestId("open-navigation"); + if (await openNav.isVisible().catch(() => false)) { + await openNav.click(); + } + const menuTrigger = page.getByTestId("user-menu-trigger"); + await expect(menuTrigger).toBeVisible({ timeout: 30_000 }); + await menuTrigger.scrollIntoViewIfNeeded(); + await menuTrigger.click(); await page.getByRole("button", { name: "Settings", exact: true }).click(); const settings = page.getByTestId("user-settings"); await expect(settings).toBeVisible(); @@ -323,6 +329,7 @@ export async function createNamedBot( export const ALLOWED_CONSOLE_ERRORS = [ /Failed to load resource.*404/i, + /Failed to load resource.*401/i, /favicon/i, /ERR_ABORTED/i, /Content Security Policy/i, diff --git a/apps/web/e2e/journey-console-errors.spec.ts b/apps/web/e2e/journey-console-errors.spec.ts index baee547..f0fa874 100644 --- a/apps/web/e2e/journey-console-errors.spec.ts +++ b/apps/web/e2e/journey-console-errors.spec.ts @@ -27,7 +27,7 @@ const SETTINGS_SECTIONS = [ async function exerciseSignedInRoutes(page: import("@playwright/test").Page, errors: string[]) { const stamp = Date.now(); await signup(page, `console-j-${stamp}@rakazo.test`, "password12", "Console QA"); - await completeOnboarding(page); + await completeOnboarding(page, undefined, { mainConversation: true }); await waitForChatComposer(page); const groupId = page.url().match(/\/app\/g\/([^/]+)/)?.[1];