Files
whisper_web/tests/translateProtocol.test.ts
T

50 lines
2.1 KiB
TypeScript

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 });
});
});