Files
2026-07-13 11:59:58 +08:00

65 lines
2.1 KiB
TypeScript

import { afterEach, describe, expect, test } from "@rstest/core";
import {
readCachedAgentsApiEnabled,
resolveAgentsApiEnabled,
writeCachedAgentsApiEnabled,
} from "@/core/agents/feature-cache";
describe("resolveAgentsApiEnabled", () => {
test("a live value always wins over the cache", () => {
expect(resolveAgentsApiEnabled(true, false)).toBe(true);
expect(resolveAgentsApiEnabled(false, true)).toBe(false);
});
test("falls back to the cached value when live is unknown (sticky)", () => {
// Disabled stays disabled during an /api/features outage, so the 403
// storm (#3757) does not come back.
expect(resolveAgentsApiEnabled(undefined, false)).toBe(false);
expect(resolveAgentsApiEnabled(undefined, true)).toBe(true);
});
test("fails open only when nothing has ever been observed", () => {
expect(resolveAgentsApiEnabled(undefined, undefined)).toBe(true);
});
});
describe("agents_api feature cache persistence", () => {
const store = new Map<string, string>();
const fakeWindow = {
localStorage: {
getItem: (k: string) => (store.has(k) ? store.get(k)! : null),
setItem: (k: string, v: string) => {
store.set(k, v);
},
removeItem: (k: string) => {
store.delete(k);
},
},
};
afterEach(() => {
store.clear();
delete (globalThis as { window?: unknown }).window;
});
test("round-trips a persisted value", () => {
(globalThis as { window?: unknown }).window = fakeWindow;
writeCachedAgentsApiEnabled(false);
expect(readCachedAgentsApiEnabled()).toBe(false);
writeCachedAgentsApiEnabled(true);
expect(readCachedAgentsApiEnabled()).toBe(true);
});
test("returns undefined when nothing is stored", () => {
(globalThis as { window?: unknown }).window = fakeWindow;
expect(readCachedAgentsApiEnabled()).toBeUndefined();
});
test("no-ops without a browser environment (SSR)", () => {
// window is undefined in the node test environment.
expect(readCachedAgentsApiEnabled()).toBeUndefined();
expect(() => writeCachedAgentsApiEnabled(true)).not.toThrow();
});
});