From 3225ec43c8870acd11bdb021c98e9cf13a67b96f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Thu, 14 May 2026 00:50:51 +0100 Subject: [PATCH] test(plugin-install): align npm peer scan expectations --- src/plugins/install.npm-spec.e2e.test.ts | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/plugins/install.npm-spec.e2e.test.ts b/src/plugins/install.npm-spec.e2e.test.ts index 64fe6cb15a6..ae89be80760 100644 --- a/src/plugins/install.npm-spec.e2e.test.ts +++ b/src/plugins/install.npm-spec.e2e.test.ts @@ -444,7 +444,7 @@ describe("installPluginFromNpmSpec e2e", () => { ).resolves.toBeTruthy(); }); - it("scans repaired pre-existing peer dependencies during later installs", async () => { + it("repairs pre-existing peer dependencies during later installs", async () => { const rootDir = await makeTempDir("npm-plugin-repaired-peer-scan-e2e"); const npmRoot = path.join(rootDir, "managed-npm"); const pluginWithRuntimePeer = `existing-peer-plugin-${crypto.randomUUID().replace(/-/g, "").slice(0, 12)}`; @@ -531,27 +531,25 @@ describe("installPluginFromNpmSpec e2e", () => { logger: { info: () => {}, warn: () => {} }, timeoutMs: 120_000, }); - expect(later.ok).toBe(false); - if (later.ok) { - throw new Error("expected repaired peer dependency scan to block installation"); + if (!later.ok) { + throw new Error(later.error); } - expect(later.error).toContain("Dynamic code execution detected"); await expect( fs.lstat(path.join(npmRoot, "node_modules", laterPlugin, "package.json")), - ).rejects.toHaveProperty("code", "ENOENT"); + ).resolves.toBeTruthy(); await expect( fs.lstat(path.join(npmRoot, "node_modules", runtimePeer, "package.json")), - ).rejects.toHaveProperty("code", "ENOENT"); + ).resolves.toBeTruthy(); const rootManifest = JSON.parse( await fs.readFile(path.join(npmRoot, "package.json"), "utf8"), ) as { dependencies?: Record; openclaw?: { managedPeerDependencies?: string[] }; }; - expect(rootManifest.dependencies?.[laterPlugin]).toBeUndefined(); - expect(rootManifest.dependencies?.[runtimePeer]).toBeUndefined(); - expect(rootManifest.openclaw?.managedPeerDependencies ?? []).not.toContain(runtimePeer); + expect(rootManifest.dependencies?.[laterPlugin]).toBe("1.0.0"); + expect(rootManifest.dependencies?.[runtimePeer]).toBe("^1.0.0"); + expect(rootManifest.openclaw?.managedPeerDependencies ?? []).toContain(runtimePeer); }); it("bounds peer dependency discovery across repeated nested package realpaths", async () => { @@ -643,6 +641,7 @@ describe("installPluginFromNpmSpec e2e", () => { latest: "1.0.0", versions: [ await packPlugin({ + indexJs: "eval('1');\n", packageName: blockedPlugin, peerDependencies: { [runtimePeer]: "^1.0.0" }, peerDependenciesMeta: {}, @@ -657,7 +656,6 @@ describe("installPluginFromNpmSpec e2e", () => { latest: "1.0.0", versions: [ await packPlugin({ - indexJs: "eval('1');\n", packageName: runtimePeer, pluginId: runtimePeer, version: "1.0.0", @@ -718,6 +716,7 @@ describe("installPluginFromNpmSpec e2e", () => { latest: "1.0.0", versions: [ await packPlugin({ + indexJs: "eval('1');\n", packageName: blockedPlugin, peerDependencies: { [existingRootDependency]: "^1.0.0", @@ -735,7 +734,6 @@ describe("installPluginFromNpmSpec e2e", () => { latest: "1.0.0", versions: [ await packPlugin({ - indexJs: "eval('1');\n", packageName: runtimePeer, pluginId: runtimePeer, version: "1.0.0",