test: expand install safe path coverage

This commit is contained in:
Peter Steinberger 2026-03-13 18:58:22 +00:00
parent 6a545c04eb
commit 0f48556241
1 changed files with 55 additions and 1 deletions

View File

@ -2,7 +2,33 @@ import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { describe, expect, it } from "vitest";
import { assertCanonicalPathWithinBase, safePathSegmentHashed } from "./install-safe-path.js";
import {
assertCanonicalPathWithinBase,
resolveSafeInstallDir,
safeDirName,
safePathSegmentHashed,
unscopedPackageName,
} from "./install-safe-path.js";
describe("unscopedPackageName", () => {
it.each([
{ value: "@openclaw/matrix", expected: "matrix" },
{ value: " matrix ", expected: "matrix" },
{ value: "", expected: "" },
])("normalizes package names for %j", ({ value, expected }) => {
expect(unscopedPackageName(value)).toBe(expected);
});
});
describe("safeDirName", () => {
it.each([
{ value: " matrix ", expected: "matrix" },
{ value: "../matrix/plugin", expected: "..__matrix__plugin" },
{ value: "dir\\plugin", expected: "dir__plugin" },
])("normalizes install dir names for %j", ({ value, expected }) => {
expect(safeDirName(value)).toBe(expected);
});
});
describe("safePathSegmentHashed", () => {
it("keeps safe names unchanged", () => {
@ -24,6 +50,34 @@ describe("safePathSegmentHashed", () => {
});
});
describe("resolveSafeInstallDir", () => {
it("resolves install dirs under the base directory", () => {
expect(
resolveSafeInstallDir({
baseDir: "/tmp/plugins",
id: "@openclaw/matrix",
invalidNameMessage: "invalid plugin name",
}),
).toEqual({
ok: true,
path: path.join("/tmp/plugins", "@openclaw__matrix"),
});
});
it("rejects ids that resolve to the base directory itself", () => {
expect(
resolveSafeInstallDir({
baseDir: "/tmp/plugins",
id: " ",
invalidNameMessage: "invalid plugin name",
}),
).toEqual({
ok: false,
error: "invalid plugin name",
});
});
});
describe("assertCanonicalPathWithinBase", () => {
it("accepts in-base directories", async () => {
const baseDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-install-safe-"));