Files
openworker/surfaces/gui/e2e/sidebar-account.spec.ts
T
Rohit C Prasad ff78ea9f35 Chrome cleanup: menu dedup, implicit cloud label, Context optimization section
Account menu drops Automations (sidebar nav has it) and the OpenWorker Cloud suffix.
Token savings + compaction move from Models to a new Settings - Context optimization tab.
Coworkers page loses its duplicate intro line.
2026-08-20 16:33:36 -07:00

63 lines
3.4 KiB
TypeScript

// The sidebar bottom is exactly ONE row — the account anchor (UX-DECISIONS §26).
// Contract under test: no "Settings & more", no standalone Inbox/Connectors rows; the
// inbox chip is state-driven (accent + count when pending) and clicks STRAIGHT to Inbox
// while the rest of the row opens the account menu, which always lists Inbox + Connectors.
import { expect } from "@playwright/test";
import { test } from "./fixtures";
test("the bottom is one account row — the old rows are gone", async ({ page }) => {
await page.goto("/");
await expect(page.getByTestId("account-row")).toBeVisible();
await expect(page.getByRole("button", { name: /Settings & more/i })).toHaveCount(0);
// No standalone sidebar Inbox row: outside the menu, "Inbox" exists only as the chip.
await expect(page.locator(".sidebar").getByRole("button", { name: "Inbox", exact: true })).toHaveCount(0);
});
test("pending items: the chip carries the count and goes straight to Inbox — no menu", async ({
page,
}) => {
await page.goto("/");
const chip = page.getByTestId("inbox-chip");
await expect(chip).toContainText(/\d/); // fixtures seed pending attention → accent count
await chip.click();
await expect(page.getByTestId("account-menu")).toHaveCount(0); // the chip never opens the menu
await expect(page.getByText("Approve: run_shell")).toBeVisible(); // Inbox opened directly
});
test("the account menu: Inbox + Connectors always listed; Settings carries the shortcut hint", async ({
page,
}) => {
await page.goto("/");
await page.getByTestId("account-row").click();
const menu = page.getByTestId("account-menu");
await expect(menu.getByRole("button", { name: "Inbox" })).toBeVisible();
await expect(menu.getByRole("button", { name: "Connectors", exact: true })).toBeVisible();
await expect(menu.getByRole("button", { name: /Settings/ })).toContainText("⌘");
// Automations left the menu (owner 2026-08-21) — the sidebar nav row carries it.
await expect(menu.getByRole("button", { name: "Automations", exact: true })).toHaveCount(0);
await expect(menu.getByRole("button", { name: "Activity", exact: true })).toBeVisible();
});
test("Activity in the menu is the audit log; Unrouted lives under Inbox ▸ Configure", async ({
page,
}) => {
await page.goto("/");
await page.getByTestId("account-row").click();
await page.getByTestId("account-menu").getByRole("button", { name: "Activity", exact: true }).click();
await expect(page.getByRole("heading", { name: "Activity" })).toBeVisible();
// §28: Messaging routing left the Connectors sub-nav entirely (Connectors · MCP only)…
await page.getByTestId("account-row").click();
await page.getByTestId("account-menu").getByRole("button", { name: "Connectors", exact: true }).click();
await expect(page.getByRole("button", { name: "MCP servers" })).toBeVisible();
await expect(page.getByRole("button", { name: /Messaging routing/ })).toHaveCount(0);
// The old fourth sub-nav tab is gone — exactly one page is named Activity now.
await expect(page.getByRole("button", { name: "Activity", exact: true })).toHaveCount(0);
// …and Unrouted rides the Inbox's Configure tab.
await page.getByTestId("account-row").click();
await page.getByTestId("account-menu").getByRole("button", { name: "Inbox" }).click();
await page.getByTestId("inbox-tab-configure").click();
await expect(page.getByTestId("unrouted-section")).toBeVisible();
});