import { Effect } from "effect"; import { describe, expect, it } from "vitest"; import { runEffectBackground, runEffectPromise, tryPromise, } from "./effect-runtime"; describe("effect runtime boundary", () => { it("throws original promise errors instead of UnknownException wrappers", async () => { const original = Object.assign(new Error("socket reset"), { code: "ECONNRESET", }); let rejected: unknown; try { await runEffectPromise(tryPromise(() => Promise.reject(original))); } catch (error) { rejected = error; } expect(rejected).toBe(original); expect(String(rejected)).not.toContain("UnknownException"); }); it("routes background Effect exits to success and failure handlers", async () => { const success = new Promise((resolve) => { runEffectBackground(Effect.succeed("ok"), { onSuccess: resolve, onFailure: (error) => { throw error; }, }); }); await expect(success).resolves.toBe("ok"); const original = new Error("background failed"); const failure = new Promise((resolve) => { runEffectBackground(Effect.fail(original), { onSuccess: () => { throw new Error("unexpected success"); }, onFailure: resolve, }); }); await expect(failure).resolves.toBe(original); }); });