From 008a00e7773d2dba4a4c756898f7416d2d9f05fc Mon Sep 17 00:00:00 2001 From: jnjpng Date: Fri, 6 Feb 2026 09:32:45 -0800 Subject: [PATCH] fix: test keychain cleanup deletes real credentials (#846) --- src/tests/settings-manager.test.ts | 7 +++++++ src/utils/secrets.ts | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/tests/settings-manager.test.ts b/src/tests/settings-manager.test.ts index 9eae527..c51e9df 100644 --- a/src/tests/settings-manager.test.ts +++ b/src/tests/settings-manager.test.ts @@ -19,6 +19,7 @@ import { deleteSecureTokens, isKeychainAvailable, keychainAvailablePrecompute, + setServiceName, } from "../utils/secrets.js"; // Store original HOME to restore after tests @@ -27,6 +28,9 @@ let testHomeDir: string; let testProjectDir: string; beforeEach(async () => { + // Use a test-specific keychain service name to avoid deleting real credentials + setServiceName("letta-code-test"); + // Reset settings manager FIRST before changing HOME await settingsManager.reset(); @@ -49,6 +53,9 @@ afterEach(async () => { // Restore original HOME AFTER reset completes process.env.HOME = originalHome; + + // Restore the real service name + setServiceName("letta-code"); }); // ============================================================================ diff --git a/src/utils/secrets.ts b/src/utils/secrets.ts index 5d8a5e9..0fc92e8 100644 --- a/src/utils/secrets.ts +++ b/src/utils/secrets.ts @@ -14,10 +14,17 @@ try { secretsAvailable = false; } -const SERVICE_NAME = "letta-code"; +let SERVICE_NAME = "letta-code"; const API_KEY_NAME = "letta-api-key"; const REFRESH_TOKEN_NAME = "letta-refresh-token"; +/** + * Override the keychain service name (useful for tests to avoid touching real credentials) + */ +export function setServiceName(name: string): void { + SERVICE_NAME = name; +} + // Note: When secrets API is unavailable (Node.js), tokens will be managed // by the settings manager which falls back to storing in the settings file // This provides persistence across restarts