diff --git a/src/infra/provider-usage.load.test.ts b/src/infra/provider-usage.load.test.ts index 8ec0364c0f7..a9e3c5f5c87 100644 --- a/src/infra/provider-usage.load.test.ts +++ b/src/infra/provider-usage.load.test.ts @@ -7,10 +7,15 @@ import { type ProviderUsageAuth, usageNow, } from "./provider-usage.test-support.js"; +import type { ProviderUsageSnapshot } from "./provider-usage.types.js"; type ProviderAuth = ProviderUsageAuth; const googleGeminiCliProvider = "google-gemini-cli" as unknown as ProviderAuth["provider"]; -const resolveProviderUsageSnapshotWithPluginMock = vi.fn(async () => null); +const resolveProviderUsageSnapshotWithPluginMock = vi.hoisted(() => + vi.fn( + async () => null, + ), +); vi.mock("../config/config.js", () => ({ loadConfig: () => ({}), @@ -22,8 +27,7 @@ vi.mock("../plugins/provider-runtime.js", async () => { ); return { ...actual, - resolveProviderUsageSnapshotWithPlugin: (...args: unknown[]) => - resolveProviderUsageSnapshotWithPluginMock(...args), + resolveProviderUsageSnapshotWithPlugin: resolveProviderUsageSnapshotWithPluginMock, }; }); @@ -35,36 +39,38 @@ describe("provider-usage.load", () => { }); it("loads snapshots for copilot gemini codex and xiaomi", async () => { - resolveProviderUsageSnapshotWithPluginMock.mockImplementation(async ({ provider }) => { - switch (provider) { - case "github-copilot": - return { - provider, - displayName: "GitHub Copilot", - windows: [{ label: "Chat", usedPercent: 20 }], - }; - case googleGeminiCliProvider: - return { - provider, - displayName: "Gemini CLI", - windows: [{ label: "Pro", usedPercent: 40 }], - }; - case "openai-codex": - return { - provider, - displayName: "Codex", - windows: [{ label: "3h", usedPercent: 12 }], - }; - case "xiaomi": - return { - provider, - displayName: "Xiaomi", - windows: [], - }; - default: - return null; - } - }); + resolveProviderUsageSnapshotWithPluginMock.mockImplementation( + async ({ provider }): Promise => { + switch (provider) { + case "github-copilot": + return { + provider, + displayName: "GitHub Copilot", + windows: [{ label: "Chat", usedPercent: 20 }], + }; + case googleGeminiCliProvider: + return { + provider, + displayName: "Gemini CLI", + windows: [{ label: "Pro", usedPercent: 40 }], + }; + case "openai-codex": + return { + provider, + displayName: "Codex", + windows: [{ label: "3h", usedPercent: 12 }], + }; + case "xiaomi": + return { + provider, + displayName: "Xiaomi", + windows: [], + }; + default: + return null; + } + }, + ); const mockFetch = createProviderUsageFetch(async () => { throw new Error("legacy fetch should not run"); }); diff --git a/src/infra/provider-usage.test.ts b/src/infra/provider-usage.test.ts index dc1aaa2e9b0..8de19f39a5f 100644 --- a/src/infra/provider-usage.test.ts +++ b/src/infra/provider-usage.test.ts @@ -1,14 +1,19 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; +import { createProviderUsageFetch } from "../test-utils/provider-usage-fetch.js"; import { formatUsageReportLines, formatUsageSummaryLine, loadProviderUsageSummary, type UsageSummary, } from "./provider-usage.js"; -import { createProviderUsageFetch } from "../test-utils/provider-usage-fetch.js"; import { loadUsageWithAuth } from "./provider-usage.test-support.js"; +import type { ProviderUsageSnapshot } from "./provider-usage.types.js"; -const resolveProviderUsageSnapshotWithPluginMock = vi.fn(async () => null); +const resolveProviderUsageSnapshotWithPluginMock = vi.hoisted(() => + vi.fn( + async () => null, + ), +); vi.mock("../config/config.js", () => ({ loadConfig: () => ({}), @@ -20,8 +25,7 @@ vi.mock("../plugins/provider-runtime.js", async () => { ); return { ...actual, - resolveProviderUsageSnapshotWithPlugin: (...args: unknown[]) => - resolveProviderUsageSnapshotWithPluginMock(...args), + resolveProviderUsageSnapshotWithPlugin: resolveProviderUsageSnapshotWithPluginMock, }; }); @@ -91,32 +95,34 @@ describe("provider usage formatting", () => { describe("provider usage loading", () => { it("loads usage snapshots with injected auth", async () => { - resolveProviderUsageSnapshotWithPluginMock.mockImplementation(async ({ provider }) => { - switch (provider) { - case "anthropic": - return { - provider, - displayName: "Claude", - windows: [{ label: "5h", usedPercent: 20 }], - }; - case "minimax": - return { - provider, - displayName: "MiniMax", - windows: [{ label: "5h", usedPercent: 75 }], - plan: "Coding Plan", - }; - case "zai": - return { - provider, - displayName: "Z.ai", - windows: [{ label: "3h", usedPercent: 25 }], - plan: "Pro", - }; - default: - return null; - } - }); + resolveProviderUsageSnapshotWithPluginMock.mockImplementation( + async ({ provider }): Promise => { + switch (provider) { + case "anthropic": + return { + provider, + displayName: "Claude", + windows: [{ label: "5h", usedPercent: 20 }], + }; + case "minimax": + return { + provider, + displayName: "MiniMax", + windows: [{ label: "5h", usedPercent: 75 }], + plan: "Coding Plan", + }; + case "zai": + return { + provider, + displayName: "Z.ai", + windows: [{ label: "3h", usedPercent: 25 }], + plan: "Pro", + }; + default: + return null; + } + }, + ); const mockFetch = createProviderUsageFetch(async () => { throw new Error("legacy fetch should not run"); });