mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-09 13:21:47 +00:00
77 lines
2.3 KiB
TypeScript
77 lines
2.3 KiB
TypeScript
import { afterEach, describe, expect, it } from "vitest";
|
|
import fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import { spawnSync } from "node:child_process";
|
|
|
|
const roots: string[] = [];
|
|
afterEach(() => {
|
|
for (const root of roots.splice(0))
|
|
fs.rmSync(root, { recursive: true, force: true });
|
|
});
|
|
|
|
function fixture() {
|
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), "termix-cli-bootstrap-"));
|
|
roots.push(root);
|
|
const repo = path.resolve(import.meta.dirname, "..");
|
|
fs.cpSync(
|
|
path.join(repo, "packages/plugin-sdk/cli"),
|
|
path.join(root, "packages/plugin-sdk/cli"),
|
|
{ recursive: true },
|
|
);
|
|
fs.symlinkSync(
|
|
path.join(repo, "node_modules"),
|
|
path.join(root, "node_modules"),
|
|
"dir",
|
|
);
|
|
const plugin = path.join(root, "fixture");
|
|
fs.mkdirSync(plugin);
|
|
fs.writeFileSync(
|
|
path.join(plugin, "manifest.json"),
|
|
JSON.stringify({ id: "fixture" }),
|
|
);
|
|
fs.writeFileSync(
|
|
path.join(plugin, "package.json"),
|
|
JSON.stringify({ name: "fixture" }),
|
|
);
|
|
const run = (...args: string[]) =>
|
|
spawnSync(process.execPath, args, { cwd: plugin, encoding: "utf8" });
|
|
return {
|
|
root,
|
|
plugin,
|
|
run,
|
|
cli: path.join(root, "packages/plugin-sdk/cli/index.mjs"),
|
|
};
|
|
}
|
|
|
|
describe("plugin CLI before the SDK is built", () => {
|
|
it("prints help without SDK dist files", () => {
|
|
const { cli, run } = fixture();
|
|
const result = run(cli, "--help");
|
|
expect(result.status, result.stderr).toBe(0);
|
|
expect(result.stdout).toContain("Usage: termix-plugin");
|
|
});
|
|
it("still requires a built SDK for validation with an actionable error", () => {
|
|
const { cli, run } = fixture();
|
|
const result = run(cli, "validate");
|
|
expect(result.status).toBe(1);
|
|
expect(result.stderr).toContain("Run: npm run build:sdk");
|
|
expect(result.stderr).not.toContain("ERR_MODULE_NOT_FOUND");
|
|
});
|
|
});
|
|
|
|
describe("termix-plugin test", () => {
|
|
it("applies the plugin's patches before running vitest", () => {
|
|
const { cli, plugin, run } = fixture();
|
|
fs.mkdirSync(path.join(plugin, "patches"));
|
|
fs.writeFileSync(
|
|
path.join(plugin, "patches", "mark.cjs"),
|
|
'require("node:fs").writeFileSync("patched.txt", "yes");',
|
|
);
|
|
run(cli, "test");
|
|
expect(fs.readFileSync(path.join(plugin, "patched.txt"), "utf8")).toBe(
|
|
"yes",
|
|
);
|
|
});
|
|
});
|