From aabc32c9662ccc290b503c4c37997f9bc71bdc03 Mon Sep 17 00:00:00 2001 From: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Date: Sat, 13 Jun 2026 06:20:14 +0500 Subject: [PATCH] test(e2e): lookup quick-filter coverage (CRM parity) Covers the record-picker dropdown path: the Task List view's project filter (master-detail lookup) opens a searchable record list, picking a record narrows the grid and persists as uf_project. This is the capability hotcrm's account workbench (owner: user lookup) depends on. Skips gracefully when the running showcase metadata predates the project lookup filter example (framework companion PR). Co-Authored-By: Claude Fable 5 --- e2e/live/user-filters.spec.ts | 40 +++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/e2e/live/user-filters.spec.ts b/e2e/live/user-filters.spec.ts index ab649357f..be4baffce 100644 --- a/e2e/live/user-filters.spec.ts +++ b/e2e/live/user-filters.spec.ts @@ -103,3 +103,43 @@ test.describe('ADR-0047 interface mode — Task Workbench', () => { await expect(page.getByTestId('record-count-bar')).toContainText(/^2 /, { timeout: 15000 }); }); }); + +test.describe('ADR-0047 lookup quick filter (CRM parity)', () => { + // The Task List view exposes `project` (a master-detail lookup) as a + // quick filter — the record-picker dropdown path hotcrm's account + // workbench (owner: user lookup) depends on. Requires the showcase + // metadata from framework feat/adr-0047-lookup-filter-example or later. + test('lookup field renders a record picker and filters by reference', async ({ page }) => { + await page.goto('/apps/showcase_app/showcase_task/view/showcase_task.tabular'); + + // Wait for the filter bar to render before probing for the overflow. + await expect(page.getByTestId('filter-badge-status')).toBeVisible({ timeout: 15000 }); + + const projectBadge = page.getByTestId('filter-badge-project'); + // maxVisible folds the 4th field into the "More" overflow when present. + if (!(await projectBadge.isVisible().catch(() => false))) { + const more = page.getByTestId('user-filters').getByRole('button', { name: /More|更多/ }); + if (!(await more.isVisible().catch(() => false))) { + test.skip(true, 'showcase metadata without the project lookup filter — skipping'); + } + await more.click(); + } + await projectBadge.click(); + + // The lookup picker renders with a search box and record options. + const picker = page.getByTestId('filter-lookup-project'); + await expect(picker).toBeVisible(); + // The picker is a trigger button that opens the record search list; + // records render as multi-select checkboxes. + await picker.getByRole('button', { name: /Search|搜索/ }).click(); + const option = page.getByRole('checkbox', { name: 'Website Relaunch' }); + await expect(option).toBeVisible(); + + // Picking a record narrows the list and persists as a uf_* param. + await option.click(); + await expect(page).toHaveURL(/uf_project=/); + await expect(page.getByTestId('record-count-bar')).toContainText(/\d+/, { timeout: 15000 }); + // The badge reflects one active selection. + await expect(page.getByTestId('filter-badge-project')).toContainText('1'); + }); +});