* Adjust fix path to use ESM import * normalize fix-path imports and usage across the app * extract path fix logic to utils for server and collector * add helpers * repin strip-ansi in collector * fix log for localWhisper lint
78 lines
2.6 KiB
JavaScript
78 lines
2.6 KiB
JavaScript
process.env.STORAGE_DIR = "test-storage";
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
// Mock fix-path as a noop to prevent SIGSEGV (segfault)
|
|
// Returns ESM-style default export for dynamic import()
|
|
jest.mock("fix-path", () => ({ default: jest.fn() }));
|
|
|
|
const { FFMPEGWrapper } = require("../../../../utils/WhisperProviders/ffmpeg");
|
|
|
|
const describeRunner = process.env.GITHUB_ACTIONS ? describe.skip : describe;
|
|
|
|
describeRunner("FFMPEGWrapper", () => {
|
|
/** @type { import("../../../../utils/WhisperProviders/ffmpeg/index").FFMPEGWrapper } */
|
|
let ffmpeg;
|
|
const testDir = path.resolve(__dirname, "../../../../storage/tmp");
|
|
const inputPath = path.resolve(testDir, "test-input.wav");
|
|
const outputPath = path.resolve(testDir, "test-output.wav");
|
|
|
|
beforeEach(() => {
|
|
ffmpeg = new FFMPEGWrapper();
|
|
});
|
|
|
|
afterEach(() => {
|
|
if (fs.existsSync(inputPath)) fs.rmSync(inputPath);
|
|
if (fs.existsSync(outputPath)) fs.rmSync(outputPath);
|
|
});
|
|
|
|
it("should find ffmpeg executable", async () => {
|
|
const knownPath = await ffmpeg.ffmpegPath();
|
|
expect(knownPath).toBeDefined();
|
|
expect(typeof knownPath).toBe("string");
|
|
expect(knownPath.length).toBeGreaterThan(0);
|
|
});
|
|
|
|
it("should validate ffmpeg executable", async () => {
|
|
const knownPath = await ffmpeg.ffmpegPath();
|
|
expect(ffmpeg.isValidFFMPEG(knownPath)).toBe(true);
|
|
});
|
|
|
|
it("should return false for invalid ffmpeg path", () => {
|
|
expect(ffmpeg.isValidFFMPEG("/invalid/path/to/ffmpeg")).toBe(false);
|
|
});
|
|
|
|
it("should convert audio file to wav format", async () => {
|
|
if (!fs.existsSync(testDir)) fs.mkdirSync(testDir, { recursive: true });
|
|
|
|
const sampleUrl =
|
|
"https://github.com/ringcentral/ringcentral-api-docs/blob/main/resources/sample1.wav?raw=true";
|
|
|
|
const response = await fetch(sampleUrl);
|
|
if (!response.ok)
|
|
throw new Error(
|
|
`Failed to download sample file: ${response.statusText}`
|
|
);
|
|
|
|
const buffer = await response.arrayBuffer();
|
|
fs.writeFileSync(inputPath, Buffer.from(buffer));
|
|
|
|
const result = await ffmpeg.convertAudioToWav(inputPath, outputPath);
|
|
|
|
expect(result).toBe(true);
|
|
expect(fs.existsSync(outputPath)).toBe(true);
|
|
|
|
const stats = fs.statSync(outputPath);
|
|
expect(stats.size).toBeGreaterThan(0);
|
|
}, 30000);
|
|
|
|
it("should throw error when conversion fails", () => {
|
|
const nonExistentFile = path.resolve(testDir, "non-existent-file.wav");
|
|
const outputPath = path.resolve(testDir, "test-output-fail.wav");
|
|
|
|
expect(async () => {
|
|
return await ffmpeg.convertAudioToWav(nonExistentFile, outputPath);
|
|
}).rejects.toThrow(`Input file ${nonExistentFile} does not exist.`);
|
|
});
|
|
});
|