video_translate/src/server/subtitleGeneration.test.ts
Song367 a0c1dc6ad5
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 27s
文件上传
2026-03-19 11:17:10 +08:00

136 lines
3.6 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest';
import { generateSubtitlePipeline } from './subtitleGeneration';
import { SubtitlePipelineResult } from '../types';
describe('generateSubtitlePipeline', () => {
it('uses the requested provider and video path when building subtitles', async () => {
const subtitleResult: SubtitlePipelineResult = {
subtitles: [],
speakers: [],
quality: 'fallback',
targetLanguage: 'English',
};
const generateSubtitlesFromVideo = vi.fn(async () => subtitleResult);
await generateSubtitlePipeline({
videoPath: 'clip.mp4',
targetLanguage: 'English',
provider: 'gemini',
env: {
GEMINI_API_KEY: 'gemini-key',
ARK_API_KEY: 'ark-key',
},
deps: {
generateSubtitlesFromVideo,
},
});
expect(generateSubtitlesFromVideo).toHaveBeenCalledWith(
expect.objectContaining({
videoPath: 'clip.mp4',
targetLanguage: 'English',
providerConfig: {
provider: 'gemini',
apiKey: 'gemini-key',
model: 'gemini-2.5-flash',
},
}),
);
});
it('falls back to the env default provider when the request omits it', async () => {
const subtitleResult: SubtitlePipelineResult = {
subtitles: [],
speakers: [],
quality: 'fallback',
targetLanguage: 'English',
};
const generateSubtitlesFromVideo = vi.fn(async () => subtitleResult);
await generateSubtitlePipeline({
videoPath: 'clip.mp4',
targetLanguage: 'English',
env: {
DEFAULT_LLM_PROVIDER: 'doubao',
ARK_API_KEY: 'ark-key',
},
deps: {
generateSubtitlesFromVideo,
},
});
expect(generateSubtitlesFromVideo).toHaveBeenCalledWith(
expect.objectContaining({
providerConfig: {
provider: 'doubao',
apiKey: 'ark-key',
model: 'doubao-seed-2-0-pro-260215',
baseUrl: 'https://ark.cn-beijing.volces.com/api/v3/responses',
timeoutMs: 600000,
},
}),
);
});
it('passes fetch implementation into video subtitle generation', async () => {
const subtitleResult: SubtitlePipelineResult = {
subtitles: [],
speakers: [],
quality: 'fallback',
targetLanguage: 'English',
};
const generateSubtitlesFromVideo = vi.fn(async () => subtitleResult);
const fetchImpl = vi.fn<typeof fetch>();
await generateSubtitlePipeline({
videoPath: 'clip.mp4',
targetLanguage: 'English',
provider: 'doubao',
env: {
ARK_API_KEY: 'ark-key',
},
fetchImpl,
requestId: 'req-123',
deps: {
generateSubtitlesFromVideo,
},
});
expect(generateSubtitlesFromVideo).toHaveBeenCalledWith(
expect.objectContaining({
fetchImpl,
requestId: 'req-123',
}),
);
});
it('passes file id through to video subtitle generation', async () => {
const subtitleResult: SubtitlePipelineResult = {
subtitles: [],
speakers: [],
quality: 'fallback',
targetLanguage: 'English',
};
const generateSubtitlesFromVideo = vi.fn(async () => subtitleResult);
await generateSubtitlePipeline({
fileId: 'file-123',
targetLanguage: 'English',
provider: 'doubao',
env: {
ARK_API_KEY: 'ark-key',
},
deps: {
generateSubtitlesFromVideo,
},
});
expect(generateSubtitlesFromVideo).toHaveBeenCalledWith(
expect.objectContaining({
fileId: 'file-123',
videoPath: undefined,
}),
);
});
});