CH-J Server Managerupravljanje poslužiteljima preko SSH
Meni
Objavljen izvor

CH-J Server Manager

Pregledaj direktorije i datoteke za određeni programski izdanje.

Preuzmi ZIP izvora
CH-J / Server Manager 339 datoteke
core-20261014T184258Z-3fbed0b93fdf Dodano: Datum nije zabilježen · Izgrađeno:
Datoteke
updateContract.test.js Dodano: Datum nije zabilježen 3,1 KB · 74 linije
Preuzmi datoteku
1"use strict";
3const test = require("node:test");
4const assert = require("node:assert/strict");
5const {
6 assertSupportedUpdateTarget,
7 serverChannel,
8 validateReleaseListResponse,
9 validateReleaseResponse
10} = require("../src/shared/updateContract");
12function 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 ...overrides
31 }
32 };
35const expected = { currentVersion: "0.0.1", platform: "win32", arch: "x64", channel: "alpha" };
37test("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});
44test("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});
49test("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});
55test("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});
62test("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});
68test("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-2562c2a5cc1db15f42b7b8e3c83bdb3effc500ddf34d5d60a28f1ba2bd16a91b681

CH-J Proprietary Software License 1.14 · Izvor je osiguran pod CH-J Proprietary Software License 1.14. Njena dostupnost ne mijenja uvjete licenciranja niti daje dodatna prava.

Arhiv SHA-2563df08cf5e899262a6ce92d7ec2caf5c42b683f1f2b57055662b845ff7dde67a8