import { describe, expect, it } from "vitest"; import { resolveBatchCompletionFromStatus, resolveCompletedBatchResult, throwIfBatchTerminalFailure, } from "./batch-status.js"; describe("batch-status helpers", () => { it("resolves completion payload from completed status", () => { expect( resolveBatchCompletionFromStatus({ provider: "openai", batchId: "b1", status: { output_file_id: "out-1", error_file_id: "err-1", }, }), ).toEqual({ outputFileId: "out-1", errorFileId: "err-1", }); }); it("throws for terminal failure states", async () => { await expect( throwIfBatchTerminalFailure({ provider: "voyage", status: { id: "b2", status: "failed", error_file_id: "err-file" }, readError: async () => "bad input", }), ).rejects.toThrow("voyage batch b2 failed: bad input"); }); it("returns completed result directly without waiting", async () => { const waitForBatch = async () => ({ outputFileId: "out-2" }); const result = await resolveCompletedBatchResult({ provider: "openai", status: { id: "b3", status: "completed", output_file_id: "out-3", }, wait: false, waitForBatch, }); expect(result).toEqual({ outputFileId: "out-3", errorFileId: undefined }); }); it("throws when wait disabled and batch is not complete", async () => { await expect( resolveCompletedBatchResult({ provider: "openai", status: { id: "b4", status: "pending" }, wait: false, waitForBatch: async () => ({ outputFileId: "out" }), }), ).rejects.toThrow("openai batch b4 submitted; enable remote.batch.wait to await completion"); }); });