agent-orchestrator/frontend/scripts/feed.test.mjs

96 lines
3.6 KiB
JavaScript

// @vitest-environment node
import { describe, it, expect } from "vitest";
import { selectInstallers, feedFilename, buildYml } from "./feed.mjs";
const V = "0.10.4";
const NAMES = [
"Agent.Orchestrator.Setup.0.10.4.exe", // win versioned
"Agent.Orchestrator-0.10.4.AppImage", // linux versioned
"Agent.Orchestrator-darwin-arm64-0.10.4.zip", // mac arm64 versioned
"Agent.Orchestrator-darwin-x64-0.10.4.zip", // mac x64 versioned
"agent-orchestrator-darwin-arm64.zip", // ao-start alias (no version) -> excluded
"agent-orchestrator-win32-x64.exe", // alias (no version) -> excluded
"agent-orchestrator_0.10.4_amd64.deb", // deb -> excluded by extension
"agent-orchestrator-0.10.4.x86_64.rpm", // rpm -> excluded by extension
];
describe("selectInstallers", () => {
it("keeps only versioned exe/AppImage/darwin-zip, split by arch", () => {
const s = selectInstallers(NAMES, V);
expect(s.win).toEqual(["Agent.Orchestrator.Setup.0.10.4.exe"]);
expect(s.linux).toEqual(["Agent.Orchestrator-0.10.4.AppImage"]);
expect(s.macArm64).toEqual(["Agent.Orchestrator-darwin-arm64-0.10.4.zip"]);
expect(s.macX64).toEqual(["Agent.Orchestrator-darwin-x64-0.10.4.zip"]);
});
});
describe("feedFilename", () => {
it("maps channel + platform to electron-updater names", () => {
expect(feedFilename("latest", "win")).toBe("latest.yml");
expect(feedFilename("latest", "mac")).toBe("latest-mac.yml");
expect(feedFilename("latest", "linux")).toBe("latest-linux.yml");
expect(feedFilename("nightly", "win")).toBe("nightly.yml");
expect(feedFilename("nightly", "mac")).toBe("nightly-mac.yml");
expect(feedFilename("nightly", "linux")).toBe("nightly-linux.yml");
});
});
describe("buildYml", () => {
it("serializes one file with deprecated top-level fields and no blockMapSize", () => {
const yml = buildYml(
"0.10.4",
[{ url: "Agent.Orchestrator.Setup.0.10.4.exe", sha512: "AA/BB+cc==", size: 123 }],
"2026-06-27T12:00:00.000Z",
);
expect(yml).toBe(
"version: 0.10.4\n" +
"files:\n" +
" - url: Agent.Orchestrator.Setup.0.10.4.exe\n" +
" sha512: AA/BB+cc==\n" +
" size: 123\n" +
"path: Agent.Orchestrator.Setup.0.10.4.exe\n" +
"sha512: AA/BB+cc==\n" +
"releaseDate: '2026-06-27T12:00:00.000Z'\n",
);
expect(yml).not.toContain("blockMapSize");
});
it("lists both mac arches with arm64 first and points top-level at arm64", () => {
const yml = buildYml(
"0.10.4",
[
{ url: "Agent.Orchestrator-darwin-arm64-0.10.4.zip", sha512: "ARM==", size: 10 },
{ url: "Agent.Orchestrator-darwin-x64-0.10.4.zip", sha512: "X64==", size: 20 },
],
"2026-06-27T12:00:00.000Z",
);
const lines = yml.split("\n");
expect(lines[2]).toBe(" - url: Agent.Orchestrator-darwin-arm64-0.10.4.zip");
expect(lines[5]).toBe(" - url: Agent.Orchestrator-darwin-x64-0.10.4.zip");
expect(yml).toContain("path: Agent.Orchestrator-darwin-arm64-0.10.4.zip");
});
it("omits important key when flag is false (byte-identical to old output)", () => {
const yml = buildYml(
"0.10.4",
[{ url: "Agent.Orchestrator.Setup.0.10.4.exe", sha512: "AA/BB+cc==", size: 123 }],
"2026-06-27T12:00:00.000Z",
false,
);
expect(yml).not.toContain("important");
});
it("emits important: true as top-level key when flag is true", () => {
const yml = buildYml(
"0.10.4",
[{ url: "Agent.Orchestrator.Setup.0.10.4.exe", sha512: "AA/BB+cc==", size: 123 }],
"2026-06-27T12:00:00.000Z",
true,
);
expect(yml).toContain("important: true\n");
// must still have all existing fields
expect(yml).toContain("version: 0.10.4");
expect(yml).toContain("releaseDate:");
});
});