Files
2026-07-13 13:39:12 +08:00

79 lines
3.0 KiB
TypeScript

/**
* Unit tests for the useApiKey hook.
*
* We test the pure selection logic directly — the React hook wraps the same
* logic. This avoids requiring jsdom or React testing libraries in the
* Node.js native test runner.
*/
import test from "node:test";
import assert from "node:assert/strict";
// ── helpers (mirror the hook's internal selection logic) ──────────────────────
interface ApiKey {
id: string;
name: string;
key: string;
isActive?: boolean;
}
function selectActiveKey(list: ApiKey[], preferredId?: string): ApiKey | undefined {
if (preferredId) {
return list.find((k) => k.id === preferredId);
}
return list.find((k) => k.isActive !== false);
}
// ── tests ─────────────────────────────────────────────────────────────────────
test("useApiKey — returns first active key when no preferredId", () => {
const keys: ApiKey[] = [
{ id: "key-1", name: "Inactive key", key: "sk-inactive", isActive: false },
{ id: "key-2", name: "Active key", key: "sk-active-1", isActive: true },
{ id: "key-3", name: "Another active", key: "sk-active-2", isActive: true },
];
const selected = selectActiveKey(keys);
assert.strictEqual(selected?.id, "key-2", "should pick first key with isActive !== false");
assert.strictEqual(selected?.key, "sk-active-1");
});
test("useApiKey — filters out inactive keys (returns first key with isActive !== false)", () => {
const keys: ApiKey[] = [
{ id: "key-1", name: "Disabled", key: "sk-disabled", isActive: false },
{ id: "key-2", name: "Disabled 2", key: "sk-disabled-2", isActive: false },
];
const selected = selectActiveKey(keys);
assert.strictEqual(selected, undefined, "should return undefined when all keys are inactive");
});
test("useApiKey — preferredId overrides default selection logic", () => {
const keys: ApiKey[] = [
{ id: "key-1", name: "First active", key: "sk-first", isActive: true },
{ id: "key-2", name: "Preferred", key: "sk-preferred", isActive: false },
{ id: "key-3", name: "Third", key: "sk-third", isActive: true },
];
// Even though key-2 is inactive, preferredId should select it specifically
const selected = selectActiveKey(keys, "key-2");
assert.strictEqual(selected?.id, "key-2");
assert.strictEqual(selected?.key, "sk-preferred");
});
test("useApiKey — keys with undefined isActive are treated as active", () => {
const keys: ApiKey[] = [
{ id: "key-1", name: "No isActive field", key: "sk-no-field" },
{ id: "key-2", name: "Explicit active", key: "sk-explicit", isActive: true },
];
// undefined isActive means isActive !== false → treated as active
const selected = selectActiveKey(keys);
assert.strictEqual(selected?.id, "key-1");
});
test("useApiKey — empty list returns undefined", () => {
const selected = selectActiveKey([]);
assert.strictEqual(selected, undefined);
});