diff --git a/tests/unit/settingsStore.test.ts b/tests/unit/settingsStore.test.ts index a675dc87..4d6f7e7c 100644 --- a/tests/unit/settingsStore.test.ts +++ b/tests/unit/settingsStore.test.ts @@ -9,6 +9,8 @@ const mockProvider: ProviderConfig = { model: "gpt-4o", }; +const DEFAULT_PII_PATTERNS = ["email", "ip_address", "phone", "ssn", "credit_card", "hostname", "password", "api_key"]; + describe("Settings Store", () => { beforeEach(() => { localStorage.clear(); @@ -19,6 +21,7 @@ describe("Settings Store", () => { default_provider: "ollama", default_model: "llama3.2:3b", ollama_url: "http://localhost:11434", + pii_enabled_patterns: Object.fromEntries(DEFAULT_PII_PATTERNS.map((id) => [id, true])), }); }); @@ -52,3 +55,54 @@ describe("Settings Store", () => { expect(raw).not.toContain("sk-test-key"); }); }); + +describe("Settings Store — PII patterns", () => { + beforeEach(() => { + localStorage.clear(); + useSettingsStore.setState({ + theme: "dark", + ai_providers: [], + active_provider: undefined, + default_provider: "ollama", + default_model: "llama3.2:3b", + ollama_url: "http://localhost:11434", + pii_enabled_patterns: Object.fromEntries(DEFAULT_PII_PATTERNS.map((id) => [id, true])), + }); + }); + + it("initializes all 8 PII patterns as enabled by default", () => { + const patterns = useSettingsStore.getState().pii_enabled_patterns; + for (const id of DEFAULT_PII_PATTERNS) { + expect(patterns[id]).toBe(true); + } + }); + + it("setPiiPattern disables a single pattern", () => { + useSettingsStore.getState().setPiiPattern("email", false); + expect(useSettingsStore.getState().pii_enabled_patterns["email"]).toBe(false); + }); + + it("setPiiPattern does not affect other patterns", () => { + useSettingsStore.getState().setPiiPattern("email", false); + for (const id of DEFAULT_PII_PATTERNS.filter((id) => id !== "email")) { + expect(useSettingsStore.getState().pii_enabled_patterns[id]).toBe(true); + } + }); + + it("setPiiPattern re-enables a disabled pattern", () => { + useSettingsStore.getState().setPiiPattern("ssn", false); + useSettingsStore.getState().setPiiPattern("ssn", true); + expect(useSettingsStore.getState().pii_enabled_patterns["ssn"]).toBe(true); + }); + + it("pii_enabled_patterns is persisted to localStorage", () => { + useSettingsStore.getState().setPiiPattern("api_key", false); + const raw = localStorage.getItem("tftsr-settings"); + expect(raw).toBeTruthy(); + // Zustand persist wraps state in { state: {...}, version: ... } + const parsed = JSON.parse(raw!); + const stored = parsed.state ?? parsed; + expect(stored.pii_enabled_patterns.api_key).toBe(false); + expect(stored.pii_enabled_patterns.email).toBe(true); + }); +});