Files
moltbot/src/commands/doctor-bundled-plugin-runtime-deps.test.ts
2026-04-01 08:55:00 +01:00

68 lines
2.3 KiB
TypeScript

import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import { describe, expect, it } from "vitest";
import { scanBundledPluginRuntimeDeps } from "./doctor-bundled-plugin-runtime-deps.js";
function writeJson(filePath: string, value: unknown) {
fs.mkdirSync(path.dirname(filePath), { recursive: true });
fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, "utf8");
}
describe("doctor bundled plugin runtime deps", () => {
it("skips source checkouts", () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-doctor-bundled-"));
fs.mkdirSync(path.join(root, ".git"));
fs.mkdirSync(path.join(root, "src"));
fs.mkdirSync(path.join(root, "extensions"));
writeJson(path.join(root, "dist", "extensions", "discord", "package.json"), {
dependencies: {
"dep-one": "1.0.0",
},
});
const result = scanBundledPluginRuntimeDeps({ packageRoot: root });
expect(result.missing).toEqual([]);
expect(result.conflicts).toEqual([]);
});
it("reports missing deps and conflicts", () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-doctor-bundled-"));
writeJson(path.join(root, "package.json"), { name: "openclaw" });
writeJson(path.join(root, "dist", "extensions", "alpha", "package.json"), {
dependencies: {
"dep-one": "1.0.0",
"@scope/dep-two": "2.0.0",
},
optionalDependencies: {
"dep-opt": "3.0.0",
},
});
writeJson(path.join(root, "dist", "extensions", "beta", "package.json"), {
dependencies: {
"dep-one": "1.0.0",
"dep-conflict": "1.0.0",
},
});
writeJson(path.join(root, "dist", "extensions", "gamma", "package.json"), {
dependencies: {
"dep-conflict": "2.0.0",
},
});
writeJson(path.join(root, "node_modules", "dep-one", "package.json"), {
name: "dep-one",
version: "1.0.0",
});
const result = scanBundledPluginRuntimeDeps({ packageRoot: root });
const missing = result.missing.map((dep) => `${dep.name}@${dep.version}`);
expect(missing).toEqual(["@scope/dep-two@2.0.0", "dep-opt@3.0.0"]);
expect(result.conflicts).toHaveLength(1);
expect(result.conflicts[0]?.name).toBe("dep-conflict");
expect(result.conflicts[0]?.versions).toEqual(["1.0.0", "2.0.0"]);
});
});