mc-publish/tests/unit/utils/versioning/version.spec.ts
2023-05-17 15:46:26 +03:00

81 lines
3.7 KiB
TypeScript

import { parseVersion } from "@/utils/versioning/version";
describe("parseVersion", () => {
test("returns undefined when parsing invalid string", () => {
const version = parseVersion("abc");
expect(version).toBeUndefined();
});
test("parses classic semver format (major.minor.patch)", () => {
const version = parseVersion("1.2.3");
expect(version).toMatchObject({ major: 1, minor: 2, patch: 3 });
});
test("parses classic semver format with pre-release information", () => {
const version = parseVersion("1.2.3-alpha.1");
expect(version).toMatchObject({ major: 1, minor: 2, patch: 3 });
expect(version.toString()).toBe("1.2.3-alpha.1");
});
test("parses version strings with missing patch number (major.minor)", () => {
const version = parseVersion("1.2");
expect(version).toMatchObject({ major: 1, minor: 2, patch: 0 });
expect(version.format()).toBe("1.2.0");
expect(version.toString()).toBe("1.2");
});
test("parses version strings with missing patch number and pre-release information", () => {
const version = parseVersion("1.2-alpha.1");
expect(version).toMatchObject({ major: 1, minor: 2, patch: 0 });
expect(version.format()).toBe("1.2.0-alpha.1");
expect(version.toString()).toBe("1.2-alpha.1");
});
test("file version is correctly extracted from the filename", () => {
expect(String(parseVersion("sodium-fabric-mc1.17.1-0.3.2+build.7"))).toBe("mc1.17.1-0.3.2+build.7");
expect(String(parseVersion("fabric-api-0.40.1+1.18_experimental"))).toBe("0.40.1+1.18_experimental");
expect(String(parseVersion("TechReborn-5.0.8-beta+build.111"))).toBe("5.0.8-beta+build.111");
expect(String(parseVersion("TechReborn-1.17-5.0.1-beta+build.29"))).toBe("1.17-5.0.1-beta+build.29");
expect(String(parseVersion("Terra-forge-5.3.3-BETA+ec3b0e5d"))).toBe("5.3.3-BETA+ec3b0e5d");
expect(String(parseVersion("modmenu-2.0.12"))).toBe("2.0.12");
expect(String(parseVersion("enhancedblockentities-0.5+1.17"))).toBe("0.5+1.17");
expect(String(parseVersion("sync-mc1.17.x-1.2"))).toBe("mc1.17.x-1.2");
});
});
describe("Version", () => {
test("contains valid major, minor, and patch numbers", () => {
expect(parseVersion("1.2.3")).toMatchObject({ major: 1, minor: 2, patch: 3 });
expect(parseVersion("1.2.3-alpha.1")).toMatchObject({ major: 1, minor: 2, patch: 3 });
expect(parseVersion("1.2")).toMatchObject({ major: 1, minor: 2, patch: 0 });
expect(parseVersion("1.2-alpha.1")).toMatchObject({ major: 1, minor: 2, patch: 0 });
});
test("compares versions correctly", () => {
const version1 = parseVersion("1.2.3");
const version2 = parseVersion("2.3.4");
expect(version1.compare(version2)).toBeLessThan(0);
expect(version2.compare(version1)).toBeGreaterThan(0);
expect(version1.compare(version1)).toBe(0);
});
test("formats correctly", () => {
expect(parseVersion("1.0.0").format()).toEqual("1.0.0");
expect(parseVersion("1.0.0-alpha.1").format()).toEqual("1.0.0-alpha.1");
expect(parseVersion("1.0").format()).toEqual("1.0.0");
expect(parseVersion("1.0-alpha.1").format()).toEqual("1.0.0-alpha.1");
});
test("toString returns the original string representation", () => {
expect(parseVersion("1.0.0").toString()).toEqual("1.0.0");
expect(parseVersion("1.0").toString()).toEqual("1.0");
expect(parseVersion("1.0.0-alpha.1").toString()).toEqual("1.0.0-alpha.1");
expect(parseVersion("1.0-alpha.1").toString()).toEqual("1.0-alpha.1");
});
});