mirror of
https://github.com/YuzuZensai/Termix.git
synced 2026-09-13 10:49:03 +00:00
81 lines
2.2 KiB
TypeScript
81 lines
2.2 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|||
|
|
import { createRequire } from "module";
|
||
|
|
import fs from "fs";
|
||
|
|
import os from "os";
|
||
|
|
import path from "path";
|
||
|
|
|
||
|
|
const require = createRequire(import.meta.url);
|
||
|
|
const { syncVersion } = require("./sync-version.cjs");
|
||
|
|
|
||
|
|
let root: string;
|
||
|
|
|
||
|
|
function pkg() {
|
||
|
|
return JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf8"));
|
||
|
|
}
|
||
|
|
function lock() {
|
||
|
|
return JSON.parse(
|
||
|
|
fs.readFileSync(path.join(root, "package-lock.json"), "utf8"),
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
beforeEach(() => {
|
||
|
|
root = fs.mkdtempSync(path.join(os.tmpdir(), "sync-version-"));
|
||
|
|
fs.writeFileSync(
|
||
|
|
path.join(root, "package.json"),
|
||
|
|
JSON.stringify({ name: "termix", version: "2.3.2" }, null, 2) + "\n",
|
||
|
|
);
|
||
|
|
fs.writeFileSync(
|
||
|
|
path.join(root, "package-lock.json"),
|
||
|
|
JSON.stringify(
|
||
|
|
{
|
||
|
|
name: "termix",
|
||
|
|
version: "2.3.2",
|
||
|
|
lockfileVersion: 3,
|
||
|
|
packages: { "": { name: "termix", version: "2.3.2" } },
|
||
|
|
},
|
||
|
|
null,
|
||
|
|
2,
|
||
|
|
) + "\n",
|
||
|
|
);
|
||
|
|
});
|
||
|
|
|
||
|
|
afterEach(() => {
|
||
|
|
fs.rmSync(root, { recursive: true, force: true });
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("syncVersion", () => {
|
||
|
|
it("updates package.json and both package-lock version fields", () => {
|
||
|
|
const changed = syncVersion("2.4.0", { root });
|
||
|
|
expect(changed).toEqual(["package.json", "package-lock.json"]);
|
||
|
|
expect(pkg().version).toBe("2.4.0");
|
||
|
|
expect(lock().version).toBe("2.4.0");
|
||
|
|
expect(lock().packages[""].version).toBe("2.4.0");
|
||
|
|
});
|
||
|
|
|
||
|
|
it("is idempotent when already at the target version", () => {
|
||
|
|
syncVersion("2.4.0", { root });
|
||
|
|
const changed = syncVersion("2.4.0", { root });
|
||
|
|
expect(changed).toEqual([]);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("preserves the trailing newline", () => {
|
||
|
|
syncVersion("2.4.0", { root });
|
||
|
|
expect(fs.readFileSync(path.join(root, "package.json"), "utf8")).toMatch(
|
||
|
|
/\}\n$/,
|
||
|
|
);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("rejects an invalid version", () => {
|
||
|
|
expect(() => syncVersion("2.4", { root })).toThrow(/invalid version/);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("works when only the lock root version is stale", () => {
|
||
|
|
fs.writeFileSync(
|
||
|
|
path.join(root, "package.json"),
|
||
|
|
JSON.stringify({ name: "termix", version: "2.4.0" }, null, 2) + "\n",
|
||
|
|
);
|
||
|
|
const changed = syncVersion("2.4.0", { root });
|
||
|
|
expect(changed).toEqual(["package-lock.json"]);
|
||
|
|
});
|
||
|
|
});
|