87 lines
2.5 KiB
TypeScript
87 lines
2.5 KiB
TypeScript
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(),
|
|
},
|
|
]);
|
|
});
|
|
});
|