import { describe, expect, it } from "vitest" ;
import { describePluginInstallSource } from "./install-source-info.js" ;
describe("describePluginInstallSource" , () => {
it("marks exact npm specs with integrity as fully pinned" , () => {
expect(
describePluginInstallSource({
npmSpec: "@vendor/demo@1.2.3" ,
expectedIntegrity: " sha512-demo " ,
defaultChoice: "npm" ,
}),
).toEqual({
defaultChoice: "npm" ,
npm: {
spec: "@vendor/demo@1.2.3" ,
packageName: "@vendor/demo" ,
selector: "1.2.3" ,
selectorKind: "exact-version" ,
exactVersion: true ,
expectedIntegrity: "sha512-demo" ,
pinState: "exact-with-integrity" ,
},
warnings: [],
});
});
it("marks exact npm specs without integrity as version-pinned only" , () => {
expect(
describePluginInstallSource({
npmSpec: "@vendor/demo@1.2.3" ,
}),
).toEqual({
npm: {
spec: "@vendor/demo@1.2.3" ,
packageName: "@vendor/demo" ,
selector: "1.2.3" ,
selectorKind: "exact-version" ,
exactVersion: true ,
pinState: "exact-without-integrity" ,
},
warnings: ["npm-spec-missing-integrity" ],
});
});
it("omits whitespace-only integrity from npm source facts" , () => {
expect(
describePluginInstallSource({
npmSpec: "@vendor/demo@1.2.3" ,
expectedIntegrity: " " ,
}),
).toEqual({
npm: {
spec: "@vendor/demo@1.2.3" ,
packageName: "@vendor/demo" ,
selector: "1.2.3" ,
selectorKind: "exact-version" ,
exactVersion: true ,
pinState: "exact-without-integrity" ,
},
warnings: ["npm-spec-missing-integrity" ],
});
});
it("treats non-string integrity metadata as missing" , () => {
expect(
describePluginInstallSource({
npmSpec: "@vendor/demo@1.2.3" ,
expectedIntegrity: 123 ,
} as never),
).toEqual({
npm: {
spec: "@vendor/demo@1.2.3" ,
packageName: "@vendor/demo" ,
selector: "1.2.3" ,
selectorKind: "exact-version" ,
exactVersion: true ,
pinState: "exact-without-integrity" ,
},
warnings: ["npm-spec-missing-integrity" ],
});
});
it("surfaces floating specs with integrity without rejecting them" , () => {
expect(
describePluginInstallSource({
npmSpec: "@vendor/demo@beta" ,
expectedIntegrity: "sha512-demo" ,
}),
).toEqual({
npm: {
spec: "@vendor/demo@beta" ,
packageName: "@vendor/demo" ,
selector: "beta" ,
selectorKind: "tag" ,
exactVersion: false ,
expectedIntegrity: "sha512-demo" ,
pinState: "floating-with-integrity" ,
},
warnings: ["npm-spec-floating" ],
});
});
it("surfaces floating specs without integrity without rejecting them" , () => {
expect(
describePluginInstallSource({
npmSpec: "@vendor/demo@beta" ,
}),
).toEqual({
npm: {
spec: "@vendor/demo@beta" ,
packageName: "@vendor/demo" ,
selector: "beta" ,
selectorKind: "tag" ,
exactVersion: false ,
pinState: "floating-without-integrity" ,
},
warnings: ["npm-spec-floating" , "npm-spec-missing-integrity" ],
});
});
it("reports invalid npm specs while preserving local source metadata" , () => {
expect(
describePluginInstallSource({
npmSpec: "github:vendor/demo" ,
localPath: "extensions/demo" ,
}),
).toEqual({
local: {
path: "extensions/demo" ,
},
warnings: ["invalid-npm-spec" ],
});
});
it("warns when defaultChoice is not a supported install source" , () => {
expect(
describePluginInstallSource({
npmSpec: "@vendor/demo@1.2.3" ,
defaultChoice: "registry" ,
} as never),
).toEqual({
npm: {
spec: "@vendor/demo@1.2.3" ,
packageName: "@vendor/demo" ,
selector: "1.2.3" ,
selectorKind: "exact-version" ,
exactVersion: true ,
pinState: "exact-without-integrity" ,
},
warnings: ["invalid-default-choice" , "npm-spec-missing-integrity" ],
});
});
it("warns when defaultChoice points at a missing source" , () => {
expect(
describePluginInstallSource({
localPath: "extensions/demo" ,
defaultChoice: "npm" ,
}),
).toEqual({
defaultChoice: "npm" ,
local: {
path: "extensions/demo" ,
},
warnings: ["default-choice-missing-source" ],
});
});
it("warns when defaultChoice points at an invalid npm source" , () => {
expect(
describePluginInstallSource({
npmSpec: "github:vendor/demo" ,
defaultChoice: "npm" ,
}),
).toEqual({
defaultChoice: "npm" ,
warnings: ["invalid-npm-spec" , "default-choice-missing-source" ],
});
});
it("warns when integrity metadata has no npm source" , () => {
expect(
describePluginInstallSource({
localPath: "extensions/demo" ,
expectedIntegrity: "sha512-demo" ,
}),
).toEqual({
local: {
path: "extensions/demo" ,
},
warnings: ["npm-integrity-without-source" ],
});
});
it("warns when integrity metadata is attached to an invalid npm source" , () => {
expect(
describePluginInstallSource({
npmSpec: "github:vendor/demo" ,
expectedIntegrity: "sha512-demo" ,
}),
).toEqual({
warnings: ["invalid-npm-spec" , "npm-integrity-without-source" ],
});
});
it("warns when the npm spec package name drifts from catalog package identity" , () => {
expect(
describePluginInstallSource(
{
npmSpec: "@vendor/other@1.2.3" ,
expectedIntegrity: "sha512-demo" ,
},
{ expectedPackageName: "@vendor/demo" },
),
).toEqual({
npm: {
spec: "@vendor/other@1.2.3" ,
packageName: "@vendor/other" ,
expectedPackageName: "@vendor/demo" ,
selector: "1.2.3" ,
selectorKind: "exact-version" ,
exactVersion: true ,
expectedIntegrity: "sha512-demo" ,
pinState: "exact-with-integrity" ,
},
warnings: ["npm-spec-package-name-mismatch" ],
});
});
});
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.8 Sekunden
(vorverarbeitet am 2026-06-09)
¤
*© Formatika GbR, Deutschland