diff --git a/packages/settings-ui/src/connections-status.test.ts b/packages/settings-ui/src/connections-status.test.ts index e8b3630ef..100f6fecd 100644 --- a/packages/settings-ui/src/connections-status.test.ts +++ b/packages/settings-ui/src/connections-status.test.ts @@ -36,9 +36,18 @@ describe("connectorStatus", () => { expect(result.status).toBe("not_connected"); }); - test("not_connected when a provider exists but no credential points at it", () => { + test("connected when a provider exists even if the credential list omits inherited credentials", () => { const result = connectorStatus("linear", [], [provider()]); - expect(result.status).toBe("not_connected"); + expect(result.status).toBe("connected"); + }); + + test("connected when local Ollama has an active credential", () => { + const result = connectorStatus( + "ollama", + [credential({ providerId: "ollama-provider", status: "active" })], + [provider({ id: "ollama-provider", name: "ollama", plugin: "ollama" })], + ); + expect(result.status).toBe("connected"); }); test("connected when the newest credential is active", () => { @@ -91,14 +100,14 @@ describe("connectorStatus", () => { const result = connectorStatus("linear", [older, newer], [provider()]); expect(result.status).toBe("connected"); if (result.status === "connected") { - expect(result.credential.id).toBe("cred-new"); + expect(result.credential?.id).toBe("cred-new"); } }); - test("ignores credentials belonging to a different provider", () => { + test("keeps the provider connected when only unrelated credentials are listed", () => { const other = credential({ providerId: "provider-2", status: "active" }); const result = connectorStatus("linear", [other], [provider()]); - expect(result.status).toBe("not_connected"); + expect(result.status).toBe("connected"); }); // Regression for the bug where the card grid matched on diff --git a/packages/settings-ui/src/connections-status.ts b/packages/settings-ui/src/connections-status.ts index 3e59c851e..9e8d12b0a 100644 --- a/packages/settings-ui/src/connections-status.ts +++ b/packages/settings-ui/src/connections-status.ts @@ -8,7 +8,7 @@ export type ConnectorStatus = "not_connected" | "connected" | "needs_attention"; export type ConnectorStatusResult = | { readonly status: "not_connected" } - | { readonly status: "connected"; readonly credential: Credential } + | { readonly status: "connected"; readonly credential?: Credential } | { readonly status: "needs_attention"; readonly credential: Credential }; /** @@ -35,7 +35,7 @@ export function connectorStatus( if (provider === undefined) return { status: "not_connected" }; const matches = credentials.filter((c) => c.providerId === provider.id); - if (matches.length === 0) return { status: "not_connected" }; + if (matches.length === 0) return { status: "connected" }; const newest = matches.reduce((latest, candidate) => { const latestKey = latest.createdAt ?? latest.updatedAt;