import assert from "node:assert/strict"; import test from "node:test"; import { buildReleaseUpdate, isVersionNewer, sanitizeFileName, selectInstallerAsset, } from "../main/updates/update-utils"; test("isVersionNewer compares semantic versions with optional v prefix", () => { assert.equal(isVersionNewer("v0.2.0", "0.1.9"), true); assert.equal(isVersionNewer("0.1.0", "0.1.0"), false); assert.equal(isVersionNewer("0.1.0", "0.2.0"), false); }); test("selectInstallerAsset picks the first matching exe asset", () => { const asset = selectInstallerAsset( { assets: [ { name: "latest.yml", browser_download_url: "http://gitea/latest.yml" }, { name: "Scoreko-setup-0.2.0.exe", browser_download_url: "http://gitea/Scoreko-setup-0.2.0.exe", size: 100 }, ], }, "Scoreko-setup-.*\\.exe$", ); assert.deepEqual(asset, { name: "Scoreko-setup-0.2.0.exe", downloadUrl: "http://gitea/Scoreko-setup-0.2.0.exe", size: 100, }); }); test("buildReleaseUpdate returns null when the release is not newer", () => { const update = buildReleaseUpdate( { tag_name: "v0.1.0", assets: [{ name: "Scoreko-setup-0.1.0.exe", browser_download_url: "http://gitea/Scoreko-setup-0.1.0.exe" }], }, "0.1.0", "Scoreko-setup-.*\\.exe$", ); assert.equal(update, null); }); test("buildReleaseUpdate builds update info for newer releases", () => { const update = buildReleaseUpdate( { tag_name: "v0.2.0", name: "Scoreko 0.2.0", html_url: "http://gitea/releases/v0.2.0", assets: [{ name: "Scoreko-setup-0.2.0.exe", browser_download_url: "http://gitea/Scoreko-setup-0.2.0.exe" }], }, "0.1.0", "Scoreko-setup-.*\\.exe$", ); assert.equal(update?.version, "0.2.0"); assert.equal(update?.title, "Scoreko 0.2.0"); assert.equal(update?.pageUrl, "http://gitea/releases/v0.2.0"); assert.equal(update?.installer.name, "Scoreko-setup-0.2.0.exe"); }); test("sanitizeFileName removes Windows-unsafe characters", () => { assert.equal(sanitizeFileName('Scoreko:setup*"0.2.0.exe'), "Scoreko_setup__0.2.0.exe"); });