agent-orchestrator/frontend/makers/maker-nsis.test.ts

50 lines
2.1 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
// Capture buildForge's args without pulling in electron-builder's real machinery.
const buildForge = vi.fn<(forge: { dir: string }, options: any) => Promise<string[]>>(async () => [
"/out/make/Agent Orchestrator Setup.exe",
]);
vi.mock("app-builder-lib", () => ({ buildForge }));
import MakerNSIS from "./maker-nsis";
const makeOptions = {
dir: "/tmp/app/Agent Orchestrator-win32-x64",
makeDir: "/tmp/app/make",
appName: "Agent Orchestrator",
targetPlatform: "win32" as const,
targetArch: "x64" as const,
forgeConfig: {} as never,
packageJSON: {},
};
describe("MakerNSIS", () => {
it("targets win32 and is supported anywhere (cross-build allowed)", () => {
const maker = new MakerNSIS();
expect(maker.name).toBe("nsis");
expect(maker.defaultPlatforms).toEqual(["win32"]);
expect(maker.isSupportedOnCurrentPlatform()).toBe(true);
});
it("builds an nsis target for the requested arch and forwards config", async () => {
const maker = new MakerNSIS({ appId: "dev.agent-orchestrator.desktop", icon: "assets/icon.ico" }, ["win32"]);
// Forge resolves the (possibly arch-dependent) config before make().
await maker.prepareConfig(makeOptions.targetArch);
const artifacts = await maker.make(makeOptions);
expect(artifacts).toEqual(["/out/make/Agent Orchestrator Setup.exe"]);
const [forgeOptions, options] = buildForge.mock.calls[0];
expect(forgeOptions).toEqual({ dir: makeOptions.dir });
expect(options.win).toEqual(["nsis:x64"]);
// electron-builder must not try to publish; the workflow does that.
expect(options.config.publish).toBeNull();
expect(options.config.appId).toBe("dev.agent-orchestrator.desktop");
// productName falls back to appName when not set on the maker config.
expect(options.config.productName).toBe("Agent Orchestrator");
expect(options.config.win).toEqual({ icon: "assets/icon.ico" });
// A real installer: not Squirrel's silent one-click per-user drop.
expect(options.config.nsis.oneClick).toBe(false);
expect(options.config.nsis.allowToChangeInstallationDirectory).toBe(true);
});
});