Files
openworker/surfaces/gui/e2e/inbox.spec.ts
T

78 lines
3.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { test, expect } from "./fixtures";
// The Inbox (owner testing pass, 2026-07-03; §28 two-tab split 2026-07-12): Pending holds the
// kind chips (All/Approvals/Questions), persona filter chips (only with >1 persona holding
// items), and resolve-removes-card. Routing moved to the Configure tab (the former Connectors ▸
// Messaging routing page) — Pending's status line is read-only and links there; the old inline
// editor (the mirror setting's SECOND editor) is gone.
async function openInbox(page: import("@playwright/test").Page) {
await page.goto("/");
// §26: the fixtures seed pending items, so the account row's inbox chip is unlocked and
// pending — clicking it goes STRAIGHT to Inbox (the menu is the row's target, not the chip's).
await page.getByTestId("inbox-chip").click();
await expect(page.getByText("Approve: run_shell")).toBeVisible();
}
test("kind + persona filters narrow the pending list", async ({ page }) => {
await openInbox(page);
const question = "Which environment should I restart?";
await expect(page.getByText(question)).toBeVisible();
const filters = page.getByTestId("inbox-filters");
await filters.getByRole("button", { name: "Approvals" }).click();
await expect(page.getByText(question)).not.toBeVisible();
await expect(page.getByText("Approve: run_shell")).toBeVisible();
await filters.getByRole("button", { name: "Questions" }).click();
await expect(page.getByText("Approve: run_shell")).not.toBeVisible();
await expect(page.getByText(question)).toBeVisible();
// Persona chips render because two personas hold items; filtering to Ops hides the cowork item.
await filters.getByRole("button", { name: "All", exact: true }).click();
await filters.getByRole("button", { name: "Ops", exact: true }).click();
await expect(page.getByText("Approve: run_shell")).not.toBeVisible();
await expect(page.getByText(question)).toBeVisible();
});
test("resolving an approval removes its card; question options resolve on click", async ({ page }) => {
await openInbox(page);
await page.getByRole("button", { name: "Approve", exact: true }).click();
await expect(page.getByText("Approve: run_shell")).not.toBeVisible();
// Single-select question: clicking an option resolves immediately.
await page.getByRole("button", { name: "staging", exact: true }).click();
await expect(page.getByText("Which environment should I restart?")).not.toBeVisible();
await expect(page.getByText("Nothing pending.")).toBeVisible();
});
test("routing: Configure tab binds the mirror channel; Pending's status line follows", async ({
page,
}) => {
await openInbox(page);
const line = page.getByTestId("inbox-routing");
await expect(line).toContainText("Delivered here only");
// The status line is read-only — its Configure link lands on the Configure tab, which
// holds the ONE editor (the old inline editor was a duplicate of this card).
await page.getByTestId("inbox-route-configure").click();
const mirror = page.getByTestId("inbox-mirror-card");
await expect(mirror).toContainText("in-app Inbox only");
await mirror.getByPlaceholder("slack:C0123 or channel link").fill("slack:T1DL/C0777");
await mirror.getByRole("button", { name: "Set", exact: true }).click();
await expect(mirror).toContainText("slack:T1DL/C0777");
// Back on Pending, the line reflects the new target immediately.
await page.getByTestId("inbox-tab-pending").click();
await expect(line).toContainText("slack:T1DL/C0777");
await expect(line).toContainText("replies there resolve items here");
// Clearing (also on Configure) returns Pending to local-only delivery.
await page.getByTestId("inbox-tab-configure").click();
await mirror.getByRole("button", { name: "clear" }).click();
await expect(mirror).toContainText("in-app Inbox only");
await page.getByTestId("inbox-tab-pending").click();
await expect(line).toContainText("Delivered here only");
});