mirror of
https://github.com/badlogic/pi-mono.git
synced 2026-05-23 04:27:50 +00:00
90 lines
2.9 KiB
TypeScript
90 lines
2.9 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import {
|
|
checkForNewPiVersion,
|
|
comparePackageVersions,
|
|
getLatestPiRelease,
|
|
getLatestPiVersion,
|
|
isNewerPackageVersion,
|
|
} from "../src/utils/version-check.ts";
|
|
|
|
const originalSkipVersionCheck = process.env.PI_SKIP_VERSION_CHECK;
|
|
const originalOffline = process.env.PI_OFFLINE;
|
|
|
|
afterEach(() => {
|
|
vi.unstubAllGlobals();
|
|
if (originalSkipVersionCheck === undefined) {
|
|
delete process.env.PI_SKIP_VERSION_CHECK;
|
|
} else {
|
|
process.env.PI_SKIP_VERSION_CHECK = originalSkipVersionCheck;
|
|
}
|
|
if (originalOffline === undefined) {
|
|
delete process.env.PI_OFFLINE;
|
|
} else {
|
|
process.env.PI_OFFLINE = originalOffline;
|
|
}
|
|
});
|
|
|
|
describe("version checks", () => {
|
|
it("compares package versions", () => {
|
|
expect(comparePackageVersions("0.70.6", "0.70.5")).toBeGreaterThan(0);
|
|
expect(comparePackageVersions("0.70.5", "0.70.5")).toBe(0);
|
|
expect(comparePackageVersions("0.70.4", "0.70.5")).toBeLessThan(0);
|
|
expect(isNewerPackageVersion("0.70.5", "0.70.5")).toBe(false);
|
|
expect(isNewerPackageVersion("0.70.6", "0.70.5")).toBe(true);
|
|
});
|
|
|
|
it("returns only newer versions", async () => {
|
|
const fetchMock = vi.fn(async () => Response.json({ version: "1.2.3" }));
|
|
vi.stubGlobal("fetch", fetchMock);
|
|
|
|
await expect(checkForNewPiVersion("1.2.3")).resolves.toBeUndefined();
|
|
await expect(checkForNewPiVersion("1.2.2")).resolves.toEqual({ version: "1.2.3" });
|
|
});
|
|
|
|
it("uses the pi.dev version check api with a pi user agent", async () => {
|
|
const fetchMock = vi.fn(async () => Response.json({ version: "1.2.4" }));
|
|
vi.stubGlobal("fetch", fetchMock);
|
|
|
|
await expect(getLatestPiVersion("1.2.3")).resolves.toBe("1.2.4");
|
|
expect(fetchMock).toHaveBeenCalledWith(
|
|
"https://pi.dev/api/latest-version",
|
|
expect.objectContaining({
|
|
headers: expect.objectContaining({
|
|
"User-Agent": expect.stringMatching(/^pi\/1\.2\.3 /),
|
|
accept: "application/json",
|
|
}),
|
|
}),
|
|
);
|
|
});
|
|
|
|
it("returns the active package metadata from the version check api", async () => {
|
|
const fetchMock = vi.fn(async () =>
|
|
Response.json({
|
|
packageName: "@new-scope/pi",
|
|
version: "1.2.4",
|
|
}),
|
|
);
|
|
vi.stubGlobal("fetch", fetchMock);
|
|
|
|
await expect(getLatestPiRelease("1.2.3")).resolves.toEqual({
|
|
packageName: "@new-scope/pi",
|
|
version: "1.2.4",
|
|
});
|
|
});
|
|
|
|
it("returns update notes from the version check api", async () => {
|
|
const fetchMock = vi.fn(async () => Response.json({ note: " **Read this** ", version: "1.2.4" }));
|
|
vi.stubGlobal("fetch", fetchMock);
|
|
|
|
await expect(getLatestPiRelease("1.2.3")).resolves.toEqual({ note: "**Read this**", version: "1.2.4" });
|
|
});
|
|
|
|
it("skips api calls when version checks are disabled", async () => {
|
|
process.env.PI_SKIP_VERSION_CHECK = "1";
|
|
const fetchMock = vi.fn();
|
|
vi.stubGlobal("fetch", fetchMock);
|
|
|
|
await expect(getLatestPiVersion("1.2.3")).resolves.toBeUndefined();
|
|
expect(fetchMock).not.toHaveBeenCalled();
|
|
});
|
|
});
|