diff --git a/canvas/src/components/__tests__/AuthGate.test.tsx b/canvas/src/components/__tests__/AuthGate.test.tsx index 7f581769..065dc8b3 100644 --- a/canvas/src/components/__tests__/AuthGate.test.tsx +++ b/canvas/src/components/__tests__/AuthGate.test.tsx @@ -8,14 +8,18 @@ afterEach(() => { }); // ── Mocks (defined before dynamic import of component) ─────────────────────── -let mockFetchSession: ReturnType; -let mockRedirectToLogin: ReturnType; -let mockGetTenantSlug: ReturnType; +// Use a function type so TypeScript accepts the mock as callable in vi.mock factories. +// ReturnType resolves to Mock in newer Vitest +// type defs, which TS no longer considers directly callable. Casting to a plain +// function type avoids the TS2348 error while keeping full mock API (mockReturnValue etc.). +let mockFetchSession: ((...args: unknown[]) => unknown) & ReturnType; +let mockRedirectToLogin: ((...args: unknown[]) => unknown) & ReturnType; +let mockGetTenantSlug: ((...args: unknown[]) => unknown) & ReturnType; beforeEach(() => { - mockFetchSession = vi.fn(); - mockRedirectToLogin = vi.fn(); - mockGetTenantSlug = vi.fn(() => null); // default: non-SaaS (pass-through) + mockFetchSession = vi.fn() as typeof mockFetchSession; + mockRedirectToLogin = vi.fn() as typeof mockRedirectToLogin; + mockGetTenantSlug = vi.fn(() => null) as typeof mockGetTenantSlug; }); vi.mock("@/lib/auth", () => ({ diff --git a/canvas/src/components/__tests__/ProvisioningTimeout.test.tsx b/canvas/src/components/__tests__/ProvisioningTimeout.test.tsx index 432954aa..f1c5b150 100644 --- a/canvas/src/components/__tests__/ProvisioningTimeout.test.tsx +++ b/canvas/src/components/__tests__/ProvisioningTimeout.test.tsx @@ -28,6 +28,7 @@ function makeWS(overrides: Partial & { id: string }): WorkspaceDa y: 0, collapsed: false, runtime: "", + budget_limit: null, ...overrides, }; } diff --git a/canvas/src/store/__tests__/canvas-capabilities.test.ts b/canvas/src/store/__tests__/canvas-capabilities.test.ts index 5b128fa3..001d6e75 100644 --- a/canvas/src/store/__tests__/canvas-capabilities.test.ts +++ b/canvas/src/store/__tests__/canvas-capabilities.test.ts @@ -22,6 +22,7 @@ function makeNodeData(overrides: Partial = {}): WorkspaceNode currentTask: "", needsRestart: false, runtime: "", + budgetLimit: null, ...overrides, }; } diff --git a/canvas/src/store/__tests__/canvas-events-pan.test.ts b/canvas/src/store/__tests__/canvas-events-pan.test.ts index cca7c945..77c687fc 100644 --- a/canvas/src/store/__tests__/canvas-events-pan.test.ts +++ b/canvas/src/store/__tests__/canvas-events-pan.test.ts @@ -34,6 +34,7 @@ function makeNode( currentTask: "", needsRestart: false, runtime: "", + budgetLimit: null, ...overrides, }, }; diff --git a/canvas/src/store/__tests__/canvas-events.test.ts b/canvas/src/store/__tests__/canvas-events.test.ts index e945fd56..54be70e6 100644 --- a/canvas/src/store/__tests__/canvas-events.test.ts +++ b/canvas/src/store/__tests__/canvas-events.test.ts @@ -31,6 +31,7 @@ function makeNode( currentTask: "", needsRestart: false, runtime: "", + budgetLimit: null, ...overrides, }, }; diff --git a/canvas/src/store/__tests__/canvas-topology.test.ts b/canvas/src/store/__tests__/canvas-topology.test.ts index 8a2877d2..7ca1d950 100644 --- a/canvas/src/store/__tests__/canvas-topology.test.ts +++ b/canvas/src/store/__tests__/canvas-topology.test.ts @@ -24,6 +24,7 @@ function makeWS(overrides: Partial & { id: string }): WorkspaceDa y: 0, collapsed: false, runtime: "", + budget_limit: null, ...overrides, }; } diff --git a/canvas/src/store/__tests__/canvas.test.ts b/canvas/src/store/__tests__/canvas.test.ts index 6a5c2ce6..8e0675f1 100644 --- a/canvas/src/store/__tests__/canvas.test.ts +++ b/canvas/src/store/__tests__/canvas.test.ts @@ -27,6 +27,7 @@ function makeWS(overrides: Partial & { id: string }): WorkspaceDa y: 0, collapsed: false, runtime: "", + budget_limit: null, ...overrides, }; } @@ -172,6 +173,7 @@ describe("summarizeWorkspaceCapabilities", () => { currentTask: "Reviewing docs", needsRestart: false, runtime: "claude-code", + budgetLimit: null, }); expect(summary.runtime).toBe("claude-code"); @@ -197,6 +199,7 @@ describe("summarizeWorkspaceCapabilities", () => { currentTask: " ", needsRestart: false, runtime: "", + budgetLimit: null, }); expect(summary.runtime).toBeNull(); @@ -554,6 +557,7 @@ describe("context menu", () => { currentTask: "", needsRestart: false, runtime: "", + budgetLimit: null, }, };