From 0764f86e18b39b6ec050999175dd003a707cd44b Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 25 Apr 2026 04:03:19 +0100 Subject: [PATCH] test(memory): keep embedding provider selection isolated --- .../memory-core/src/memory/embeddings.test.ts | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/extensions/memory-core/src/memory/embeddings.test.ts b/extensions/memory-core/src/memory/embeddings.test.ts index 7d04fe89ef9..92dd01a0cbf 100644 --- a/extensions/memory-core/src/memory/embeddings.test.ts +++ b/extensions/memory-core/src/memory/embeddings.test.ts @@ -1,12 +1,25 @@ import type { MemoryEmbeddingProviderAdapter } from "openclaw/plugin-sdk/memory-core-host-engine-embeddings"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../../../../src/config/types.openclaw.js"; -import { - clearMemoryEmbeddingProviders, - registerMemoryEmbeddingProvider, -} from "../../../../src/plugins/memory-embedding-providers.js"; import { createEmbeddingProvider } from "./embeddings.js"; +const mockEmbeddingRegistry = vi.hoisted(() => ({ + adapters: [] as MemoryEmbeddingProviderAdapter[], +})); + +vi.mock("openclaw/plugin-sdk/memory-core-host-engine-embeddings", () => ({ + DEFAULT_LOCAL_MODEL: "nomic-embed-text", + createLocalEmbeddingProvider: async () => { + throw new Error("local embedding provider is not used by these tests"); + }, + getMemoryEmbeddingProvider: (id: string) => + mockEmbeddingRegistry.adapters.find((adapter) => adapter.id === id), + listMemoryEmbeddingProviders: () => [...mockEmbeddingRegistry.adapters], + listRegisteredMemoryEmbeddingProviderAdapters: () => [...mockEmbeddingRegistry.adapters], + listRegisteredMemoryEmbeddingProviders: () => + mockEmbeddingRegistry.adapters.map((adapter) => ({ adapter })), +})); + const missingBedrockCredentialsError = new Error( 'No API key found for provider "bedrock". AWS credentials are not available.', ); @@ -52,6 +65,17 @@ function createMissingCredentialsAdapter( }; } +function clearMemoryEmbeddingProviders(): void { + mockEmbeddingRegistry.adapters = []; +} + +function registerMemoryEmbeddingProvider(adapter: MemoryEmbeddingProviderAdapter): void { + mockEmbeddingRegistry.adapters = mockEmbeddingRegistry.adapters.filter( + (candidate) => candidate.id !== adapter.id, + ); + mockEmbeddingRegistry.adapters.push(adapter); +} + describe("createEmbeddingProvider", () => { beforeEach(() => { clearMemoryEmbeddingProviders();