import { expect, test, vi } from "vitest" import { Permit } from "#Source/orchestration/index.ts" test("Permit release updates lifecycle state and only calls handlers once", () => { const onRelease = vi.fn() const onDuplicateRelease = vi.fn() const permit = new Permit({ details: { coordination: "custom" }, duplicateReleaseMessage: "duplicate release", onDuplicateRelease, onRelease, }) expect(permit.details).toEqual({ coordination: "custom" }) expect(permit.isActive()).toBe(true) expect(permit.isReleased()).toBe(false) permit.release() expect(onRelease).toHaveBeenCalledTimes(1) expect(permit.isActive()).toBe(false) expect(permit.isReleased()).toBe(true) permit.release() expect(onDuplicateRelease).toHaveBeenCalledTimes(1) expect(onDuplicateRelease).toHaveBeenCalledWith("duplicate release") expect(onRelease).toHaveBeenCalledTimes(1) }) test("Permit dispose and Symbol.dispose delegate to release", () => { const onRelease = vi.fn() const onDuplicateRelease = vi.fn() const permit = new Permit({ onDuplicateRelease, onRelease }) permit.dispose() permit[Symbol.dispose]() expect(onRelease).toHaveBeenCalledTimes(1) expect(onDuplicateRelease).toHaveBeenCalledTimes(1) expect(permit.isReleased()).toBe(true) })