mirror of
https://github.com/Sea-Haven-Industries/seahaven-ap.git
synced 2026-09-30 05:43:18 +00:00
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.
52 lines
2.5 KiB
TypeScript
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);
|
|
});
|
|
});
|