feat(web): clickable agent stat icons deep-linking to settings tabs (#186)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Yaowei ZhengandClaude Fable 5 authored and GitHub committed 2026-08-04 19:03:51 +08:00
1 parent 45f916cd1e
commit 67adf93b47
3 files changed
+114 -23

No files matched your search

@@ -0,0 +1,28 @@
/**
* agent-settings-page.tsx resolveTabKey unit tests: the settings page's `?tab=` deep link
* narrows an untrusted query value against the live TABS keys — a known key passes through,
* anything else (absent, empty, unknown, wrong casing) falls back to the default — pinned so
* the validation stays dynamic and newly added tabs deep-link without a hardcoded key list.
*/
import { describe, expect, it } from "vitest";
import { resolveTabKey } from "../src/features/agents/agent-settings-page";
const TABS = [{ key: "overview" }, { key: "tools" }, { key: "vault" }] as const;
describe("resolveTabKey", () => {
it("passes a known tab key through", () => {
expect(resolveTabKey("tools", TABS, "overview")).toBe("tools");
expect(resolveTabKey("vault", TABS, "overview")).toBe("vault");
});
it("falls back for absent, empty, unknown, or wrong-cased values", () => {
expect(resolveTabKey(null, TABS, "overview")).toBe("overview");
expect(resolveTabKey("", TABS, "overview")).toBe("overview");
expect(resolveTabKey("bogus", TABS, "overview")).toBe("overview");
expect(resolveTabKey("Tools", TABS, "overview")).toBe("overview");
});
it("validates against the supplied keys, not a hardcoded list", () => {
expect(resolveTabKey("skills", [...TABS, { key: "skills" }], "overview")).toBe("skills");
});
});