import { describe, expect, it } from "vitest"; import { createMemoryToolcraftBinaryAssetRepository } from "./repository/memory-binary-asset-repository"; import { createToolcraftSourceAssetResourceResolver } from "./source-asset-resource-resolver"; describe("source asset resource resolver", () => { it("reads active staged resources before repository publication", async () => { const repository = createMemoryToolcraftBinaryAssetRepository(); const lease = await repository.beginLease("active-import"); await lease.put("model:staged", new Uint8Array([1, 2, 3]), { contentType: "application/octet-stream", durable: false, }); const resolveResource = createToolcraftSourceAssetResourceResolver({ getActiveJobs: () => [{ lease: { lease, settled: Promise.resolve() }, stagedResourceRefs: new Set(["model:staged"]), }], isDisposed: () => false, repository, }); await expect( resolveResource("model:staged", { signal: new AbortController().signal }), ).resolves.toEqual(new Uint8Array([1, 2, 3])); await lease.rollback(); await repository.dispose(); }); it("fails closed when the caller aborts before a read", async () => { const repository = createMemoryToolcraftBinaryAssetRepository(); const controller = new AbortController(); controller.abort(); const resolveResource = createToolcraftSourceAssetResourceResolver({ getActiveJobs: () => [], isDisposed: () => false, repository, }); await expect( resolveResource("model:missing", { signal: controller.signal }), ).rejects.toMatchObject({ name: "AbortError" }); await repository.dispose(); }); });