Files
clawdbot/src/auto-reply/transcription.test.ts
Peter Steinberger c379191f80 chore: migrate to oxlint and oxfmt
Co-authored-by: Christoph Nakazawa <christoph.pojer@gmail.com>
2026-01-14 15:02:19 +00:00

68 lines
1.9 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";
vi.mock("../globals.js", () => ({
isVerbose: () => false,
logVerbose: vi.fn(),
shouldLogVerbose: () => false,
}));
vi.mock("../process/exec.js", () => ({
runExec: vi.fn(),
}));
const runtime = {
error: vi.fn(),
};
describe("transcribeInboundAudio", () => {
afterEach(() => {
vi.resetAllMocks();
vi.unstubAllGlobals();
});
it("downloads mediaUrl to temp file and returns transcript", async () => {
const tmpBuf = Buffer.from("audio-bytes");
const tmpFile = path.join(os.tmpdir(), `clawdbot-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;
vi.stubGlobal("fetch", fetchMock);
const cfg = {
tools: {
audio: {
transcription: {
args: ["echo", "{{MediaPath}}"],
timeoutSeconds: 5,
},
},
},
};
const ctx = { MediaUrl: "https://example.com/audio.ogg" };
const execModule = await import("../process/exec.js");
vi.mocked(execModule.runExec).mockResolvedValue({
stdout: "transcribed text\n",
stderr: "",
});
const { transcribeInboundAudio } = await import("./transcription.js");
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 { transcribeInboundAudio } = await import("./transcription.js");
const res = await transcribeInboundAudio({ audio: {} } as never, {} as never, runtime as never);
expect(res).toBeUndefined();
});
});