import { describe, expect, it } from "vitest"; import { setupInstallFailure, type HopperInstallFailureReason, } from "./SetupInstallFailure.js"; describe("setup installer failure projection", () => { it.each([ ["unsupported_host", "unsupported_host"], ["download", "download_failed"], ["release_metadata", "download_failed"], ["integrity", "integrity_mismatch"], [ "authorization_or_package_manager", "authorization_or_package_manager_failed", ], ["launcher_missing", "launcher_missing"], ["runtime_dependencies", "runtime_dependency_unavailable"], ["unsupported_hopper_build", "unsupported_hopper_build"], ["cancelled", "setup_cancelled"], ["destination_exists", "destination_exists"], ["mount", "mount_failed"], ["bundle", "bundle_invalid"], ["copy", "copy_failed"], ] as const)("maps %s to %s", (reason, code) => { const result = setupInstallFailure(reason as HopperInstallFailureReason); expect(result).toMatchObject({ status: "failed", code }); expect(result).toMatchObject({ remediation: expect.stringMatching(/\S/u) }); }); });