Files
oh-my-pi/scripts/release.test.ts
T
metaphorics 726698e2b0 fix(release): validate explicit versions and drop duplicate comparators
Review findings on #7586:
- validate an explicit release version before comparing; the shared
  comparator never throws, so 999.bad previously reached every manifest
- ci-release-notes imports the comparator by relative path: the
  release_github job runs without bun install
- route Bun cache pruning through compareVersions and delete
  compareSemverLikeVersions
- regression test for the release-version guard
2026-08-05 02:48:59 +09:00

37 lines
1.5 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { isValidExplicitVersion } from "./release";
describe("isValidExplicitVersion", () => {
test("rejects malformed versions", () => {
expect(isValidExplicitVersion("999.bad")).toBe(false);
expect(isValidExplicitVersion("17")).toBe(false);
expect(isValidExplicitVersion("17.2")).toBe(false);
expect(isValidExplicitVersion("17.2.8.9")).toBe(false);
expect(isValidExplicitVersion("v17.2.8.9")).toBe(false);
expect(isValidExplicitVersion("abc")).toBe(false);
expect(isValidExplicitVersion("")).toBe(false);
expect(isValidExplicitVersion("v")).toBe(false);
expect(isValidExplicitVersion("17.2.8-")).toBe(false);
});
test("accepts valid three-segment numeric versions", () => {
expect(isValidExplicitVersion("17.2.8")).toBe(true);
expect(isValidExplicitVersion("0.0.0")).toBe(true);
expect(isValidExplicitVersion("1.0.0")).toBe(true);
});
test("accepts leading v prefix", () => {
expect(isValidExplicitVersion("v17.2.8")).toBe(true);
expect(isValidExplicitVersion("V17.2.8")).toBe(false);
});
test("accepts prerelease suffixes", () => {
expect(isValidExplicitVersion("17.2.8-rc.1")).toBe(true);
expect(isValidExplicitVersion("v17.2.8-rc.1")).toBe(true);
expect(isValidExplicitVersion("1.0.0-beta")).toBe(true);
expect(isValidExplicitVersion("1.0.0-alpha.1.2")).toBe(true);
expect(isValidExplicitVersion("1.0.0-0.3.7")).toBe(true);
expect(isValidExplicitVersion("1.0.0-x.7.z.92")).toBe(true);
});
});