import { describe, expect, test } from "bun:test"; import { DownloadTally, isTranslateRequest, isTranslateWorkerMessage, } from "../src/worker/translateProtocol"; describe("isTranslateRequest", () => { test("accepts a well-formed request", () => { expect( isTranslateRequest({ type: "translate", requestId: "t-1", modelId: "Xenova/opus-mt-da-en", units: ["Hej."] }), ).toBe(true); }); test("rejects missing ids and non-string units", () => { expect(isTranslateRequest({ type: "translate", modelId: "m", units: [] })).toBe(false); expect(isTranslateRequest({ type: "translate", requestId: "t", modelId: "m", units: [1] })).toBe(false); expect(isTranslateRequest({ type: "load", requestId: "t", modelId: "m", units: [] })).toBe(false); expect(isTranslateRequest(null)).toBe(false); }); }); describe("isTranslateWorkerMessage", () => { test("accepts each reply type", () => { for (const message of [ { type: "translate-download", requestId: "t", loaded: 1, total: 2 }, { type: "translate-progress", requestId: "t", done: 0, total: 3 }, { type: "translate-result", requestId: "t", texts: ["Hello."] }, { type: "translate-error", requestId: "t", message: "boom" }, ]) { expect(isTranslateWorkerMessage(message)).toBe(true); } }); test("rejects malformed replies and Whisper-worker messages", () => { expect(isTranslateWorkerMessage({ type: "translate-progress", requestId: "t", done: "1", total: 3 })).toBe(false); expect(isTranslateWorkerMessage({ type: "translate-result", texts: [] })).toBe(false); expect(isTranslateWorkerMessage({ type: "result", requestId: "t", text: "", chunks: [] })).toBe(false); }); }); describe("DownloadTally", () => { test("sums bytes across files, updating each file in place", () => { const tally = new DownloadTally(); expect(tally.update("onnx/encoder.onnx", 10, 100)).toEqual({ loaded: 10, total: 100 }); expect(tally.update("onnx/decoder.onnx", 5, 50)).toEqual({ loaded: 15, total: 150 }); expect(tally.update("onnx/encoder.onnx", 100, 100)).toEqual({ loaded: 105, total: 150 }); }); });