Files
openclaw/src/plugins/installs.test.ts
2026-02-22 21:19:09 +00:00

46 lines
1.5 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { buildNpmResolutionInstallFields, recordPluginInstall } from "./installs.js";
describe("buildNpmResolutionInstallFields", () => {
it("maps npm resolution metadata into install record fields", () => {
const fields = buildNpmResolutionInstallFields({
name: "@openclaw/demo",
version: "1.2.3",
resolvedSpec: "@openclaw/demo@1.2.3",
integrity: "sha512-abc",
shasum: "deadbeef",
resolvedAt: "2026-02-22T00:00:00.000Z",
});
expect(fields).toEqual({
resolvedName: "@openclaw/demo",
resolvedVersion: "1.2.3",
resolvedSpec: "@openclaw/demo@1.2.3",
integrity: "sha512-abc",
shasum: "deadbeef",
resolvedAt: "2026-02-22T00:00:00.000Z",
});
});
it("returns undefined fields when resolution is missing", () => {
expect(buildNpmResolutionInstallFields(undefined)).toEqual({
resolvedName: undefined,
resolvedVersion: undefined,
resolvedSpec: undefined,
integrity: undefined,
shasum: undefined,
resolvedAt: undefined,
});
});
});
describe("recordPluginInstall", () => {
it("stores install metadata for the plugin id", () => {
const next = recordPluginInstall({}, { pluginId: "demo", source: "npm", spec: "demo@latest" });
expect(next.plugins?.installs?.demo).toMatchObject({
source: "npm",
spec: "demo@latest",
});
expect(typeof next.plugins?.installs?.demo?.installedAt).toBe("string");
});
});