1import { assert, describe, it } from "@effect/vitest";
2import * as Cause from "effect/Cause";
3
4import { DesktopLifecycleRelaunchError } from "./DesktopLifecycle.ts";
5import { DesktopApplicationMenuActionError } from "../window/DesktopApplicationMenu.ts";
6
7describe("desktop detached action errors", () => {
8 it("preserves the complete relaunch failure cause and reason", () => {
9 const cause = Cause.combine(
10 Cause.fail(new Error("shutdown failed")),
11 Cause.die(new Error("relaunch defect")),
12 );
13 const error = new DesktopLifecycleRelaunchError({
14 reason: "apply update",
15 cause,
16 });
17
18 assert.strictEqual(error.cause, cause);
19 assert.equal(error.reason, "apply update");
20 assert.equal(error.message, 'Desktop relaunch failed for reason "apply update".');
21 });
22
23 it("preserves the complete menu action failure cause and action", () => {
24 const cause = Cause.combine(
25 Cause.fail(new Error("window unavailable")),
26 Cause.die(new Error("dispatch defect")),
27 );
28 const error = new DesktopApplicationMenuActionError({
29 action: "open-settings",
30 cause,
31 });
32
33 assert.strictEqual(error.cause, cause);
34 assert.equal(error.action, "open-settings");
35 assert.equal(error.message, 'Desktop menu action "open-settings" failed.');
36 });
37});