// @vitest-environment node
import { describe, it, expect } from "vitest";
import { computeNightlyVersion } from "./nightly-version.mjs";

const now = new Date("2026-06-27T03:00:00.000Z");

describe("computeNightlyVersion", () => {
	it("bumps the patch and formats a UTC-timestamped nightly prerelease with sha build metadata", () => {
		expect(computeNightlyVersion("0.10.3", now, "ab12cd3")).toBe("0.10.4-nightly.202606270300+ab12cd3");
	});

	it("strips a v / desktop-v tag prefix", () => {
		expect(computeNightlyVersion("v0.10.3", now, "ab12cd3")).toBe("0.10.4-nightly.202606270300+ab12cd3");
		expect(computeNightlyVersion("desktop-v0.10.3", now, "ab12cd3")).toBe("0.10.4-nightly.202606270300+ab12cd3");
	});

	it("orders monotonically by timestamp for the same base", () => {
		const earlier = computeNightlyVersion("0.10.3", new Date("2026-06-27T03:00:00Z"), "aaaaaaa");
		const later = computeNightlyVersion("0.10.3", new Date("2026-06-27T04:00:00Z"), "bbbbbbb");
		// prerelease identifiers compare lexically; zero-padded fixed-width timestamp sorts correctly
		expect(later > earlier).toBe(true);
	});

	it("rejects a non-semver base tag", () => {
		expect(() => computeNightlyVersion("not-a-version", now, "ab12cd3")).toThrow();
	});
});
