"use strict"; const test = require("node:test"); const assert = require("node:assert/strict"); const { createAudioGenerationService } = require("../src/services/audio-generation"); test("enqueueJob generates audio and uploads it", async () => { const uploaded = []; const service = createAudioGenerationService({ tts: { async synthesize() { return Buffer.from("bytes"); }, }, storage: { async uploadAudio(payload) { uploaded.push(payload); }, }, logger: { error() {} }, }); const result = await service.enqueueJob({ assetId: "a1", text: "hello", }); assert.equal(result.storageKey, "audio/a1.mp3"); assert.equal(uploaded.length, 1); assert.equal(uploaded[0].key, "audio/a1.mp3"); }); test("enqueueJob invokes onFailed on error", async () => { let failed = false; const service = createAudioGenerationService({ tts: { async synthesize() { throw new Error("tts_fail"); }, }, storage: { async uploadAudio() {}, }, logger: { error() {} }, }); await assert.rejects( () => service.enqueueJob({ assetId: "a2", text: "hello", onFailed() { failed = true; }, }), /tts_fail/, ); assert.equal(failed, true); });