feat: 新增 rune update 命令用于更新编辑器配置
This commit is contained in:
@@ -2,7 +2,8 @@ import { describe, it, expect, beforeEach, afterEach } from "bun:test";
|
||||
import { existsSync } from "node:fs";
|
||||
import { mkdir, rm, readFile, readdir } from "node:fs/promises";
|
||||
import { join } from "node:path";
|
||||
import { injectOpenCode } from "../../src/adapters/opencode.ts";
|
||||
import { writeFile } from "node:fs/promises";
|
||||
import { injectOpenCode, updateOpenCode } from "../../src/adapters/opencode.ts";
|
||||
|
||||
const TMP_DIR = join(import.meta.dir, "__tmp_opencode_test__");
|
||||
|
||||
@@ -108,3 +109,56 @@ describe("injectOpenCode", () => {
|
||||
expect(content).toBe(originalContent);
|
||||
});
|
||||
});
|
||||
|
||||
describe("updateOpenCode", () => {
|
||||
it("文件不存在时创建", async () => {
|
||||
await updateOpenCode(TMP_DIR);
|
||||
expect(
|
||||
existsSync(join(TMP_DIR, ".opencode", "commands", "rune-discuss.md")),
|
||||
).toBe(true);
|
||||
expect(
|
||||
existsSync(join(TMP_DIR, ".opencode", "skills", "rune-discuss", "SKILL.md")),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
it("文件存在且内容一致时不覆盖", async () => {
|
||||
await injectOpenCode(TMP_DIR);
|
||||
const originalContent = await readFile(
|
||||
join(TMP_DIR, ".opencode", "commands", "rune-discuss.md"),
|
||||
"utf-8",
|
||||
);
|
||||
|
||||
await updateOpenCode(TMP_DIR);
|
||||
const content = await readFile(
|
||||
join(TMP_DIR, ".opencode", "commands", "rune-discuss.md"),
|
||||
"utf-8",
|
||||
);
|
||||
expect(content).toBe(originalContent);
|
||||
});
|
||||
|
||||
it("文件存在但内容不一致时覆盖", async () => {
|
||||
await injectOpenCode(TMP_DIR);
|
||||
await writeFile(
|
||||
join(TMP_DIR, ".opencode", "commands", "rune-discuss.md"),
|
||||
"旧内容",
|
||||
);
|
||||
|
||||
await updateOpenCode(TMP_DIR);
|
||||
const content = await readFile(
|
||||
join(TMP_DIR, ".opencode", "commands", "rune-discuss.md"),
|
||||
"utf-8",
|
||||
);
|
||||
expect(content).not.toBe("旧内容");
|
||||
expect(content).toContain("rune-discuss");
|
||||
});
|
||||
|
||||
it("更新 status 命令和 skill", async () => {
|
||||
await updateOpenCode(TMP_DIR);
|
||||
expect(
|
||||
existsSync(join(TMP_DIR, ".opencode", "commands", "rune-status.md")),
|
||||
).toBe(true);
|
||||
expect(
|
||||
existsSync(join(TMP_DIR, ".opencode", "skills", "rune-status", "SKILL.md")),
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user