mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 12:21:35 +00:00
refactor: dedupe provider usage fetch logic and tests
This commit is contained in:
86
src/infra/provider-usage.fetch.zai.test.ts
Normal file
86
src/infra/provider-usage.fetch.zai.test.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { createProviderUsageFetch, makeResponse } from "../test-utils/provider-usage-fetch.js";
|
||||
import { fetchZaiUsage } from "./provider-usage.fetch.zai.js";
|
||||
|
||||
describe("fetchZaiUsage", () => {
|
||||
it("returns HTTP errors for failed requests", async () => {
|
||||
const mockFetch = createProviderUsageFetch(async () => makeResponse(503, "unavailable"));
|
||||
const result = await fetchZaiUsage("key", 5000, mockFetch);
|
||||
|
||||
expect(result.error).toBe("HTTP 503");
|
||||
expect(result.windows).toHaveLength(0);
|
||||
});
|
||||
|
||||
it("returns API message errors for unsuccessful payloads", async () => {
|
||||
const mockFetch = createProviderUsageFetch(async () =>
|
||||
makeResponse(200, {
|
||||
success: false,
|
||||
code: 500,
|
||||
msg: "quota endpoint disabled",
|
||||
}),
|
||||
);
|
||||
|
||||
const result = await fetchZaiUsage("key", 5000, mockFetch);
|
||||
expect(result.error).toBe("quota endpoint disabled");
|
||||
expect(result.windows).toHaveLength(0);
|
||||
});
|
||||
|
||||
it("parses token and monthly windows with reset times", async () => {
|
||||
const tokenReset = "2026-01-08T00:00:00Z";
|
||||
const minuteReset = "2026-01-08T00:30:00Z";
|
||||
const monthlyReset = "2026-01-31T12:00:00Z";
|
||||
const mockFetch = createProviderUsageFetch(async () =>
|
||||
makeResponse(200, {
|
||||
success: true,
|
||||
code: 200,
|
||||
data: {
|
||||
planName: "Team",
|
||||
limits: [
|
||||
{
|
||||
type: "TOKENS_LIMIT",
|
||||
percentage: 32,
|
||||
unit: 3,
|
||||
number: 6,
|
||||
nextResetTime: tokenReset,
|
||||
},
|
||||
{
|
||||
type: "TOKENS_LIMIT",
|
||||
percentage: 8,
|
||||
unit: 5,
|
||||
number: 15,
|
||||
nextResetTime: minuteReset,
|
||||
},
|
||||
{
|
||||
type: "TIME_LIMIT",
|
||||
percentage: 12.5,
|
||||
unit: 1,
|
||||
number: 30,
|
||||
nextResetTime: monthlyReset,
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
const result = await fetchZaiUsage("key", 5000, mockFetch);
|
||||
|
||||
expect(result.plan).toBe("Team");
|
||||
expect(result.windows).toEqual([
|
||||
{
|
||||
label: "Tokens (6h)",
|
||||
usedPercent: 32,
|
||||
resetAt: new Date(tokenReset).getTime(),
|
||||
},
|
||||
{
|
||||
label: "Tokens (15m)",
|
||||
usedPercent: 8,
|
||||
resetAt: new Date(minuteReset).getTime(),
|
||||
},
|
||||
{
|
||||
label: "Monthly",
|
||||
usedPercent: 12.5,
|
||||
resetAt: new Date(monthlyReset).getTime(),
|
||||
},
|
||||
]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user