'use strict'; /** * test4-subtitles.js * Validates: extractSubtitlesAndOcr produces correctly named SRT files. * Source: MKV with 2 ITA SRT streams (forced + SDH). * Expected: .ita.forced.srt and .ita.hearing_impaired.srt in source dir. */ const path = require('path'); const fs = require('fs'); const { buildMockArgs, cleanupWorkDir, assert } = require('../mock-tdarr-runtime'); const { plugin: subPlugin } = require('../../LocalFlowPlugins/subtitles/extractSubtitlesAndOcr/1.0.0/index'); const FILE = path.resolve('tests/samples/test4_subtitles.mkv'); const SOURCE_DIR = path.dirname(FILE); const BASE_NAME = path.basename(FILE, '.mkv'); async function run() { console.log('\n=== TEST 4: Subtitle Extraction (forced + SDH) ===\n'); const args = buildMockArgs({ filePath: FILE, inputs: { subtitleEditPath: 'SubtitleEdit', languages: 'ita,eng' }, }); await subPlugin(args); // Check that forced SRT was created const forcedSrt = path.join(SOURCE_DIR, `${BASE_NAME}.ita.forced.srt`); const sdhSrt = path.join(SOURCE_DIR, `${BASE_NAME}.ita.sdh.srt`); console.log(' Checking for:', path.basename(forcedSrt)); assert(fs.existsSync(forcedSrt), `Forced SRT exists: ${path.basename(forcedSrt)}`); console.log(' Checking for:', path.basename(sdhSrt)); // Note: disposition hearing_impaired maps to 'sdh' suffix // If not found, check for .ita.default.srt variant (FFmpeg disposition naming may vary) const sdhExists = fs.existsSync(sdhSrt); const altSdhExists = fs.existsSync(path.join(SOURCE_DIR, `${BASE_NAME}.ita.default.srt`)); assert(sdhExists || altSdhExists, `SDH/hearing-impaired SRT exists`); // Cleanup generated subtitle files [forcedSrt, sdhSrt].forEach((f) => { try { fs.unlinkSync(f); } catch (_) {} }); cleanupWorkDir(args); console.log('\n=== TEST 4 PASSED ===\n'); } module.exports = run;