mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-05 23:02:10 +03:00
Route agy quota through the Antigravity usage implementation (closes #3230). Integrated into release/v3.8.11. Thanks @wilsonicdev.
83 lines
2.5 KiB
TypeScript
83 lines
2.5 KiB
TypeScript
import test, { mock } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
const usageModule = await import("../../open-sse/services/usage.ts");
|
|
const providerLimitUtils =
|
|
await import("../../src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.tsx");
|
|
|
|
test("agy is registered for the background usage fetcher", () => {
|
|
assert.ok(
|
|
usageModule.USAGE_FETCHER_PROVIDERS.includes("agy"),
|
|
"agy should be fetched by the generic quota refresher"
|
|
);
|
|
});
|
|
|
|
test("getUsageForProvider routes agy through the Antigravity usage implementation", async () => {
|
|
const fetchMock = mock.method(globalThis, "fetch", async () => ({
|
|
ok: true,
|
|
json: async () => ({
|
|
models: {
|
|
"gemini-3.5-flash-preview": {
|
|
quotaInfo: {
|
|
remainingFraction: 0.75,
|
|
resetTime: "2026-06-06T00:00:00Z",
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
}));
|
|
|
|
try {
|
|
const result = await usageModule.getUsageForProvider(
|
|
{
|
|
id: "agy-test-conn",
|
|
provider: "agy",
|
|
accessToken: "fake-token",
|
|
providerSpecificData: {},
|
|
},
|
|
{ forceRefresh: true }
|
|
);
|
|
|
|
assert.ok(result && typeof result === "object");
|
|
assert.notEqual(
|
|
(result as { message?: string }).message,
|
|
"Usage API not implemented for agy",
|
|
"agy must not fall through to the unsupported-provider branch"
|
|
);
|
|
assert.ok("quotas" in result, "agy should return quota data when upstream responds");
|
|
|
|
const quota = (result as { quotas: Record<string, any> }).quotas["gemini-3.5-flash-preview"];
|
|
assert.ok(quota, "should expose the Antigravity per-model quota for agy");
|
|
assert.equal(quota.remainingPercentage, 75);
|
|
} finally {
|
|
fetchMock.mock.restore();
|
|
}
|
|
});
|
|
|
|
test("parseQuotaData treats agy quota payloads like Antigravity", () => {
|
|
const parsed = providerLimitUtils.parseQuotaData("agy", {
|
|
quotas: {
|
|
credits: { remaining: 42 },
|
|
"gemini-3.5-flash-preview": {
|
|
used: 250,
|
|
total: 1000,
|
|
remainingPercentage: 75,
|
|
},
|
|
models: { used: 0, total: 0 },
|
|
},
|
|
});
|
|
|
|
assert.equal(
|
|
parsed.length,
|
|
2,
|
|
"credits and model quota should be rendered, models summary skipped"
|
|
);
|
|
const credits = parsed.find((quota: any) => quota.name === "credits");
|
|
assert.ok(credits, "credits quota should be rendered");
|
|
assert.equal(credits.isCredits, true);
|
|
|
|
const modelQuota = parsed.find((quota: any) => quota.name === "gemini-3.5-flash-preview");
|
|
assert.ok(modelQuota, "model quota should be rendered");
|
|
assert.equal(modelQuota.remainingPercentage, 75);
|
|
});
|