import { expect, test } from "@playwright/test"; import { completeOnboarding, rpc, signup, unterhaltungenOnly } from "./helpers"; test("empty project shows Starten instead of a fallback bot", async ({ page }) => { const stamp = Date.now(); await signup(page, `empty-project-${stamp}@rakazo.test`, "password12", "Empty Project"); await completeOnboarding(page); await page.goto("/app"); await page.waitForURL(/\/app\/[^/]+$/); const projekte = page.locator(".sidebar-projekte"); await projekte.getByTestId("create-project-trigger").click(); const dialog = page.getByRole("dialog", { name: "New project" }); await dialog.getByLabel("Name").fill("Launch"); await dialog.getByRole("button", { name: "Create project", exact: true }).click(); await page.waitForURL(/\/app(?:\/)?$/); await expect(projekte.getByRole("button", { name: /^Chief/ })).toHaveCount(0); await expect(projekte.getByRole("button", { name: "Starten", exact: true })).toBeVisible(); await expect(page.getByTestId("project-start-main")).toBeVisible(); await page.getByTestId("project-start-main").click(); await expect(page.getByTestId("side-panel")).toHaveAttribute("data-panel", "create"); }); test("Starten in an onboarded project opens the group create flow", async ({ page }) => { const stamp = Date.now(); await signup(page, `project-start-${stamp}@rakazo.test`, "password12", "Project Start"); await completeOnboarding(page); const projekte = page.locator(".sidebar-projekte"); await projekte.getByTestId("create-project-trigger").click(); const dialog = page.getByRole("dialog", { name: "New project" }); await dialog.getByLabel("Name").fill("Website"); await dialog.getByRole("button", { name: "Create project", exact: true }).click(); await page.waitForURL(/\/app(?:\/)?$/); await page.goto("/onboarding"); await completeOnboarding(page); await expect(unterhaltungenOnly(page).getByRole("button", { name: /^Chief/ })).toHaveCount(1); await expect(projekte.getByRole("button", { name: /^Chief/ })).toHaveCount(0); await projekte.getByRole("button", { name: "Starten", exact: true }).click(); await expect(page.getByTestId("side-panel")).toHaveAttribute("data-panel", "create-group"); await expect(page.getByText("New group", { exact: true })).toBeVisible(); await expect( page.getByTestId("side-panel").getByRole("button", { name: /^Chief/ }), ).toBeVisible(); }); test("archiving the only bot keeps Starten visible in the project sidebar", async ({ page }) => { const stamp = Date.now(); await signup(page, `project-archive-${stamp}@rakazo.test`, "password12", "Project Archive"); await completeOnboarding(page); const projekte = page.locator(".sidebar-projekte"); await projekte.getByTestId("create-project-trigger").click(); const dialog = page.getByRole("dialog", { name: "New project" }); await dialog.getByLabel("Name").fill("Side"); await dialog.getByRole("button", { name: "Create project", exact: true }).click(); await page.waitForURL(/\/app(?:\/)?$/); await page.goto("/onboarding"); await completeOnboarding(page); const [chief] = await rpc>(page, "bots/list", {}); expect(chief?.name).toMatch(/^Chief/); await rpc(page, "bots/archive", { botId: chief!.id }); await page.goto("/app"); await page.waitForURL(/\/app(?:\/)?$/); await expect(projekte.getByRole("button", { name: "Starten", exact: true })).toBeVisible(); await expect(page.getByTestId("project-start-main")).toBeVisible(); });