seahaven-ap/e2e/invoice-detail.spec.ts
Adam Moussa 5c82936e50
feat(frontend): add invoice detail 3-pane shell (AP-6) (#9)
Prove invoice coding and collaboration layout on mocks with a fixture PDF viewer, editable header/lines, Comments/Activity feeds, and role-aware action stubs via mock session switching.
2026-08-10 22:22:22 +00:00

52 lines
2.5 KiB
TypeScript

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);
});
});