Tests: type provider usage plugin mocks

This commit is contained in:
Peter Steinberger
2026-04-08 00:25:39 +01:00
parent f6bf8c7202
commit cda0c66258
2 changed files with 75 additions and 63 deletions

View File

@@ -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<typeof loadProviderUsageSummary>;
const googleGeminiCliProvider = "google-gemini-cli" as unknown as ProviderAuth["provider"];
const resolveProviderUsageSnapshotWithPluginMock = vi.fn(async () => null);
const resolveProviderUsageSnapshotWithPluginMock = vi.hoisted(() =>
vi.fn<typeof import("../plugins/provider-runtime.js").resolveProviderUsageSnapshotWithPlugin>(
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<ProviderUsageSnapshot | null> => {
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");
});

View File

@@ -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<typeof import("../plugins/provider-runtime.js").resolveProviderUsageSnapshotWithPlugin>(
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<ProviderUsageSnapshot | null> => {
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");
});