115 lines
3.7 KiB
TypeScript
115 lines
3.7 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
const auth = await import("../../src/sse/services/auth.ts");
|
|
const quotaCache = await import("../../src/domain/quotaCache.ts");
|
|
|
|
function buildConnection(id, providerSpecificData = {}) {
|
|
return {
|
|
id,
|
|
providerSpecificData,
|
|
};
|
|
}
|
|
|
|
test("resolveQuotaLimitPolicy keeps codex legacy defaults when generic policy is missing", () => {
|
|
const policy = auth.resolveQuotaLimitPolicy("codex", {
|
|
codexLimitPolicy: { use5h: true, useWeekly: false },
|
|
});
|
|
|
|
assert.equal(policy.enabled, true);
|
|
assert.deepEqual(policy.windows, ["session"]);
|
|
assert.equal(policy.thresholdPercent, 99);
|
|
});
|
|
|
|
test("resolveQuotaLimitPolicy enforces codex weekly window when weekly toggle is enabled", () => {
|
|
const policy = auth.resolveQuotaLimitPolicy("codex", {
|
|
codexLimitPolicy: { use5h: true, useWeekly: true },
|
|
limitPolicy: { enabled: true, windows: ["session"] },
|
|
});
|
|
|
|
assert.equal(policy.enabled, true);
|
|
assert.deepEqual(policy.windows.sort(), ["session", "weekly"]);
|
|
});
|
|
|
|
test("resolveQuotaLimitPolicy removes codex weekly window when weekly toggle is disabled", () => {
|
|
const policy = auth.resolveQuotaLimitPolicy("codex", {
|
|
codexLimitPolicy: { use5h: true, useWeekly: false },
|
|
limitPolicy: { enabled: true, windows: ["session", "weekly"] },
|
|
});
|
|
|
|
assert.equal(policy.enabled, true);
|
|
assert.deepEqual(policy.windows, ["session"]);
|
|
});
|
|
|
|
test("resolveQuotaLimitPolicy disables non-codex policy by default", () => {
|
|
const policy = auth.resolveQuotaLimitPolicy("openai", {});
|
|
assert.equal(policy.enabled, false);
|
|
assert.deepEqual(policy.windows, []);
|
|
});
|
|
|
|
test("resolveQuotaLimitPolicy accepts generic provider policy and clamps threshold", () => {
|
|
const policy = auth.resolveQuotaLimitPolicy("openai", {
|
|
limitPolicy: {
|
|
enabled: true,
|
|
thresholdPercent: 999,
|
|
windows: ["daily", " monthly ", ""],
|
|
},
|
|
});
|
|
|
|
assert.equal(policy.enabled, true);
|
|
assert.equal(policy.thresholdPercent, 100);
|
|
assert.deepEqual(policy.windows, ["daily", "monthly"]);
|
|
});
|
|
|
|
test("evaluateQuotaLimitPolicy blocks when configured window reaches threshold", () => {
|
|
const resetAt = new Date(Date.now() + 60_000).toISOString();
|
|
quotaCache.setQuotaCache("conn-policy-1", "openai", {
|
|
daily: { remainingPercentage: 5, resetAt },
|
|
});
|
|
|
|
const result = auth.evaluateQuotaLimitPolicy(
|
|
"openai",
|
|
buildConnection("conn-policy-1", {
|
|
limitPolicy: { enabled: true, thresholdPercent: 90, windows: ["daily"] },
|
|
})
|
|
);
|
|
|
|
assert.equal(result.blocked, true);
|
|
assert.equal(result.reasons.length, 1);
|
|
assert.match(result.reasons[0], /daily usage/i);
|
|
assert.equal(result.resetAt, resetAt);
|
|
});
|
|
|
|
test("evaluateQuotaLimitPolicy matches canonical weekly window against labeled cache keys", () => {
|
|
const resetAt = new Date(Date.now() + 60_000).toISOString();
|
|
quotaCache.setQuotaCache("conn-policy-weekly-label", "codex", {
|
|
"weekly (7d)": { remainingPercentage: 0, resetAt },
|
|
});
|
|
|
|
const result = auth.evaluateQuotaLimitPolicy(
|
|
"codex",
|
|
buildConnection("conn-policy-weekly-label", {
|
|
codexLimitPolicy: { use5h: true, useWeekly: true },
|
|
limitPolicy: { enabled: true, windows: ["weekly"] },
|
|
})
|
|
);
|
|
|
|
assert.equal(result.blocked, true);
|
|
assert.equal(result.reasons.length, 1);
|
|
assert.match(result.reasons[0], /weekly usage/i);
|
|
assert.equal(result.resetAt, resetAt);
|
|
});
|
|
|
|
test("evaluateQuotaLimitPolicy does not block when no quota data exists", () => {
|
|
const result = auth.evaluateQuotaLimitPolicy(
|
|
"openai",
|
|
buildConnection("conn-policy-missing", {
|
|
limitPolicy: { enabled: true, thresholdPercent: 90, windows: ["daily"] },
|
|
})
|
|
);
|
|
|
|
assert.equal(result.blocked, false);
|
|
assert.deepEqual(result.reasons, []);
|
|
assert.equal(result.resetAt, null);
|
|
});
|