seahaven-ap/e2e/invoice-filter-drawer.spec.ts

32 lines
1.4 KiB
TypeScript
Raw Normal View History

feat(web): add minimal Filter slide-over for invoice processing (AP-46) (#19) * feat(web): fix shell chrome, logo home, and live nav badges Refs: AP-42 * feat(web): add invoice grid lines and bold headers Refs: AP-44 * feat(web): support auto row height for multi-line invoice cells Refs: AP-44 * feat(web): expand mock invoice fields for Stampli column catalog Refs: AP-47 * feat(web): add Action and Vendor filters to invoice processing Refs: AP-43 * feat(web): add multi-line Stampli invoice cell renderers Refs: AP-47 * feat(web): align filter toolbar layout, field shapes, and tabs Refs: AP-43 * feat(web): add Columns slide-over with Stampli HTML defaults Refs: AP-45 * feat(web): add minimal Filter slide-over for invoice processing Refs: AP-46 * fix(web): address review feedback * fix(web): address review feedback * fix(web): address review feedback * ci: remove the pr policy caller * fix(web): keep mock catalog dates and updates in sync * fix(web): render the attention banner as text * fix(web): keep pay date editable on the approved grid * fix(web): make the attention banner non-interactive copy * fix(web): derive mock action labels from invoice status * fix(web): restore link-style attention banner copy * fix(ci): drop the unused catalog refresh index * fix(web): assert the vendor column by its grid field * fix(ci): format invoice mock helpers * fix(web): hide Payment Date when the drawer omits it * test(web): keep filters applied when the drawer closes * fix(web): count filtered rows on invoice tabs
2026-09-25 22:35:10 +00:00
import { expect, test } from "@playwright/test";
test.describe("Invoice Processing filter drawer (AP-46)", () => {
test("Filter drawer clears applied filters", async ({ page }) => {
await page.goto("/");
await page.getByTestId("vendor-filter").fill("Acme");
await page.getByTestId("filter-toggle").click();
const drawer = page.getByTestId("filter-drawer");
await expect(drawer).toBeVisible();
await expect(page.getByTestId("filter-drawer-vendor")).toContainText("Acme");
await page.getByTestId("filter-drawer-clear").click();
await expect(page.getByTestId("vendor-filter")).toHaveValue("");
await expect(page.getByTestId("filter-toggle").locator(".MuiBadge-badge")).toBeHidden();
});
test("closing the filter drawer leaves applied filters in place", async ({ page }) => {
await page.goto("/");
await page.getByTestId("vendor-filter").fill("Acme");
await page.getByTestId("filter-toggle").click();
await expect(page.getByTestId("filter-drawer")).toBeVisible();
await expect(page.getByTestId("filter-toggle").locator(".MuiBadge-badge")).toHaveText("1");
await page.getByRole("button", { name: "Close filters" }).evaluate((el: HTMLElement) => {
el.click();
});
await expect(page.getByTestId("filter-drawer")).toBeHidden();
await expect(page.getByTestId("vendor-filter")).toHaveValue("Acme");
await expect(page.getByTestId("filter-toggle").locator(".MuiBadge-badge")).toHaveText("1");
});
});