JimLiu-baoyu-skills/tests/shared-skill-packages.test.mjs

71 lines
2.3 KiB
JavaScript

import assert from "node:assert/strict";
import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import test from "node:test";
import { syncSharedSkillPackages } from "../scripts/lib/shared-skill-packages.mjs";
async function makeTempDir(prefix) {
return fs.mkdtemp(path.join(os.tmpdir(), prefix));
}
async function writeFile(filePath, contents = "") {
await fs.mkdir(path.dirname(filePath), { recursive: true });
await fs.writeFile(filePath, contents);
}
async function writeJson(filePath, value) {
await writeFile(filePath, `${JSON.stringify(value, null, 2)}\n`);
}
test("syncSharedSkillPackages vendors workspace packages into skill scripts", async (t) => {
const root = await makeTempDir("baoyu-sync-shared-");
t.after(() => fs.rm(root, { recursive: true, force: true }));
await writeJson(path.join(root, "packages", "baoyu-md", "package.json"), {
name: "baoyu-md",
version: "1.0.0",
});
await writeFile(
path.join(root, "packages", "baoyu-md", "src", "index.ts"),
"export const markdown = true;\n",
);
const consumerDir = path.join(root, "skills", "demo-skill", "scripts");
await writeJson(path.join(consumerDir, "package.json"), {
name: "demo-skill-scripts",
version: "1.0.0",
dependencies: {
"baoyu-md": "^1.0.0",
kleur: "^4.1.5",
},
});
const result = await syncSharedSkillPackages(root, { install: false });
assert.deepEqual(result.packageDirs, [consumerDir]);
assert.deepEqual(result.managedPaths, [
"skills/demo-skill/scripts/bun.lock",
"skills/demo-skill/scripts/package.json",
"skills/demo-skill/scripts/vendor",
]);
const updatedPackageJson = JSON.parse(
await fs.readFile(path.join(consumerDir, "package.json"), "utf8"),
);
assert.equal(updatedPackageJson.dependencies["baoyu-md"], "file:./vendor/baoyu-md");
assert.equal(updatedPackageJson.dependencies.kleur, "^4.1.5");
const vendoredPackageJson = JSON.parse(
await fs.readFile(path.join(consumerDir, "vendor", "baoyu-md", "package.json"), "utf8"),
);
assert.equal(vendoredPackageJson.name, "baoyu-md");
const vendoredFile = await fs.readFile(
path.join(consumerDir, "vendor", "baoyu-md", "src", "index.ts"),
"utf8",
);
assert.match(vendoredFile, /markdown = true/);
});