64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
import fs from "node:fs/promises";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
|
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
|
|
import { transcribeInboundAudio } from "./transcription.js";
|
|
|
|
vi.mock("../globals.js", () => ({
|
|
isVerbose: () => false,
|
|
logVerbose: vi.fn(),
|
|
}));
|
|
|
|
vi.mock("../process/exec.js", () => ({
|
|
runExec: vi.fn(async () => ({ stdout: "transcribed text\n" })),
|
|
}));
|
|
|
|
const runtime = {
|
|
error: vi.fn(),
|
|
};
|
|
|
|
describe("transcribeInboundAudio", () => {
|
|
afterEach(() => {
|
|
vi.resetAllMocks();
|
|
});
|
|
|
|
it("downloads mediaUrl to temp file and returns transcript", async () => {
|
|
const tmpBuf = Buffer.from("audio-bytes");
|
|
const tmpFile = path.join(os.tmpdir(), `warelay-audio-${Date.now()}.ogg`);
|
|
await fs.writeFile(tmpFile, tmpBuf);
|
|
|
|
const fetchMock = vi.fn(async () => ({
|
|
ok: true,
|
|
status: 200,
|
|
arrayBuffer: async () => tmpBuf,
|
|
})) as unknown as typeof fetch;
|
|
// @ts-expect-error override global fetch for test
|
|
global.fetch = fetchMock;
|
|
|
|
const cfg = {
|
|
inbound: {
|
|
transcribeAudio: {
|
|
command: ["echo", "{{MediaPath}}"],
|
|
timeoutSeconds: 5,
|
|
},
|
|
},
|
|
};
|
|
const ctx = { MediaUrl: "https://example.com/audio.ogg" };
|
|
|
|
const result = await transcribeInboundAudio(
|
|
cfg as never,
|
|
ctx as never,
|
|
runtime as never,
|
|
);
|
|
expect(result?.text).toBe("transcribed text");
|
|
expect(fetchMock).toHaveBeenCalled();
|
|
});
|
|
|
|
it("returns undefined when no transcription command", async () => {
|
|
const res = await transcribeInboundAudio({ inbound: {} } as never, {} as never, runtime as never);
|
|
expect(res).toBeUndefined();
|
|
});
|
|
});
|