From 6fa63a4e675184b604f83dfca28d2df8f77e9973 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 3 Aug 2026 13:58:42 -0700 Subject: [PATCH] fix(imessage): honor explicitly enabled accounts during startup (#118944) --- extensions/imessage/src/accounts.test.ts | 90 ++++++++++++++++++++++++ extensions/imessage/src/accounts.ts | 1 + 2 files changed, 91 insertions(+) diff --git a/extensions/imessage/src/accounts.test.ts b/extensions/imessage/src/accounts.test.ts index 5eac35ca3b36..487a708df79e 100644 --- a/extensions/imessage/src/accounts.test.ts +++ b/extensions/imessage/src/accounts.test.ts @@ -14,6 +14,96 @@ import { } from "./accounts.js"; describe("resolveIMessageAccount", () => { + it.each([ + ["absent channel", {}, undefined, "default", true, false], + ["empty channel", { channels: { imessage: {} } }, undefined, "default", true, false], + [ + "explicitly enabled channel with default paths", + { channels: { imessage: { enabled: true } } }, + undefined, + "default", + true, + true, + ], + [ + "explicitly disabled channel", + { channels: { imessage: { enabled: false } } }, + undefined, + "default", + false, + false, + ], + [ + "explicitly enabled channel with an existing CLI path", + { channels: { imessage: { enabled: true, cliPath: "imsg" } } }, + undefined, + "default", + true, + true, + ], + [ + "explicitly enabled named account", + { channels: { imessage: { accounts: { work: { enabled: true } } } } }, + "work", + "work", + true, + true, + ], + [ + "explicitly disabled named account", + { channels: { imessage: { accounts: { work: { enabled: false } } } } }, + "work", + "work", + false, + false, + ], + [ + "empty named account", + { channels: { imessage: { accounts: { work: {} } } } }, + "work", + "work", + true, + false, + ], + [ + "named account inheriting explicit channel enablement", + { channels: { imessage: { enabled: true, accounts: { work: {} } } } }, + "work", + "work", + true, + true, + ], + [ + "configured named account under a disabled channel", + { channels: { imessage: { enabled: false, accounts: { work: { enabled: true } } } } }, + "work", + "work", + false, + true, + ], + [ + "explicitly enabled configured default account", + { + channels: { + imessage: { defaultAccount: "work", accounts: { work: { enabled: true } } }, + }, + }, + undefined, + "work", + true, + true, + ], + ] as const)( + "resolves independent enabled and configured state for %s", + (_scenario, cfg, accountId, expectedAccountId, enabled, configured) => { + expect(resolveIMessageAccount({ cfg: cfg as never, accountId })).toMatchObject({ + accountId: expectedAccountId, + enabled, + configured, + }); + }, + ); + it("preserves top-level default account when named accounts are configured", () => { const cfg = { channels: { diff --git a/extensions/imessage/src/accounts.ts b/extensions/imessage/src/accounts.ts index d9ae0618038c..b0280b9fd950 100644 --- a/extensions/imessage/src/accounts.ts +++ b/extensions/imessage/src/accounts.ts @@ -96,6 +96,7 @@ export function resolveIMessageAccount(params: { const merged = mergeIMessageAccountConfig(params.cfg, accountId); const accountEnabled = merged.enabled !== false; const configured = Boolean( + merged.enabled === true || merged.cliPath?.trim() || merged.dbPath?.trim() || merged.service ||