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] ## [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("", "- Pending.")), false ); assert.equal( isUnreleasedEmpty(changelog.replace( "", "" )), false ); assert.equal( isUnreleasedEmpty(changelog.replace( "", " visible " )), 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)" } ] }) ); });