Files
Moltbot/src/cli/npm-resolution.test.ts
2026-02-22 07:44:56 +00:00

171 lines
5.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
buildNpmInstallRecordFields,
logPinnedNpmSpecMessages,
mapNpmResolutionMetadata,
resolvePinnedNpmInstallRecord,
resolvePinnedNpmInstallRecordForCli,
resolvePinnedNpmSpec,
} from "./npm-resolution.js";
describe("npm-resolution helpers", () => {
it("keeps original spec when pin is disabled", () => {
const result = resolvePinnedNpmSpec({
rawSpec: "@openclaw/plugin-alpha@latest",
pin: false,
resolvedSpec: "@openclaw/plugin-alpha@1.2.3",
});
expect(result).toEqual({
recordSpec: "@openclaw/plugin-alpha@latest",
});
});
it("warns when pin is enabled but resolved spec is missing", () => {
const result = resolvePinnedNpmSpec({
rawSpec: "@openclaw/plugin-alpha@latest",
pin: true,
});
expect(result).toEqual({
recordSpec: "@openclaw/plugin-alpha@latest",
pinWarning: "Could not resolve exact npm version for --pin; storing original npm spec.",
});
});
it("returns pinned spec notice when resolved spec is available", () => {
const result = resolvePinnedNpmSpec({
rawSpec: "@openclaw/plugin-alpha@latest",
pin: true,
resolvedSpec: "@openclaw/plugin-alpha@1.2.3",
});
expect(result).toEqual({
recordSpec: "@openclaw/plugin-alpha@1.2.3",
pinNotice: "Pinned npm install record to @openclaw/plugin-alpha@1.2.3.",
});
});
it("maps npm resolution metadata to install fields", () => {
expect(
mapNpmResolutionMetadata({
name: "@openclaw/plugin-alpha",
version: "1.2.3",
resolvedSpec: "@openclaw/plugin-alpha@1.2.3",
integrity: "sha512-abc",
shasum: "deadbeef",
resolvedAt: "2026-02-21T00:00:00.000Z",
}),
).toEqual({
resolvedName: "@openclaw/plugin-alpha",
resolvedVersion: "1.2.3",
resolvedSpec: "@openclaw/plugin-alpha@1.2.3",
integrity: "sha512-abc",
shasum: "deadbeef",
resolvedAt: "2026-02-21T00:00:00.000Z",
});
});
it("builds common npm install record fields", () => {
expect(
buildNpmInstallRecordFields({
spec: "@openclaw/plugin-alpha@1.2.3",
installPath: "/tmp/openclaw/extensions/alpha",
version: "1.2.3",
resolution: {
name: "@openclaw/plugin-alpha",
version: "1.2.3",
resolvedSpec: "@openclaw/plugin-alpha@1.2.3",
integrity: "sha512-abc",
},
}),
).toEqual({
source: "npm",
spec: "@openclaw/plugin-alpha@1.2.3",
installPath: "/tmp/openclaw/extensions/alpha",
version: "1.2.3",
resolvedName: "@openclaw/plugin-alpha",
resolvedVersion: "1.2.3",
resolvedSpec: "@openclaw/plugin-alpha@1.2.3",
integrity: "sha512-abc",
shasum: undefined,
resolvedAt: undefined,
});
});
it("logs pin warning/notice messages through provided writers", () => {
const logs: string[] = [];
const warns: string[] = [];
logPinnedNpmSpecMessages(
{
pinWarning: "warn-1",
pinNotice: "notice-1",
},
(message) => logs.push(message),
(message) => warns.push(message),
);
expect(logs).toEqual(["notice-1"]);
expect(warns).toEqual(["warn-1"]);
});
it("resolves pinned install record and emits pin notice", () => {
const logs: string[] = [];
const warns: string[] = [];
const record = resolvePinnedNpmInstallRecord({
rawSpec: "@openclaw/plugin-alpha@latest",
pin: true,
installPath: "/tmp/openclaw/extensions/alpha",
version: "1.2.3",
resolution: {
name: "@openclaw/plugin-alpha",
version: "1.2.3",
resolvedSpec: "@openclaw/plugin-alpha@1.2.3",
},
log: (message) => logs.push(message),
warn: (message) => warns.push(message),
});
expect(record).toEqual({
source: "npm",
spec: "@openclaw/plugin-alpha@1.2.3",
installPath: "/tmp/openclaw/extensions/alpha",
version: "1.2.3",
resolvedName: "@openclaw/plugin-alpha",
resolvedVersion: "1.2.3",
resolvedSpec: "@openclaw/plugin-alpha@1.2.3",
integrity: undefined,
shasum: undefined,
resolvedAt: undefined,
});
expect(logs).toEqual(["Pinned npm install record to @openclaw/plugin-alpha@1.2.3."]);
expect(warns).toEqual([]);
});
it("resolves pinned install record for CLI and formats warning output", () => {
const logs: string[] = [];
const record = resolvePinnedNpmInstallRecordForCli(
"@openclaw/plugin-alpha@latest",
true,
"/tmp/openclaw/extensions/alpha",
"1.2.3",
undefined,
(message) => logs.push(message),
(message) => `[warn] ${message}`,
);
expect(record).toEqual({
source: "npm",
spec: "@openclaw/plugin-alpha@latest",
installPath: "/tmp/openclaw/extensions/alpha",
version: "1.2.3",
resolvedName: undefined,
resolvedVersion: undefined,
resolvedSpec: undefined,
integrity: undefined,
shasum: undefined,
resolvedAt: undefined,
});
expect(logs).toEqual([
"[warn] Could not resolve exact npm version for --pin; storing original npm spec.",
]);
});
});