All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 27s
136 lines
3.6 KiB
TypeScript
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,
|
|
}),
|
|
);
|
|
});
|
|
});
|