Ctrl K
ComunidadGuías…

scripts/release-tools.test.mjs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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)"
        }
      ]
    })
  );
});