diff --git a/extensions/amazon-bedrock/discovery.test.ts b/extensions/amazon-bedrock/discovery.test.ts index 26e43495d9c..5dde8981417 100644 --- a/extensions/amazon-bedrock/discovery.test.ts +++ b/extensions/amazon-bedrock/discovery.test.ts @@ -30,6 +30,16 @@ function mockSingleActiveSummary(overrides: Partial): void { + expect(model).toBeDefined(); + expect(typeof model).toBe("object"); + expect(model).not.toBeNull(); + const actual = model as Record; + for (const [key, value] of Object.entries(expected)) { + expect(actual[key]).toEqual(value); + } +} + describe("bedrock discovery", () => { beforeEach(() => { sendMock.mockClear(); @@ -86,7 +96,7 @@ describe("bedrock discovery", () => { const models = await discoverBedrockModels({ region: "us-east-1", clientFactory }); expect(models).toHaveLength(1); - expect(models[0]).toMatchObject({ + expectModelFields(models[0], { id: "anthropic.claude-3-7-sonnet-20250219-v1:0", name: "Claude 3.7 Sonnet", reasoning: false, @@ -119,7 +129,7 @@ describe("bedrock discovery", () => { config: { defaultContextWindow: 64000, defaultMaxTokens: 8192 }, clientFactory, }); - expect(models[0]).toMatchObject({ contextWindow: 64000, maxTokens: 8192 }); + expectModelFields(models[0], { contextWindow: 64000, maxTokens: 8192 }); }); it("keeps the conservative fallback for unknown inference profiles", async () => { @@ -147,7 +157,7 @@ describe("bedrock discovery", () => { const models = await discoverBedrockModels({ region: "ap-northeast-1", clientFactory }); expect(models).toHaveLength(1); - expect(models[0]).toMatchObject({ + expectModelFields(models[0], { id: "jp.example.unknown-text-v1:0", contextWindow: 32000, maxTokens: 4096, @@ -179,7 +189,7 @@ describe("bedrock discovery", () => { const models = await discoverBedrockModels({ region: "ap-northeast-1", clientFactory }); - expect(models[0]).toMatchObject({ + expectModelFields(models[0], { id: "jp.anthropic.claude-sonnet-4-6-v1:0", contextWindow: 1_000_000, }); @@ -317,17 +327,17 @@ describe("bedrock discovery", () => { const globalProfile = models.find((m) => m.id === "global.anthropic.claude-sonnet-4-6"); // Foundation model has image input. - expect(foundationModel).toMatchObject({ input: ["text", "image"] }); + expectModelFields(foundationModel, { input: ["text", "image"] }); // Inference profiles inherit image input from the foundation model. - expect(usProfile).toMatchObject({ + expectModelFields(usProfile, { name: "US Anthropic Claude Sonnet 4.6", input: ["text", "image"], contextWindow: 1000000, maxTokens: 4096, }); - expect(euProfile).toMatchObject({ input: ["text", "image"] }); - expect(globalProfile).toMatchObject({ input: ["text", "image"] }); + expectModelFields(euProfile, { input: ["text", "image"] }); + expectModelFields(globalProfile, { input: ["text", "image"] }); // Inactive profile should not be present. expect(models.find((m) => m.id === "ap.anthropic.claude-sonnet-4-6")).toBeUndefined(); @@ -424,7 +434,7 @@ describe("bedrock discovery", () => { const models = await discoverBedrockModels({ region: "us-east-1", clientFactory }); const profile = models.find((model) => model.id === "us.my-prod-profile"); - expect(profile).toMatchObject({ + expectModelFields(profile, { id: "us.my-prod-profile", input: ["text", "image"], contextWindow: 1000000, @@ -456,7 +466,7 @@ describe("bedrock discovery", () => { const models = await discoverBedrockModels({ region: "us-east-1", clientFactory }); - expect(models[0]).toMatchObject({ + expectModelFields(models[0], { id: "us.my-prod-profile", contextWindow: 1_000_000, maxTokens: 4096, @@ -582,14 +592,14 @@ describe("bedrock discovery", () => { expect(models).toHaveLength(3); const auProfile = models.find((m) => m.id === "au.anthropic.claude-sonnet-4-6"); - expect(auProfile).toMatchObject({ + expectModelFields(auProfile, { id: "au.anthropic.claude-sonnet-4-6", name: "AU Anthropic Claude Sonnet 4.6", input: ["text", "image"], }); const apacProfile = models.find((m) => m.id === "apac.anthropic.claude-sonnet-4-6"); - expect(apacProfile).toMatchObject({ + expectModelFields(apacProfile, { id: "apac.anthropic.claude-sonnet-4-6", name: "APAC Anthropic Claude Sonnet 4.6", input: ["text", "image"],