From e2675eed55a933e5ff06ea7da3af6fc1ff10e41f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 10 May 2026 12:10:51 +0100 Subject: [PATCH] test: clear provider runtime broad matchers --- src/plugins/provider-runtime.test.ts | 256 +++++++++++++-------------- 1 file changed, 128 insertions(+), 128 deletions(-) diff --git a/src/plugins/provider-runtime.test.ts b/src/plugins/provider-runtime.test.ts index 922b5599bc1..03ff7cbf566 100644 --- a/src/plugins/provider-runtime.test.ts +++ b/src/plugins/provider-runtime.test.ts @@ -158,17 +158,44 @@ function createOpenAiCatalogProviderPlugin( }; } +function isRecord(value: unknown): value is Record { + return typeof value === "object" && value !== null && !Array.isArray(value); +} + +function requireRecord(value: unknown, label: string): Record { + if (!isRecord(value)) { + throw new Error(`Expected ${label} to be an object`); + } + return value; +} + +function expectRecordFields(record: Record, fields: Record) { + for (const [key, value] of Object.entries(fields)) { + expect(record[key]).toEqual(value); + } +} + +function expectObjectOrArrayFields(value: unknown, fields: Record) { + if (!isRecord(value) && !Array.isArray(value)) { + throw new Error("Expected value to be an object or array"); + } + const record = value as Record; + expectRecordFields(record, fields); +} + +function getLastResolvePluginProvidersParams() { + return requireRecord(resolvePluginProvidersMock.mock.calls.at(-1)?.[0], "provider load params"); +} + function expectProviderRuntimePluginLoad(params: { provider: string; expectedPluginId?: string }) { const plugin = resolveProviderRuntimePlugin({ provider: params.provider }); expect(plugin?.id).toBe(params.expectedPluginId); - expect(resolvePluginProvidersMock).toHaveBeenCalledWith( - expect.objectContaining({ - providerRefs: [params.provider], - bundledProviderAllowlistCompat: true, - bundledProviderVitestCompat: true, - }), - ); + expectRecordFields(getLastResolvePluginProvidersParams(), { + providerRefs: [params.provider], + bundledProviderAllowlistCompat: true, + bundledProviderVitestCompat: true, + }); } function createDemoRuntimeContext>( @@ -224,7 +251,7 @@ async function expectResolvedMatches( ) { await Promise.all( cases.map(async ({ actual, expected }) => { - await expect(actual()).resolves.toMatchObject(expected); + expectObjectOrArrayFields(await actual(), expected); }), ); } @@ -440,7 +467,8 @@ describe("provider-runtime", () => { } as never, }); - expect(plugin).toMatchObject({ id: "ollama", pluginId: "ollama" }); + expect(plugin?.id).toBe("ollama"); + expect(plugin?.pluginId).toBe("ollama"); expect(resolvePluginProvidersMock).not.toHaveBeenCalled(); }); @@ -630,19 +658,14 @@ describe("provider-runtime", () => { ]); for (let i = 0; i < 2; i += 1) { - expect( - resolveExternalAuthProfilesWithPlugins({ + const [profile] = resolveExternalAuthProfilesWithPlugins({ + env: process.env, + context: { env: process.env, - context: { - env: process.env, - store: { version: 1, profiles: {} }, - }, - }), - ).toEqual([ - expect.objectContaining({ - profileId: "legacy-provider:external", - }), - ]); + store: { version: 1, profiles: {} }, + }, + }); + expect(profile?.profileId).toBe("legacy-provider:external"); } expect(providerRuntimeWarnMock).toHaveBeenCalledTimes(1); @@ -674,19 +697,14 @@ describe("provider-runtime", () => { }, ]); - expect( - resolveExternalAuthProfilesWithPlugins({ + const [profile] = resolveExternalAuthProfilesWithPlugins({ + env: process.env, + context: { env: process.env, - context: { - env: process.env, - store: { version: 1, profiles: {} }, - }, - }), - ).toEqual([ - expect.objectContaining({ - profileId: "demo-provider:external", - }), - ]); + store: { version: 1, profiles: {} }, + }, + }); + expect(profile?.profileId).toBe("demo-provider:external"); expect(providerRuntimeWarnMock).not.toHaveBeenCalled(); }); @@ -809,13 +827,12 @@ describe("provider-runtime", () => { baseUrl: "https://runtime.example.com/v1", expiresAt: 123, }); - expect(prepareRuntimeAuth).toHaveBeenCalledWith( - expect.objectContaining({ - apiKey: "raw-token", - modelId: MODEL.id, - provider: DEMO_PROVIDER_ID, - }), - ); + const prepareRuntimeAuthCalls = prepareRuntimeAuth.mock.calls as unknown[][]; + expectRecordFields(requireRecord(prepareRuntimeAuthCalls[0]?.[0], "runtime auth context"), { + apiKey: "raw-token", + modelId: MODEL.id, + provider: DEMO_PROVIDER_ID, + }); }); it("returns no runtime plugin when the provider has no owning plugin", () => { @@ -852,13 +869,14 @@ describe("provider-runtime", () => { providerTransportPatch: true, }, }); - expect(extraParamsForTransport).toHaveBeenCalledWith( - expect.objectContaining({ + expectRecordFields( + requireRecord(extraParamsForTransport.mock.calls[0]?.[0], "transport params context"), + { provider: DEMO_PROVIDER_ID, modelId: MODEL.id, model: MODEL, transport: "websocket", - }), + }, ); }); @@ -988,15 +1006,15 @@ describe("provider-runtime", () => { expect(contribution?.stablePrefix).toContain(""); expect(contribution?.stablePrefix).toContain("provider overlay"); expect(contribution?.sectionOverrides?.execution_bias).toBe("saw built-in overlay"); - expect(resolvePromptOverlay).toHaveBeenCalledWith( - expect.objectContaining({ - provider: "openrouter", - modelId: "openai/gpt-5.4", - baseOverlay: expect.objectContaining({ - stablePrefix: expect.stringContaining(""), - }), - }), + const overlayContext = requireRecord( + resolvePromptOverlay.mock.calls[0]?.[0], + "overlay context", ); + expect(overlayContext.provider).toBe("openrouter"); + expect(overlayContext.modelId).toBe("openai/gpt-5.4"); + expect( + String(requireRecord(overlayContext.baseOverlay, "base overlay").stablePrefix), + ).toContain(""); }); it("ignores OpenAI plugin personality fallback for non-OpenAI GPT-5 providers", () => { @@ -1125,10 +1143,8 @@ describe("provider-runtime", () => { models: [], }, }, - }), - ).toMatchObject({ - baseUrl: "https://normalized.example.com/v1", - }); + })?.baseUrl, + ).toBe("https://normalized.example.com/v1"); }); it("does not scan provider plugins after bundled policy surface handles config", () => { @@ -1206,7 +1222,7 @@ describe("provider-runtime", () => { config: {}, }, }), - ).toMatchObject({ + ).toEqual({ agents: { defaults: { heartbeat: { @@ -1403,10 +1419,8 @@ describe("provider-runtime", () => { resolveProviderRuntimePlugin({ provider: DEMO_PROVIDER_ID, config: config as never, - }), - ).toMatchObject({ - id: DEMO_PROVIDER_ID, - }); + })?.id, + ).toBe(DEMO_PROVIDER_ID); expect(resolvePluginProvidersMock).toHaveBeenCalledTimes(2); }); @@ -1507,7 +1521,7 @@ describe("provider-runtime", () => { }), createStreamFn, wrapStreamFn: ({ streamFn, model }) => { - expect(model).toMatchObject(MODEL); + expect(model).toEqual(MODEL); return streamFn; }, createEmbeddingProvider, @@ -1565,7 +1579,7 @@ describe("provider-runtime", () => { modelRegistry: EMPTY_MODEL_REGISTRY, }), }), - ).toMatchObject(MODEL); + ).toEqual(MODEL); expect( normalizeProviderModelIdWithPlugin({ @@ -1602,25 +1616,22 @@ describe("provider-runtime", () => { models: [], }, }, - }), - ).toMatchObject({ - baseUrl: "https://normalized.example.com/v1", - }); + })?.baseUrl, + ).toBe("https://normalized.example.com/v1"); - expect( - applyProviderNativeStreamingUsageCompatWithPlugin({ + const streamingCompatConfig = applyProviderNativeStreamingUsageCompatWithPlugin({ + provider: DEMO_PROVIDER_ID, + context: { provider: DEMO_PROVIDER_ID, - context: { - provider: DEMO_PROVIDER_ID, - providerConfig: { - baseUrl: "https://demo.example.com", - api: "openai-completions", - models: [], - }, + providerConfig: { + baseUrl: "https://demo.example.com", + api: "openai-completions", + models: [], }, - }), - ).toMatchObject({ - compat: { supportsUsageInStreaming: true }, + }, + }); + expect(requireRecord(streamingCompatConfig, "streaming compat config").compat).toEqual({ + supportsUsageInStreaming: true, }); expect( @@ -1647,7 +1658,7 @@ describe("provider-runtime", () => { modelApi: MODEL.api, }), }), - ).toMatchObject({ + ).toEqual({ sanitizeMode: "full", toolCallIdMode: "strict9", allowSyntheticToolResults: true, @@ -1669,7 +1680,7 @@ describe("provider-runtime", () => { extraParams: { temperature: 0.3 }, }), }), - ).toMatchObject({ + ).toEqual({ temperature: 0.3, transport: "auto", }); @@ -1828,7 +1839,7 @@ describe("provider-runtime", () => { provider: DEMO_PROVIDER_ID, context: createDemoResolvedModelContext({}), }), - ).toMatchObject({ + ).toEqual({ ...MODEL, api: "openai-codex-responses", }); @@ -1919,29 +1930,6 @@ describe("provider-runtime", () => { }), expected: true, }, - { - actual: () => - resolveExternalAuthProfilesWithPlugins({ - env: process.env, - context: { - env: process.env, - store: { version: 1, profiles: {} }, - }, - }), - expected: [ - { - persistence: "runtime-only", - profileId: "demo:managed", - credential: { - type: "oauth", - provider: DEMO_PROVIDER_ID, - access: "external-access", - refresh: "external-refresh", - expires: expect.any(Number), - }, - }, - ], - }, { actual: () => resolveProviderSyntheticAuthWithPlugin({ @@ -1986,6 +1974,26 @@ describe("provider-runtime", () => { }, ]); + const [externalProfile] = resolveExternalAuthProfilesWithPlugins({ + env: process.env, + context: { + env: process.env, + store: { version: 1, profiles: {} }, + }, + }); + expectRecordFields(requireRecord(externalProfile, "external auth profile"), { + persistence: "runtime-only", + profileId: "demo:managed", + }); + const credential = requireRecord(externalProfile?.credential, "external auth credential"); + expectRecordFields(credential, { + type: "oauth", + provider: DEMO_PROVIDER_ID, + access: "external-access", + refresh: "external-refresh", + }); + expect(typeof credential.expires).toBe("number"); + expectCodexMissingAuthHint(buildProviderMissingAuthMessageWithPlugin); await expectAugmentedCodexCatalog(augmentModelCatalogWithProviderPlugins); @@ -2032,11 +2040,7 @@ describe("provider-runtime", () => { }); expect(plugin).toBe(ollamaPlugin); - expect(resolvePluginProvidersMock).toHaveBeenCalledWith( - expect.objectContaining({ - providerRefs: ["ollama-spark", "ollama"], - }), - ); + expect(getLastResolvePluginProvidersParams().providerRefs).toEqual(["ollama-spark", "ollama"]); }); it("does not match alias hooks when an exact custom provider declares a foreign api owner", () => { @@ -2065,11 +2069,10 @@ describe("provider-runtime", () => { }); expect(plugin).toBeUndefined(); - expect(resolvePluginProvidersMock).toHaveBeenCalledWith( - expect.objectContaining({ - providerRefs: ["modelstudio", "openai-completions"], - }), - ); + expect(getLastResolvePluginProvidersParams().providerRefs).toEqual([ + "modelstudio", + "openai-completions", + ]); }); it("merges compat contributions from owner and foreign provider plugins", () => { @@ -2108,13 +2111,11 @@ describe("provider-runtime", () => { compat: { supportsDeveloperRole: false }, }, }), - }), - ).toMatchObject({ - compat: { - supportsDeveloperRole: false, - supportsStrictMode: true, - supportsStore: false, - }, + })?.compat, + ).toEqual({ + supportsDeveloperRole: false, + supportsStrictMode: true, + supportsStore: false, }); }); @@ -2154,7 +2155,8 @@ describe("provider-runtime", () => { }, }), }), - ).toMatchObject({ + ).toEqual({ + ...MODEL, provider: "custom-openai", id: "gpt-5.4", api: "openai-responses", @@ -2188,12 +2190,10 @@ describe("provider-runtime", () => { }), ).resolves.toEqual(expectedAugmentedOpenaiCodexCatalogEntries); - expect(resolvePluginProvidersMock).toHaveBeenCalledWith( - expect.objectContaining({ - onlyPluginIds: ["openai"], - activate: false, - }), - ); + expectRecordFields(getLastResolvePluginProvidersParams(), { + onlyPluginIds: ["openai"], + activate: false, + }); expect(resolveCatalogHookProviderPluginIdsMock).toHaveBeenCalledTimes(1); expect(resolvePluginProvidersMock).toHaveBeenCalledTimes(1); });