返回 DeepSeek-Reasonix
release-publication-ledger.test.mjs
根目录 / scripts / release-publication-ledger.test.mjs
1 import assert from "node:assert/strict";
2 import test from "node:test";
3 import { FROZEN_HOMEBREW, createCoreLedger, createPointerLedger, mergeLedgers, npmPackageNames, ownsStablePointer } from "./release-publication-ledger.mjs";
4
5 const sha = "a".repeat(40);
6 const release = { isDraft: false, isPrerelease: false, assets: [{ name: "asset.zip", size: 42, digest: "sha256:abc" }] };
7 const packages = latest => npmPackageNames.map(name => ({
8 name,
9 version: "1.2.3",
10 reasonixCandidateSha: sha,
11 gitHead: sha,
12 integrity: "sha512-example",
13 latest,
14 }));
15
16 test("records immutable files and exact current pointers", () => {
17 const core = createCoreLedger({
18 version: "1.2.3", sourceSHA: sha, operation: "publish",
19 cliRelease: release, desktopRelease: release, npmPackages: packages("1.2.3"),
20 });
21 assert.equal(core.surfaces.tags.items.length, 3);
22 assert.ok(core.surfaces.npm.packages.every(item => item.pointerState === "public-entry-updated"));
23 assert.equal(core.surfaces.cli.assets[0].digest, "sha256:abc");
24 });
25
26 test("recovery preserves newer public pointers", () => {
27 const core = createCoreLedger({
28 version: "1.2.3", sourceSHA: sha, operation: "recover",
29 cliRelease: release, desktopRelease: release, npmPackages: packages("1.3.0"),
30 });
31 assert.ok(core.surfaces.npm.packages.every(item => item.pointerState === "newer-entry-preserved"));
32 assert.throws(() => createCoreLedger({
33 version: "1.2.3", sourceSHA: sha, operation: "publish",
34 cliRelease: release, desktopRelease: release, npmPackages: packages("1.3.0"),
35 }), /npm latest is inconsistent/);
36 });
37
38 test("pointer evidence merges only for the same candidate", () => {
39 const core = createCoreLedger({
40 version: "1.2.3", sourceSHA: sha, operation: "publish",
41 cliRelease: release, desktopRelease: release, npmPackages: packages("1.2.3"),
42 });
43 const pointers = createPointerLedger({
44 version: "1.2.3", sourceSHA: sha, operation: "publish", manifest: { version: "v1.2.3" }, homebrewVersion: "1.2.3",
45 });
46 assert.deepEqual(Object.keys(mergeLedgers(core, pointers).surfaces).sort(), ["cli", "desktop", "homebrew", "npm", "stableManifest", "tags"]);
47 assert.throws(() => mergeLedgers(core, { ...pointers, sourceSHA: "b".repeat(40) }), /one release/);
48 assert.throws(() => createPointerLedger({
49 version: "1.2.3", sourceSHA: sha, operation: "publish", manifest: { version: "v1.2.3" }, homebrewVersion: "1.2.2",
50 }), /Homebrew cask/);
51 });
52
53 test("pointer ownership requires an exact release or a proven newer recovery pointer", () => {
54 for (const operation of ["publish", "recover"]) {
55 assert.equal(ownsStablePointer("1.2.3", operation, { version: "v1.2.3" }), true);
56 for (const version of [undefined, "", "v1.2.2", "1.2.3", "v1.2.3-beta.1"]) {
57 assert.throws(() => ownsStablePointer("1.2.3", operation, { version }));
58 }
59 }
60 assert.equal(ownsStablePointer("1.2.3", "recover", { version: "v1.10.0" }), false);
61 assert.throws(() => ownsStablePointer("1.2.3", "publish", { version: "v1.10.0" }));
62 assert.throws(() => ownsStablePointer("1.2.3", "unknown", { version: "v1.2.3" }));
63 });
64
65 test("a frozen line records its own npm dist-tag and no Homebrew surface", () => {
66 const frozenPackages = distTagVersion => npmPackageNames.map(name => ({
67 name, version: "1.2.3", reasonixCandidateSha: sha, gitHead: sha, integrity: "sha512-example",
68 distTag: "legacy-v1", distTagVersion,
69 }));
70 const core = createCoreLedger({
71 version: "1.2.3", sourceSHA: sha, operation: "publish",
72 cliRelease: release, desktopRelease: release, npmPackages: frozenPackages("1.2.3"),
73 });
74 assert.ok(core.surfaces.npm.packages.every(item => item.distTag === "legacy-v1" && item.latest === undefined));
75 assert.throws(() => createCoreLedger({
76 version: "1.2.3", sourceSHA: sha, operation: "publish",
77 cliRelease: release, desktopRelease: release, npmPackages: frozenPackages("1.2.2"),
78 }), /npm legacy-v1 is inconsistent/);
79 const pointers = createPointerLedger({
80 version: "1.2.3", sourceSHA: sha, operation: "publish", manifest: { version: "v1.2.3" }, homebrewVersion: FROZEN_HOMEBREW,
81 });
82 assert.deepEqual(Object.keys(mergeLedgers(core, pointers).surfaces).sort(), ["cli", "desktop", "npm", "stableManifest", "tags"]);
83 });
84
84 lines Plain Text