























@@ -0,0 +1,100 @@
1+import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2+3+const hasAwsCredentialsMock = vi.hoisted(() => vi.fn());
4+const createBedrockEmbeddingProviderMock = vi.hoisted(() => vi.fn());
5+6+vi.mock("./embedding-provider.js", async (importOriginal) => {
7+const actual = await importOriginal<typeof import("./embedding-provider.js")>();
8+return {
9+ ...actual,
10+hasAwsCredentials: hasAwsCredentialsMock,
11+createBedrockEmbeddingProvider: createBedrockEmbeddingProviderMock,
12+};
13+});
14+15+import { bedrockMemoryEmbeddingProviderAdapter } from "./memory-embedding-adapter.js";
16+17+function defaultCreateOptions() {
18+return {
19+config: {} as Record<string, unknown>,
20+agentDir: "/tmp/test-agent",
21+model: "",
22+};
23+}
24+25+function stubCreate(client: { region: string; model: string; dimensions?: number }) {
26+createBedrockEmbeddingProviderMock.mockResolvedValue({
27+provider: {
28+id: "bedrock",
29+model: client.model,
30+embedQuery: async () => [],
31+embedBatch: async () => [],
32+},
33+ client,
34+});
35+}
36+37+describe("bedrockMemoryEmbeddingProviderAdapter", () => {
38+beforeEach(() => {
39+hasAwsCredentialsMock.mockReset();
40+createBedrockEmbeddingProviderMock.mockReset();
41+});
42+43+afterEach(() => {
44+vi.restoreAllMocks();
45+});
46+47+it("registers the expected adapter metadata", () => {
48+expect(bedrockMemoryEmbeddingProviderAdapter.id).toBe("bedrock");
49+expect(bedrockMemoryEmbeddingProviderAdapter.transport).toBe("remote");
50+expect(bedrockMemoryEmbeddingProviderAdapter.authProviderId).toBe("amazon-bedrock");
51+expect(bedrockMemoryEmbeddingProviderAdapter.autoSelectPriority).toBe(60);
52+expect(bedrockMemoryEmbeddingProviderAdapter.allowExplicitWhenConfiguredAuto).toBe(true);
53+});
54+55+it("throws a missing-api-key sentinel error when AWS credentials are unavailable", async () => {
56+hasAwsCredentialsMock.mockResolvedValue(false);
57+58+await expect(
59+bedrockMemoryEmbeddingProviderAdapter.create(defaultCreateOptions()),
60+).rejects.toThrow(/No API key found for provider "bedrock"/);
61+await expect(
62+bedrockMemoryEmbeddingProviderAdapter.create(defaultCreateOptions()),
63+).rejects.toThrow(/AWS credentials are not available/);
64+65+expect(createBedrockEmbeddingProviderMock).not.toHaveBeenCalled();
66+});
67+68+it("creates the provider when AWS credentials are available", async () => {
69+hasAwsCredentialsMock.mockResolvedValue(true);
70+stubCreate({ region: "us-east-1", model: "amazon.titan-embed-text-v2:0", dimensions: 1024 });
71+72+const result = await bedrockMemoryEmbeddingProviderAdapter.create(defaultCreateOptions());
73+74+expect(result.provider?.id).toBe("bedrock");
75+expect(result.runtime).toEqual({
76+id: "bedrock",
77+cacheKeyData: {
78+provider: "bedrock",
79+region: "us-east-1",
80+model: "amazon.titan-embed-text-v2:0",
81+dimensions: 1024,
82+},
83+});
84+expect(createBedrockEmbeddingProviderMock).toHaveBeenCalledOnce();
85+});
86+87+it("lets the auto-select loop skip bedrock when credentials are unavailable", async () => {
88+hasAwsCredentialsMock.mockResolvedValue(false);
89+90+let thrown: unknown;
91+try {
92+await bedrockMemoryEmbeddingProviderAdapter.create(defaultCreateOptions());
93+} catch (err) {
94+thrown = err;
95+}
96+97+expect(thrown).toBeInstanceOf(Error);
98+expect(bedrockMemoryEmbeddingProviderAdapter.shouldContinueAutoSelection?.(thrown)).toBe(true);
99+});
100+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。