Vydané zdroje
Stáhnout zdroje ZIP
CH-J Server Manager
Procházejte adresáře a soubory konkrétního vydání aplikace.
Zdroje jsou zveřejněny pod CH-J Proprietary Software License 1.14. Jejich dostupnost nemění licenční podmínky ani neposkytuje další oprávnění.
1
"use strict";3
const test = require("node:test");4
const assert = require("node:assert/strict");5
const {6
assertSupportedUpdateTarget,7
serverChannel,8
validateReleaseListResponse,9
validateReleaseResponse10
} = require("../src/shared/updateContract");12
function payload(overrides = {}) {13
return {14
update_available: true,15
release: {16
id: "release-1",17
type: "app",18
name: "CH-J Server Manager",19
version: "0.0.2",20
platform: "win",21
arch: "x64",22
channel: "alpha",23
mandatory: false,24
notes: "Alpha update",25
sha512: "a".repeat(128),26
size: 123,27
filename: "CH-J-Server-Manager.exe",28
download_url: "https://192.168.10.154/files/apps/win/update.exe",29
signature_url: "https://192.168.10.154/files/apps/win/update.exe.asc",30
...overrides31
}32
};33
}35
const expected = { currentVersion: "0.0.1", platform: "win32", arch: "x64", channel: "alpha" };37
test("valid PHP release response is normalized", () => {38
const result = validateReleaseResponse(payload(), expected);39
assert.equal(result.updateAvailable, true);40
assert.equal(result.release.version, "0.0.2");41
assert.equal(result.release.sha512.length, 128);42
});44
test("client independently rejects same or older release", () => {45
assert.equal(validateReleaseResponse(payload({ version: "0.0.1" }), expected).updateAvailable, false);46
assert.equal(validateReleaseResponse(payload({ version: "0.0.0" }), expected).updateAvailable, false);47
});49
test("wrong platform, channel and hash are rejected", () => {50
assert.throws(() => validateReleaseResponse(payload({ platform: "mac", arch: "arm64" }), expected), /platform/);51
assert.throws(() => validateReleaseResponse(payload({ channel: "stable" }), expected), /channel/);52
assert.throws(() => validateReleaseResponse(payload({ sha512: "abcd" }), expected), /SHA-512/);53
});55
test("application and server use identical update channel names", () => {56
assert.equal(serverChannel("alpha"), "alpha");57
assert.equal(serverChannel("beta"), "beta");58
assert.equal(serverChannel("stable"), "stable");59
assert.throws(() => serverChannel("dev"), /Unsupported update channel/);60
});62
test("macOS updates support ARM64 only", () => {63
assert.deepEqual(assertSupportedUpdateTarget("darwin", "arm64"), { platform: "mac", arch: "arm64" });64
assert.throws(() => assertSupportedUpdateTarget("mac", "x64"), /Unsupported update architecture/);65
assert.throws(() => assertSupportedUpdateTarget("mac", "universal"), /Unsupported update architecture/);66
});68
test("catalog keeps equal versions separate and sorts them by publication time", () => {69
const first = payload({ id: "older-build", version: "0.0.1", published_at: "2026-08-07T15:00:00Z" }).release;70
const second = payload({ id: "newer-build", version: "0.0.1", published_at: "2026-08-07T16:00:00Z" }).release;71
const result = validateReleaseListResponse({ releases: [first, second] }, expected);72
assert.deepEqual(result.releases.map((release) => release.id), ["newer-build", "older-build"]);73
assert.throws(() => validateReleaseListResponse({ releases: [first, first] }, expected), /Duplicate release id/);74
});SHA-256: 2c2a5cc1db15f42b7b8e3c83bdb3effc500ddf34d5d60a28f1ba2bd16a91b681
SHA-256 archivu: 5ac91caf4fa32a6fdb114f2430deed486fbe7489d5eea343d1f034169fafb5e0