scripts/release-tools.test.mjs
Rama main · réplica de lectura del repositorio original.
import assert from "node:assert/strict";
import test from "node:test";
import {
extractReleaseSection,
inspectLicenseReport,
isUnreleasedEmpty,
normalizeVersion
} from "./release-tools.mjs";
test("normalizes supported release versions", () => {
assert.equal(normalizeVersion("v0.1.0"), "0.1.0");
assert.equal(normalizeVersion("0.2.0-rc.3"), "0.2.0-rc.3");
assert.throws(() => normalizeVersion("0.1"));
});
test("extracts one changelog release and detects an empty Unreleased section", () => {
const changelog = `# Changelog
## [Unreleased]
<!-- Add pending changes here. -->
## [0.1.0]
### Added
- First release.
## Release history
No extra release-note text.
## [0.0.1]
- Old release.
`;
assert.equal(
extractReleaseSection(changelog, "0.1.0"),
"### Added\n\n- First release."
);
assert.equal(isUnreleasedEmpty(changelog), true);
assert.equal(
isUnreleasedEmpty(changelog.replace("<!-- Add pending changes here. -->", "- Pending.")),
false
);
assert.equal(
isUnreleasedEmpty(changelog.replace(
"<!-- Add pending changes here. -->",
"<!-- multiline\ncomment -->"
)),
false
);
assert.equal(
isUnreleasedEmpty(changelog.replace(
"<!-- Add pending changes here. -->",
"<!-- first --> visible <!-- second -->"
)),
false
);
});
test("accepts only fully reviewed permissive production dependency expressions", () => {
const result = inspectLicenseReport({
MIT: [
{ name: "a", versions: ["1.0.0"], license: "MIT" }
],
"MIT OR Apache-2.0": [
{ name: "b", versions: ["2.0.0"], license: "MIT OR Apache-2.0" }
]
});
assert.equal(result.packageCount, 2);
assert.deepEqual(result.licenses, ["MIT", "MIT OR Apache-2.0"]);
});
test("accepts only the exactly reviewed DOMPurify Apache alternative", () => {
const license = "(MPL-2.0 OR Apache-2.0)";
assert.equal(inspectLicenseReport({ [license]: [
{ name: "dompurify", versions: ["3.4.17"], license }
] }).packageCount, 1);
for (const [name, versions] of [
["dompurify", ["3.4.15"]],
["not-dompurify", ["3.4.17"]],
["dompurify", ["3.4.17", "3.4.15"]]
]) {
assert.throws(() => inspectLicenseReport({ [license]: [
{ name, versions, license }
] }));
}
assert.throws(() => inspectLicenseReport({ "MPL-2.0": [
{ name: "dompurify", versions: ["3.4.17"], license: "MPL-2.0" }
] }));
});
test("allows only reviewed khroma 2.1.0 MIT despite absent SPDX metadata", () => {
const report = { Unknown: [{ name: "khroma", versions: ["2.1.0"], license: "Unknown" }] };
assert.equal(inspectLicenseReport(report).packageCount, 1);
for (const [name, version] of [["khroma", "2.0.0"], ["not-khroma", "2.1.0"]]) {
assert.throws(() => inspectLicenseReport({ Unknown: [
{ name, versions: [version], license: "Unknown" }
] }));
}
});
test("fails closed for unknown or restricted-only licenses", () => {
assert.throws(() =>
inspectLicenseReport({
"GPL-3.0-only": [
{ name: "restricted", versions: ["1.0.0"], license: "GPL-3.0-only" }
]
})
);
assert.throws(() =>
inspectLicenseReport({
Unknown: [
{ name: "unknown", versions: ["1.0.0"], license: "Unknown" }
]
})
);
assert.throws(() =>
inspectLicenseReport({
"MIT OR GPL-3.0-only": [
{
name: "mixed-choice",
versions: ["1.0.0"],
license: "MIT OR GPL-3.0-only"
}
]
})
);
assert.throws(() =>
inspectLicenseReport({
"GPL-3.0-only AND (MIT OR Apache-2.0)": [
{
name: "nested-restricted",
versions: ["1.0.0"],
license: "GPL-3.0-only AND (MIT OR Apache-2.0)"
}
]
})
);
});