102 lines · 2.9 KB · TypeScript
RawDownload
import { describe, expect, it } from "@effect/vitest";import {  planCompletedUpdateCheck,  planDownloadedUpdate,  planFatalAutoInstallOnQuit,  planUpdateCheck,  statusAfterUpdateError,} from "./updater-state"; describe("updater state decisions", () => {  it("auto-prompts when a newer version arrives after the staged version was declined", () => {    const decision = planDownloadedUpdate({      stagedVersion: "1.5.27",      declinedVersion: "1.5.27",      incomingVersion: "1.5.28",      trigger: "interval",    });     expect(decision).toEqual({      stagedVersion: "1.5.28",      declinedVersion: "1.5.27",      status: { state: "downloaded", version: "1.5.28" },      promptVersion: "1.5.28",    });  });   it("keeps interval checks running without re-prompting the same declined version", () => {    const check = planUpdateCheck({      stagedVersion: "1.5.27",      trigger: "interval",    });    const downloaded = planDownloadedUpdate({      stagedVersion: "1.5.27",      declinedVersion: "1.5.27",      incomingVersion: "1.5.27",      trigger: "interval",    });     expect(check).toEqual({ check: true, promptVersionAfterCheck: null });    expect(downloaded.promptVersion).toBeNull();  });   it("manual checks re-check first and then re-prompt the staged version if no newer version wins", () => {    const check = planUpdateCheck({      stagedVersion: "1.5.27",      trigger: "manual",    });    const completedWithoutNewer = planCompletedUpdateCheck({      stagedVersion: check.promptVersionAfterCheck,      trigger: "manual",      updateAvailable: false,      availableVersion: null,    });    const completedWithNewer = planCompletedUpdateCheck({      stagedVersion: check.promptVersionAfterCheck,      trigger: "manual",      updateAvailable: true,      availableVersion: "1.5.28",    });     expect(check.check).toBe(true);    expect(completedWithoutNewer.promptVersion).toBe("1.5.27");    expect(completedWithNewer.promptVersion).toBeNull();  });   it("moves active update failures to error while idle failures stay idle", () => {    expect(      statusAfterUpdateError(        { state: "downloading", version: "1.5.27", percent: 42 },        "Download failed",      ),    ).toEqual({      state: "error",      version: "1.5.27",      message: "Download failed",    });    expect(statusAfterUpdateError({ state: "idle" }, "Download failed")).toEqual({      state: "idle",    });  });   it("restores autoInstallOnAppQuit only when the fatal path recovers", () => {    expect(      planFatalAutoInstallOnQuit({        packaged: true,        retryAfterReset: true,      }),    ).toEqual({      enableDuringFailure: true,      restoreAfterRecovery: true,    });    expect(      planFatalAutoInstallOnQuit({        packaged: true,        retryAfterReset: false,      }),    ).toEqual({      enableDuringFailure: true,      restoreAfterRecovery: false,    });  });});