import { expect, test } from "@playwright/test"; test.describe("invoice detail 3-pane shell", () => { test("dashboard row opens invoice detail with document, coding, and feeds", async ({ page }) => { await page.goto("/"); await page.getByTestId("grid-pending").locator(".MuiDataGrid-row").first().click(); await expect(page).toHaveURL(/\/invoices\/inv-/); await expect(page.getByTestId("invoice-detail-title")).toBeVisible(); await expect(page.getByTestId("invoice-document-viewer")).toBeVisible(); await expect(page.getByTestId("invoice-coding-pane")).toBeVisible(); await expect(page.getByTestId("invoice-feed-pane")).toBeVisible(); await expect(page.getByTestId("invoice-action-submit")).toBeVisible(); await expect(page.getByTestId("invoice-action-approve")).toHaveCount(0); const memo = page.getByTestId("invoice-header-memo").locator("textarea").first(); await memo.fill("Updated from e2e"); await page.getByTestId("invoice-save-coding").click(); await expect(page.getByTestId("invoice-detail-snackbar")).toContainText("Coding saved"); await expect(page.getByTestId("invoice-comments-feed")).toBeVisible(); await page.getByTestId("invoice-tab-activity").click(); await expect(page.getByTestId("invoice-activity-feed")).toBeVisible(); }); test("mock user switcher changes role-aware action bar", async ({ page }) => { await page.goto("/invoices/inv-2"); await expect(page.getByTestId("invoice-action-submit")).toBeVisible(); await page.getByTestId("mock-user-switcher").click(); await page.getByRole("option", { name: /Jordan Lee \(approver\)/ }).click(); await expect(page.getByTestId("invoice-action-approve")).toBeVisible(); await expect(page.getByTestId("invoice-action-reject")).toBeVisible(); await expect(page.getByTestId("invoice-action-submit")).toHaveCount(0); }); test("approvals inbox row opens linked invoice detail", async ({ page }) => { await page.goto("/approvals"); await page.getByTestId("approvals-inbox-grid").locator(".MuiDataGrid-row").first().click(); await expect(page).toHaveURL(/\/invoices\/inv-/); await expect(page.getByTestId("invoice-document-viewer")).toBeVisible(); }); test("unknown invoice id shows not-found warning", async ({ page }) => { await page.goto("/invoices/missing-invoice"); await expect(page.getByTestId("invoice-not-found")).toBeVisible(); await expect(page.getByTestId("invoice-document-viewer")).toHaveCount(0); }); });