mirror of
https://github.com/Nezumi-2711/9router.git
synced 2026-09-22 20:00:47 +00:00
143 lines
4.4 KiB
JavaScript
143 lines
4.4 KiB
JavaScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
vi.mock("../../open-sse/utils/proxyFetch.js", () => ({
|
|
proxyAwareFetch: vi.fn(),
|
|
}));
|
|
|
|
import { proxyAwareFetch } from "../../open-sse/utils/proxyFetch.js";
|
|
import { getUsageForProvider } from "../../open-sse/services/usage.js";
|
|
import { parseOrbitUsage } from "../../open-sse/services/usage/orbit.js";
|
|
import { PROVIDERS } from "../../open-sse/providers/index.js";
|
|
import { USAGE_APIKEY_PROVIDERS, USAGE_SUPPORTED_PROVIDERS } from "../../src/shared/constants/providers.js";
|
|
import { parseQuotaData } from "../../src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.js";
|
|
|
|
const ORBIT_USAGE_RESPONSE = {
|
|
success: true,
|
|
data: {
|
|
plan: "starter",
|
|
usagePercent: 100,
|
|
isExhausted: true,
|
|
resetPeriod: "monthly",
|
|
periodEnd: null,
|
|
tokensUsed: 57288213,
|
|
tokenLimit: 50000000,
|
|
tokensRemaining: 0,
|
|
daily: null,
|
|
credit: {
|
|
balanceMicroUsd: 397891136,
|
|
balanceUsd: 397.891136,
|
|
balanceUsdFormatted: "$397.89",
|
|
grantedMicroUsd: 500000000,
|
|
grantedUsd: 500,
|
|
spentMicroUsd: 102108864,
|
|
spentUsd: 102.108864,
|
|
currency: "USD",
|
|
source: "ledger",
|
|
},
|
|
},
|
|
};
|
|
|
|
function jsonResponse(body, status = 200) {
|
|
return new Response(JSON.stringify(body), {
|
|
status,
|
|
headers: { "Content-Type": "application/json" },
|
|
});
|
|
}
|
|
|
|
describe("Orbit Provider usage registry", () => {
|
|
it("exposes its usage endpoint and API-key eligibility", () => {
|
|
expect(PROVIDERS["orbit-provider"].usage?.url).toBe(
|
|
"https://api.orbit-provider.com/v1/usage",
|
|
);
|
|
expect(USAGE_SUPPORTED_PROVIDERS).toContain("orbit-provider");
|
|
expect(USAGE_APIKEY_PROVIDERS).toContain("orbit-provider");
|
|
});
|
|
});
|
|
|
|
describe("parseOrbitUsage", () => {
|
|
it("normalizes exhausted monthly tokens and USD credit", () => {
|
|
const usage = parseOrbitUsage(ORBIT_USAGE_RESPONSE);
|
|
|
|
expect(usage).toMatchObject({
|
|
plan: "starter",
|
|
isExhausted: true,
|
|
resetPeriod: "monthly",
|
|
});
|
|
expect(usage.quotas["Tokens (monthly)"]).toMatchObject({
|
|
used: 57288213,
|
|
total: 50000000,
|
|
remaining: 0,
|
|
remainingPercentage: 0,
|
|
resetAt: null,
|
|
});
|
|
expect(usage.quotas["Credit (USD)"]).toMatchObject({
|
|
used: 102.108864,
|
|
total: 500,
|
|
remaining: 397.891136,
|
|
});
|
|
expect(usage.quotas["Credit (USD)"].remainingPercentage).toBeCloseTo(79.5782272);
|
|
});
|
|
|
|
it("rejects an unsuccessful or malformed payload", () => {
|
|
expect(parseOrbitUsage({ success: false })).toEqual({
|
|
message: "Orbit Provider usage response was invalid.",
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("getUsageForProvider(orbit-provider)", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it("fetches Orbit usage with the connection API key", async () => {
|
|
proxyAwareFetch.mockResolvedValueOnce(jsonResponse(ORBIT_USAGE_RESPONSE));
|
|
const proxyOptions = { connectionProxyEnabled: true };
|
|
|
|
const usage = await getUsageForProvider({
|
|
provider: "orbit-provider",
|
|
apiKey: "test-orbit-key",
|
|
}, proxyOptions);
|
|
|
|
expect(usage.plan).toBe("starter");
|
|
expect(usage.quotas["Tokens (monthly)"].remainingPercentage).toBe(0);
|
|
expect(proxyAwareFetch).toHaveBeenCalledWith(
|
|
"https://api.orbit-provider.com/v1/usage",
|
|
expect.objectContaining({
|
|
method: "GET",
|
|
headers: {
|
|
Authorization: "Bearer test-orbit-key",
|
|
Accept: "application/json",
|
|
},
|
|
}),
|
|
proxyOptions,
|
|
);
|
|
});
|
|
|
|
it("returns an authentication message for an invalid API key", async () => {
|
|
proxyAwareFetch.mockResolvedValueOnce(jsonResponse({ error: "unauthorized" }, 401));
|
|
|
|
const usage = await getUsageForProvider({
|
|
provider: "orbit-provider",
|
|
apiKey: "invalid",
|
|
});
|
|
|
|
expect(usage.message).toMatch(/invalid or expired/i);
|
|
});
|
|
});
|
|
|
|
describe("parseQuotaData(orbit-provider)", () => {
|
|
it("renders only the credit progress bar", () => {
|
|
const usage = parseOrbitUsage(ORBIT_USAGE_RESPONSE);
|
|
const rows = parseQuotaData("orbit-provider", usage);
|
|
|
|
expect(rows).toHaveLength(1);
|
|
expect(rows[0]).toMatchObject({
|
|
name: "Credit (USD)",
|
|
used: 102.108864,
|
|
total: 500,
|
|
});
|
|
expect(rows[0].remainingPercentage).toBeCloseTo(79.5782272);
|
|
});
|
|
});
|