mirror of
https://github.com/morluto/rea
synced 2026-10-26 22:28:27 -04:00
ec56c1da04
Keep layered environment choices, current byte-exact recovery snapshots, and package-manager failure details. Report pinned package drift without claiming runner resolution. Retain failed Linux installer cleanup for host-owned retry while preserving the install outcome. Reviewed fixes include #2632, #2769, #2783, #2959, #2979, #2983, #2995, #3009, and #2559. Validation: 98 focused setup/registration tests passed; 45 Linux installer tests passed. Real Linux package installation remains unverified.
72 lines
3.0 KiB
TypeScript
72 lines
3.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { HOPPER_PUBLISHER } from "../domain/hopperPublisher.js";
|
|
import { setupInstallFailure } from "./SetupInstallFailure.js";
|
|
|
|
describe("macOS Hopper setup failure projection", () => {
|
|
it("projects a publisher mismatch onto its own code and recovery", () => {
|
|
expect(setupInstallFailure("publisher_verification_failed")).toEqual({
|
|
status: "failed",
|
|
code: "publisher_verification_failed",
|
|
remediation: `The mounted Hopper application is not signed by the publisher REA pins (${HOPPER_PUBLISHER.bundleIdentifier}, Apple team ${HOPPER_PUBLISHER.teamIdentifier}); nothing was copied or launched. Install Hopper yourself and set HOPPER_LAUNCHER_PATH to its launcher, then rerun rea setup.`,
|
|
});
|
|
});
|
|
|
|
it("keeps a broken bundle distinct from a publisher mismatch", () => {
|
|
expect(setupInstallFailure("bundle")).toEqual({
|
|
status: "failed",
|
|
code: "bundle_invalid",
|
|
remediation:
|
|
"The mounted package did not contain the expected Hopper application bundle. Retry setup; if it repeats, update REA before installing.",
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("Linux package-manager setup failure projection", () => {
|
|
it("quotes the failing command and a sanitized bounded diagnostic", () => {
|
|
const result = setupInstallFailure("authorization_or_package_manager", {
|
|
command: 'pkexec pacman -U "/tmp/hopper package.pkg.tar.xz"',
|
|
exitCode: 1,
|
|
stdout: "",
|
|
stderr: "\u001b[31merror:\u001b[0m package conflict\nrefused",
|
|
outputTruncated: false,
|
|
});
|
|
expect(result).toMatchObject({
|
|
status: "failed",
|
|
code: "authorization_or_package_manager_failed",
|
|
});
|
|
if (result.status !== "failed") throw new Error("expected failure");
|
|
expect(result.remediation).toContain(
|
|
'pkexec pacman -U "/tmp/hopper package.pkg.tar.xz"; exit 1',
|
|
);
|
|
expect(result.remediation).toContain("error: package conflict refused");
|
|
expect(result.remediation).not.toContain("\u001b");
|
|
expect(result.remediation).not.toContain("\n");
|
|
});
|
|
|
|
it("preserves the established remediation if no package output exists", () => {
|
|
expect(setupInstallFailure("authorization_or_package_manager")).toEqual({
|
|
status: "failed",
|
|
code: "authorization_or_package_manager_failed",
|
|
remediation:
|
|
"Allow the system package-manager operation or install the planned Hopper package and Linux runtime dependencies, then rerun rea setup.",
|
|
});
|
|
});
|
|
|
|
it("keeps truncated package output within its excerpt budget", () => {
|
|
const result = setupInstallFailure("authorization_or_package_manager", {
|
|
command: "pacman -U hopper.pkg.tar.xz",
|
|
exitCode: 1,
|
|
stdout: "",
|
|
stderr: `${"warning ".repeat(100)}final package conflict`,
|
|
outputTruncated: true,
|
|
});
|
|
if (result.status !== "failed") throw new Error("expected failure");
|
|
const excerpt = result.remediation
|
|
.split("its output: ")[1]
|
|
?.split(" Resolve")[0];
|
|
expect(excerpt).toContain("output truncated");
|
|
expect(excerpt?.length).toBeLessThanOrEqual(400);
|
|
});
|
|
});
|