57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
|
|
|
|
vi.mock("../adapters/registry.js", () => ({
|
|
listServerAdapters: vi.fn(),
|
|
}));
|
|
|
|
import { listServerAdapters } from "../adapters/registry.js";
|
|
import { fetchAllQuotaWindows } from "../services/quota-windows.js";
|
|
|
|
describe("fetchAllQuotaWindows", () => {
|
|
beforeEach(() => {
|
|
vi.useFakeTimers();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
it("returns adapter results without waiting for a slower provider to finish forever", async () => {
|
|
vi.mocked(listServerAdapters).mockReturnValue([
|
|
{
|
|
type: "codex_local",
|
|
getQuotaWindows: vi.fn().mockResolvedValue({
|
|
provider: "openai",
|
|
source: "codex-rpc",
|
|
ok: true,
|
|
windows: [{ label: "5h limit", usedPercent: 2, resetsAt: null, valueLabel: null, detail: null }],
|
|
}),
|
|
},
|
|
{
|
|
type: "claude_local",
|
|
getQuotaWindows: vi.fn(() => new Promise(() => {})),
|
|
},
|
|
] as never);
|
|
|
|
const promise = fetchAllQuotaWindows();
|
|
await vi.advanceTimersByTimeAsync(20_001);
|
|
const results = await promise;
|
|
|
|
expect(results).toEqual([
|
|
{
|
|
provider: "openai",
|
|
source: "codex-rpc",
|
|
ok: true,
|
|
windows: [{ label: "5h limit", usedPercent: 2, resetsAt: null, valueLabel: null, detail: null }],
|
|
},
|
|
{
|
|
provider: "anthropic",
|
|
ok: false,
|
|
error: "quota polling timed out after 20s",
|
|
windows: [],
|
|
},
|
|
]);
|
|
});
|
|
});
|