From 3ff0cf262dc92ee5514b82d7a4bb90392132c3b3 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 3 Mar 2026 02:46:30 +0000 Subject: [PATCH] refactor(infra): dedupe update startup test setup --- src/infra/update-startup.test.ts | 57 +++++++++++++++----------------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/src/infra/update-startup.test.ts b/src/infra/update-startup.test.ts index 1b382dededc..468c6574982 100644 --- a/src/infra/update-startup.test.ts +++ b/src/infra/update-startup.test.ts @@ -107,12 +107,20 @@ describe("update-startup", () => { }); function mockPackageUpdateStatus(tag = "latest", version = "2.0.0") { + mockPackageInstallStatus(); + mockNpmChannelTag(tag, version); + } + + function mockPackageInstallStatus() { vi.mocked(resolveOpenClawPackageRoot).mockResolvedValue("/opt/openclaw"); vi.mocked(checkUpdateStatus).mockResolvedValue({ root: "/opt/openclaw", installKind: "package", packageManager: "npm", } satisfies UpdateCheckResult); + } + + function mockNpmChannelTag(tag: string, version: string) { vi.mocked(resolveNpmChannelTag).mockResolvedValue({ tag, version, @@ -173,6 +181,20 @@ describe("update-startup", () => { }); } + async function runStableUpdateCheck(params: { + onUpdateAvailableChange?: ReturnType; + }) { + await runGatewayUpdateCheck({ + cfg: { update: { channel: "stable" } }, + log: { info: vi.fn() }, + isNixMode: false, + allowInTests: true, + ...(params.onUpdateAvailableChange + ? { onUpdateAvailableChange: params.onUpdateAvailableChange } + : {}), + }); + } + it.each([ { name: "stable channel", @@ -232,12 +254,7 @@ describe("update-startup", () => { }); it("emits update change callback when update state clears", async () => { - vi.mocked(resolveOpenClawPackageRoot).mockResolvedValue("/opt/openclaw"); - vi.mocked(checkUpdateStatus).mockResolvedValue({ - root: "/opt/openclaw", - installKind: "package", - packageManager: "npm", - } satisfies UpdateCheckResult); + mockPackageInstallStatus(); vi.mocked(resolveNpmChannelTag) .mockResolvedValueOnce({ tag: "latest", @@ -249,21 +266,9 @@ describe("update-startup", () => { }); const onUpdateAvailableChange = vi.fn(); - await runGatewayUpdateCheck({ - cfg: { update: { channel: "stable" } }, - log: { info: vi.fn() }, - isNixMode: false, - allowInTests: true, - onUpdateAvailableChange, - }); + await runStableUpdateCheck({ onUpdateAvailableChange }); vi.setSystemTime(new Date("2026-01-18T11:00:00Z")); - await runGatewayUpdateCheck({ - cfg: { update: { channel: "stable" } }, - log: { info: vi.fn() }, - isNixMode: false, - allowInTests: true, - onUpdateAvailableChange, - }); + await runStableUpdateCheck({ onUpdateAvailableChange }); expect(onUpdateAvailableChange).toHaveBeenNthCalledWith(1, { currentVersion: "1.0.0", @@ -362,16 +367,8 @@ describe("update-startup", () => { }); it("uses current runtime + entrypoint for default auto-update command execution", async () => { - vi.mocked(resolveOpenClawPackageRoot).mockResolvedValue("/opt/openclaw"); - vi.mocked(checkUpdateStatus).mockResolvedValue({ - root: "/opt/openclaw", - installKind: "package", - packageManager: "npm", - } satisfies UpdateCheckResult); - vi.mocked(resolveNpmChannelTag).mockResolvedValue({ - tag: "beta", - version: "2.0.0-beta.1", - }); + mockPackageInstallStatus(); + mockNpmChannelTag("beta", "2.0.0-beta.1"); vi.mocked(runCommandWithTimeout).mockResolvedValue({ stdout: "{}", stderr: "",