Fork Horse repository, listed by its owner. Publisher snapshot.

packages/forkhorse-dashboard/test/freshness-fixtures.ts

Snapshot at 34e3175

Containing directory

2,532 bytes · typescriptView raw
1import type { DashboardTransport } from "../src/contracts.ts";
2import { ApiError } from "../src/transport.ts";
3
4/** Client-only capture fixtures over existing fixture routes. No production endpoints or account access. */
5export const freshnessScenarios = ["freshness-refreshing", "freshness-failed", "freshness-slow-review", "freshness-review-error"];
6export function freshnessFixtureTransport(transport: DashboardTransport, scenario: string): DashboardTransport {
7  if (!freshnessScenarios.includes(scenario)) return transport;
8  const project = "review-current";
9  let stateReads = 0;
10  let detailReads = 0;
11  return {
12    ...transport,
13    async getState() {
14      if (++stateReads === 2) {
15        if (scenario === "freshness-failed") throw new ApiError(502, "Fixture read failed.");
16        if (scenario === "freshness-refreshing") await new Promise((resolve) => setTimeout(resolve, 30_000));
17      }
18      const state = await transport.getState(project);
19      return { ...state, project: { ...state.project, id: scenario } };
20    },
21    getActivity: (_id, after) => transport.getActivity(project, after),
22    approve: (_id, review) => transport.approve(project, review),
23    promote: (_id, review) => transport.promote(project, review),
24    returnReview: transport.returnReview ? (_id, review, reason) => transport.returnReview!(project, review, reason) : undefined,
25    resolveBlocker: transport.resolveBlocker ? (_id, blocker, reason) => transport.resolveBlocker!(project, blocker, reason) : undefined,
26    setSettings: transport.setSettings ? (_id, settings) => transport.setSettings!(project, settings) : undefined,
27    getReceipt: transport.getReceipt ? (_id, review) => transport.getReceipt!(project, review) : undefined,
28    archivePacket: transport.archivePacket ? (_id, packet) => transport.archivePacket!(project, packet) : undefined,
29    unarchivePacket: transport.unarchivePacket ? (_id, packet) => transport.unarchivePacket!(project, packet) : undefined,
30    getReview: transport.getReview ? async (_id, review) => {
31      if (++detailReads === 1) {
32        if (scenario === "freshness-slow-review") await new Promise((resolve) => setTimeout(resolve, 15_000));
33        if (scenario === "freshness-review-error") throw new ApiError(502, "Fixture raw body must stay hidden.", "11111111-2222-4333-8444-555555555555");
34      }
35      return transport.getReview!(project, review);
36    } : undefined,
37    getDiff: transport.getDiff ? (_id, review, path) => transport.getDiff!(project, review, path) : undefined,
38  };
39}
40