76 lines
2.8 KiB
JavaScript
76 lines
2.8 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
import { tmpdir } from "node:os";
|
|
import { dirname, join, resolve } from "node:path";
|
|
import { spawnSync } from "node:child_process";
|
|
import test from "node:test";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const projectRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
const cli = join(projectRoot, "bin", "open-kimi-ppt-skills.js");
|
|
|
|
function runCli(args, env = process.env) {
|
|
return spawnSync(process.execPath, [cli, ...args], {
|
|
encoding: "utf8",
|
|
env,
|
|
});
|
|
}
|
|
|
|
test("installs the packaged skill into a custom skills directory", () => {
|
|
const root = mkdtempSync(join(tmpdir(), "open-kimi-ppt-test-"));
|
|
const target = join(root, "skills");
|
|
|
|
try {
|
|
const result = runCli(["install", "--target", target]);
|
|
assert.equal(result.status, 0, result.stderr);
|
|
assert.equal(existsSync(join(target, "open-kimi-ppt", "SKILL.md")), true);
|
|
assert.equal(existsSync(join(target, "open-kimi-ppt", "scripts", "export_pptx.py")), true);
|
|
assert.equal(existsSync(join(target, "open-kimi-ppt", "_user_meta.json")), false);
|
|
} finally {
|
|
rmSync(root, { recursive: true, force: true });
|
|
}
|
|
});
|
|
|
|
test("installs into ~/.agents/skills when no target is provided", () => {
|
|
const root = mkdtempSync(join(tmpdir(), "open-kimi-ppt-test-"));
|
|
|
|
try {
|
|
const result = runCli([], { ...process.env, HOME: root, USERPROFILE: root, CODEX_HOME: undefined });
|
|
assert.equal(result.status, 0, result.stderr);
|
|
assert.equal(existsSync(join(root, ".agents", "skills", "open-kimi-ppt", "SKILL.md")), true);
|
|
} finally {
|
|
rmSync(root, { recursive: true, force: true });
|
|
}
|
|
});
|
|
|
|
test("refuses to overwrite an existing installation without --force", () => {
|
|
const root = mkdtempSync(join(tmpdir(), "open-kimi-ppt-test-"));
|
|
const target = join(root, "skills");
|
|
|
|
try {
|
|
assert.equal(runCli(["--target", target]).status, 0);
|
|
const secondInstall = runCli(["--target", target]);
|
|
assert.equal(secondInstall.status, 1);
|
|
assert.match(secondInstall.stderr, /already exists/);
|
|
} finally {
|
|
rmSync(root, { recursive: true, force: true });
|
|
}
|
|
});
|
|
|
|
test("replaces an existing installation with --force", () => {
|
|
const root = mkdtempSync(join(tmpdir(), "open-kimi-ppt-test-"));
|
|
const target = join(root, "skills");
|
|
const skillFile = join(target, "open-kimi-ppt", "SKILL.md");
|
|
|
|
try {
|
|
assert.equal(runCli(["--target", target]).status, 0);
|
|
writeFileSync(skillFile, "modified", "utf8");
|
|
|
|
const result = runCli(["--target", target, "--force"]);
|
|
assert.equal(result.status, 0, result.stderr);
|
|
assert.match(readFileSync(skillFile, "utf8"), /^---\nname: open-kimi-ppt/m);
|
|
} finally {
|
|
rmSync(root, { recursive: true, force: true });
|
|
}
|
|
});
|