import { ThreadId } from "@t3tools/contracts"; import * as Cause from "effect/Cause"; import * as Effect from "effect/Effect"; import * as Exit from "effect/Exit"; import { describe, expect, it } from "vitest"; import { logCleanupCauseUnlessInterrupted } from "./ThreadDeletionReactor.ts"; describe("logCleanupCauseUnlessInterrupted", () => { const threadId = ThreadId.make("thread-deletion-reactor-test"); it("swallows ordinary cleanup failures", async () => { const exit = await Effect.runPromiseExit( logCleanupCauseUnlessInterrupted({ effect: Effect.fail("cleanup failed"), message: "thread deletion cleanup skipped provider session stop", threadId, }), ); expect(Exit.isSuccess(exit)).toBe(true); }); it("preserves interrupt causes", async () => { const exit = await Effect.runPromiseExit( logCleanupCauseUnlessInterrupted({ effect: Effect.interrupt, message: "thread deletion cleanup skipped provider session stop", threadId, }), ); expect(Exit.isFailure(exit)).toBe(true); if (Exit.isFailure(exit)) { expect(Cause.hasInterruptsOnly(exit.cause)).toBe(true); } }); });