test(dashboard): restore the missing api mock export in ResearchView tests (#3239)

## What

Partial fix for **red main**. Test-only.

`ResearchView.test.tsx` has **4 failing tests on main**; 2 fail with:

```
No "fetchBoardWorkflows" export is defined on the "../../api" mock
```

The `vi.mock("../../api")` factory **replaces the whole module**, so
every import anywhere in the rendered tree must appear in it.
`fetchBoardWorkflows` reached this file *indirectly* — the task modals
ResearchView opens import it — so adding that export to product code
broke four cases that have nothing to do with board workflows.

Stubbed with the flag-OFF payload the server sends when multi-lane
boards are disabled, which is the shape these cases already assume.

## Measured

```
before: Tests 4 failed | 23 passed (27)
after:  Tests 2 failed | 25 passed (27)
lint clean; fnxc-future-dates: none added
```

## The remaining 2 are a different cause and are NOT fixed here

They fail with `Number of calls: 0` — the enrich-task and create-task
actions never fire. That is a UI-wiring question, not mock completeness.

**I checked that my stub is not responsible**, rather than assuming:
re-running with `flagEnabled: true` and a populated workflow list
produces the *same* 2 failures, so the payload shape does not gate those
affordances. Left for whoever owns that surface.

## How this was found

While establishing a clean baseline for the resolver audit. That sweep
also reported `lazy-loaded-views-docs.test.ts` red — **it now passes**,
fixed by another worker between my measurement and this PR, which is why
the count here is 3 files rather than the 4 I reported in #3236.

Still red on main, untouched by this PR:
- `src/__tests__/planning-browser-e2e.test.ts` — `expected {
totalButtons: 1, …(7) } to match object { totalButtons: 1, …(6) }`; an
assertion shape gained a field.
- `src/__tests__/register-model-routes-kimi-k3-supplemental.test.ts` —
`Test timed out in 15000ms`. Per the standing rule a timeout with no
corresponding bug in the change is a **quarantine candidate**, not
something to appease with a longer timeout; I am not quarantining it
unilaterally since it is not my subsystem, but flagging it as the shape
that rule describes.
This commit is contained in:
gsxdsm
2026-07-31 13:33:51 -07:00
committed by GitHub
parent 05f09c29f8
commit 0698ce6f9c

View File

@@ -29,6 +29,24 @@ vi.mock("../../api", () => ({
fetchSettings: (...args: unknown[]) => mockFetchSettings(...args),
fetchAuthStatus: (...args: unknown[]) => mockFetchAuthStatus(...args),
fetchTasks: (...args: unknown[]) => mockFetchTasks(...args),
/*
FNXC:ResearchViewTests 2026-07-31-20:24:
This factory REPLACES the whole `../../api` module, so every import anywhere in the rendered tree
must appear here or it resolves to undefined. `fetchBoardWorkflows` reached this file indirectly —
the task modals ResearchView opens import it — and its absence failed four cases with
`No "fetchBoardWorkflows" export is defined on the "../../api" mock`, none of which are about board
workflows.
Returns the flag-OFF payload the server sends when multi-lane boards are disabled, which is the
shape these cases already assume: no board metadata, legacy rendering, and the consumers'
`.then()` handlers take their empty-state path rather than a fabricated workflow list.
*/
fetchBoardWorkflows: vi.fn().mockResolvedValue({
flagEnabled: false,
defaultWorkflowId: "",
workflows: [],
taskWorkflowIds: {},
}),
}));
vi.mock("lucide-react", async (importOriginal) => {