From 762d8d8e645f76342afaa43d21e8e2c7808d6ebc Mon Sep 17 00:00:00 2001 From: Song Zhenlin <120006171+whiteyzy@users.noreply.github.com> Date: Sat, 13 Jun 2026 22:01:15 +0800 Subject: [PATCH] fix(feishu): clear client cache on test SDK swap Clear cached Feishu clients when the test runtime replaces the SDK, preventing stale clients from leaking across test setup. Adds regression coverage for the SDK swap path. Fixes #83911. --- extensions/feishu/src/client.test.ts | 25 +++++++++++++++++++++++++ extensions/feishu/src/client.ts | 1 + 2 files changed, 26 insertions(+) diff --git a/extensions/feishu/src/client.test.ts b/extensions/feishu/src/client.test.ts index 8a4ba4f2ebf0..2f3202d531f1 100644 --- a/extensions/feishu/src/client.test.ts +++ b/extensions/feishu/src/client.test.ts @@ -386,6 +386,31 @@ describe("createFeishuClient HTTP timeout", () => { timeout: 45_000, }); }); + + it("evicts client cache when SDK is replaced via setFeishuClientRuntimeForTest (#83911)", () => { + const ctorCountA = clientCtorMock.mock.calls.length; + + // First client gets cached + createFeishuClient({ appId: "app_7", appSecret: "secret_7", accountId: "cache-clear-test" }); // pragma: allowlist secret + expect(clientCtorMock.mock.calls.length).toBe(ctorCountA + 1); + + // SDK swap via setFeishuClientRuntimeForTest should clear the cache + setFeishuClientRuntimeForTest({ + sdk: { + AppType: { SelfBuild: "self" } as never, + Client: clientCtorMock as never, + Domain: { Feishu: "https://open.feishu.cn", Lark: "https://open.larksuite.com" } as never, + LoggerLevel: { info: "info" } as never, + WSClient: vi.fn() as never, + EventDispatcher: vi.fn() as never, + defaultHttpInstance: mockBaseHttpInstance as never, + }, + }); + + // Same credentials — would hit cache before the fix; now evicted + createFeishuClient({ appId: "app_7", appSecret: "secret_7", accountId: "cache-clear-test" }); // pragma: allowlist secret + expect(clientCtorMock.mock.calls.length).toBe(ctorCountA + 2); + }); }); describe("createFeishuWSClient proxy handling", () => { diff --git a/extensions/feishu/src/client.ts b/extensions/feishu/src/client.ts index 22b091920c2c..194d68e075d7 100644 --- a/extensions/feishu/src/client.ts +++ b/extensions/feishu/src/client.ts @@ -260,4 +260,5 @@ export function setFeishuClientRuntimeForTest(overrides?: { feishuClientSdk = overrides?.sdk ? { ...defaultFeishuClientSdk, ...overrides.sdk } : defaultFeishuClientSdk; + clearClientCache(); }