mirror of
https://github.com/tiennm99/llmapikey.git
synced 2026-06-17 06:48:23 +00:00
616f133989
- env-allowlist authz via ADMIN_GITHUB_USER_IDS on numeric provider_id (no migration) - server-side re-gated revoke + manual-mint actions - parameterized search/filter/paginate queries - shared mint-key extraction (DRY) from generate-key - notFound() for non-admins (404 never leaks route existence) - 3 unit-test suites (authz/queries/integration)
50 lines
1.9 KiB
JavaScript
50 lines
1.9 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { test } from "node:test";
|
|
|
|
import { buildFilterDescriptor, clampInt } from "../lib/keys/admin-keys-filters.js";
|
|
|
|
// Pure filter-shape tests: prove which inputs become SQL predicates, without a
|
|
// live DB. The actual queries (admin-keys-queries.js) feed these descriptors
|
|
// into parameterized `postgres` fragments — values are never spliced into SQL.
|
|
|
|
test("buildFilterDescriptor: status filters only for pending/active", () => {
|
|
assert.deepEqual(buildFilterDescriptor({ status: "pending" }), {
|
|
statusFilter: "pending",
|
|
search: null,
|
|
});
|
|
assert.deepEqual(buildFilterDescriptor({ status: "active" }), {
|
|
statusFilter: "active",
|
|
search: null,
|
|
});
|
|
});
|
|
|
|
test("buildFilterDescriptor: 'all' / unknown / empty status → no predicate", () => {
|
|
assert.equal(buildFilterDescriptor({ status: "all" }).statusFilter, null);
|
|
assert.equal(buildFilterDescriptor({ status: "garbage" }).statusFilter, null);
|
|
assert.equal(buildFilterDescriptor({}).statusFilter, null);
|
|
});
|
|
|
|
test("buildFilterDescriptor: q is trimmed; blank → no search", () => {
|
|
assert.equal(buildFilterDescriptor({ q: " octocat " }).search, "octocat");
|
|
assert.equal(buildFilterDescriptor({ q: " " }).search, null);
|
|
assert.equal(buildFilterDescriptor({ q: "" }).search, null);
|
|
assert.equal(buildFilterDescriptor({}).search, null);
|
|
});
|
|
|
|
test("buildFilterDescriptor: combines status and search", () => {
|
|
assert.deepEqual(buildFilterDescriptor({ q: "42", status: "active" }), {
|
|
statusFilter: "active",
|
|
search: "42",
|
|
});
|
|
});
|
|
|
|
test("clampInt: clamps to range and falls back on non-numeric", () => {
|
|
assert.equal(clampInt(20, 1, 100, 20), 20);
|
|
assert.equal(clampInt(0, 1, 100, 20), 1);
|
|
assert.equal(clampInt(500, 1, 100, 20), 100);
|
|
assert.equal(clampInt(-5, 0, 100, 0), 0);
|
|
assert.equal(clampInt("abc", 1, 100, 20), 20);
|
|
assert.equal(clampInt(undefined, 1, 100, 20), 20);
|
|
assert.equal(clampInt(3.9, 1, 100, 20), 3); // truncates
|
|
});
|