Files
t8y2--dbx/packages/app-tests/appUpdater.test.ts
T
2026-07-13 13:09:14 +08:00

53 lines
2.5 KiB
TypeScript
Vendored

import assert from "node:assert/strict";
import { test } from "vitest";
import { canDownloadAndInstallUpdate, normalizeUpdateDownloadSource, resolveUpdateReleaseUrl, tagVersion } from "../../apps/desktop/src/composables/useAppUpdater.ts";
import type { UpdateInfo } from "../../apps/desktop/src/lib/backend/api.ts";
function updateInfo(overrides: Partial<UpdateInfo> = {}): UpdateInfo {
return {
current_version: "0.5.25",
latest_version: "0.5.26",
update_available: true,
portable_mode: false,
release_name: "DBX v0.5.26",
release_url: "https://github.com/t8y2/dbx/releases/tag/v0.5.26",
release_notes: "",
...overrides,
};
}
test("allows in-app update installation for installed desktop builds", () => {
assert.equal(canDownloadAndInstallUpdate(updateInfo(), true), true);
});
test("blocks in-app update installation for portable builds", () => {
assert.equal(canDownloadAndInstallUpdate(updateInfo({ portable_mode: true }), true), false);
});
test("blocks in-app update installation outside desktop runtime or without an update", () => {
assert.equal(canDownloadAndInstallUpdate(updateInfo(), false), false);
assert.equal(canDownloadAndInstallUpdate(updateInfo({ update_available: false }), true), false);
assert.equal(canDownloadAndInstallUpdate(null, true), false);
});
test("normalizes update download source", () => {
assert.equal(normalizeUpdateDownloadSource("official"), "official");
assert.equal(normalizeUpdateDownloadSource("cnb"), "cnb");
assert.equal(normalizeUpdateDownloadSource("atomgit"), "atomgit");
assert.equal(normalizeUpdateDownloadSource("unknown"), "official");
});
test("normalizes release tag versions", () => {
assert.equal(tagVersion("0.5.39"), "v0.5.39");
assert.equal(tagVersion("v0.5.39"), "v0.5.39");
});
test("resolves release page URL from update download source", () => {
const fallbackUrl = "https://github.com/t8y2/dbx/releases/latest";
assert.equal(resolveUpdateReleaseUrl(updateInfo({ latest_version: "0.5.39" }), "cnb", fallbackUrl), "https://cnb.cool/dbxio.com/dbx/-/releases/tag/v0.5.39");
assert.equal(resolveUpdateReleaseUrl(updateInfo({ latest_version: "0.5.44" }), "atomgit", fallbackUrl), "https://atomgit.com/t8y2/dbx/releases/v0.5.44");
assert.equal(resolveUpdateReleaseUrl(updateInfo({ release_url: "https://github.com/t8y2/dbx/releases/tag/v0.5.39" }), "official", fallbackUrl), "https://github.com/t8y2/dbx/releases/tag/v0.5.39");
assert.equal(resolveUpdateReleaseUrl(null, "cnb", fallbackUrl), fallbackUrl);
});