110 lines
3.9 KiB
TypeScript
110 lines
3.9 KiB
TypeScript
/**
|
|
* Regression test for Codex review-quota plumbing.
|
|
*
|
|
* Upstream parity: decolua/9router PR #836 surfaces the SECONDARY window of
|
|
* `code_review_rate_limit` and supports descriptors that arrive via the
|
|
* `additional_rate_limits` array (some ChatGPT plans report the review limit
|
|
* there rather than in the dedicated `code_review_rate_limit` block).
|
|
*
|
|
* Before this fix:
|
|
* - `buildCodexUsageQuotas` only emitted `quotas.code_review` from the
|
|
* primary window of `code_review_rate_limit`, so the WEEKLY review window
|
|
* was invisible to the dashboard.
|
|
* - Review limits surfaced under `additional_rate_limits` (with
|
|
* `limit_name`/`metered_feature` containing "review") were dropped.
|
|
*
|
|
* After this fix:
|
|
* - The secondary window of `code_review_rate_limit` is emitted as
|
|
* `quotas.code_review_weekly` (parallel to `session`/`weekly`).
|
|
* - Review entries inside `additional_rate_limits` populate the same
|
|
* `code_review`/`code_review_weekly` keys when the dedicated block is
|
|
* absent.
|
|
* - The primary `code_review` key is preserved (backward-compat for the
|
|
* existing dashboard rendering & the usage-service-hardening regression).
|
|
*/
|
|
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import { buildCodexUsageQuotas } from "../../open-sse/services/codexUsageQuotas.ts";
|
|
|
|
test("buildCodexUsageQuotas surfaces the secondary code_review window", () => {
|
|
const { quotas } = buildCodexUsageQuotas({
|
|
rate_limit: {
|
|
primary_window: { used_percent: 25 },
|
|
secondary_window: { used_percent: 50 },
|
|
},
|
|
code_review_rate_limit: {
|
|
primary_window: { used_percent: 40, reset_after_seconds: 45 },
|
|
secondary_window: { used_percent: 70, reset_after_seconds: 6000 },
|
|
},
|
|
});
|
|
|
|
// Pre-existing primary window stays under `code_review` (back-compat).
|
|
assert.equal(quotas.code_review?.used, 40);
|
|
assert.equal(quotas.code_review?.remaining, 60);
|
|
|
|
// New: secondary window exposed as `code_review_weekly`.
|
|
assert.equal(quotas.code_review_weekly?.used, 70);
|
|
assert.equal(quotas.code_review_weekly?.remaining, 30);
|
|
assert.equal(quotas.code_review_weekly?.total, 100);
|
|
assert.equal(quotas.code_review_weekly?.unlimited, false);
|
|
});
|
|
|
|
test("buildCodexUsageQuotas reads review windows from additional_rate_limits", () => {
|
|
const { quotas } = buildCodexUsageQuotas({
|
|
rate_limit: {
|
|
primary_window: { used_percent: 10 },
|
|
},
|
|
additional_rate_limits: [
|
|
{
|
|
limit_name: "Code Review",
|
|
metered_feature: "code_review",
|
|
rate_limit: {
|
|
primary_window: { used_percent: 33 },
|
|
secondary_window: { used_percent: 55 },
|
|
},
|
|
},
|
|
],
|
|
});
|
|
|
|
assert.equal(quotas.code_review?.used, 33);
|
|
assert.equal(quotas.code_review?.remaining, 67);
|
|
assert.equal(quotas.code_review_weekly?.used, 55);
|
|
assert.equal(quotas.code_review_weekly?.remaining, 45);
|
|
});
|
|
|
|
test("buildCodexUsageQuotas leaves review windows undefined when payload is silent", () => {
|
|
const { quotas } = buildCodexUsageQuotas({
|
|
rate_limit: {
|
|
primary_window: { used_percent: 10 },
|
|
secondary_window: { used_percent: 20 },
|
|
},
|
|
});
|
|
|
|
assert.equal(quotas.session?.used, 10);
|
|
assert.equal(quotas.weekly?.used, 20);
|
|
assert.equal(quotas.code_review, undefined);
|
|
assert.equal(quotas.code_review_weekly, undefined);
|
|
});
|
|
|
|
test("buildCodexUsageQuotas prefers dedicated block over additional_rate_limits fallback", () => {
|
|
const { quotas } = buildCodexUsageQuotas({
|
|
code_review_rate_limit: {
|
|
primary_window: { used_percent: 11 },
|
|
secondary_window: { used_percent: 22 },
|
|
},
|
|
additional_rate_limits: [
|
|
{
|
|
limit_name: "review",
|
|
rate_limit: {
|
|
primary_window: { used_percent: 99 },
|
|
secondary_window: { used_percent: 99 },
|
|
},
|
|
},
|
|
],
|
|
});
|
|
|
|
assert.equal(quotas.code_review?.used, 11);
|
|
assert.equal(quotas.code_review_weekly?.used, 22);
|
|
});
|