From 0498cfa07dd373b4f3c6b54be536c6710a96b5f9 Mon Sep 17 00:00:00 2001 From: Kyle Date: Fri, 3 Apr 2026 12:53:58 -0700 Subject: [PATCH] fix yt-dlp test harness --- .../services/youtube/metadata-probe.test.ts | 23 ++++++++++++++++++- .../services/youtube/track-download.test.ts | 16 ++++++------- src/core/services/youtube/track-probe.test.ts | 8 +++++++ 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/core/services/youtube/metadata-probe.test.ts b/src/core/services/youtube/metadata-probe.test.ts index 2c8f1ec7..e0f58add 100644 --- a/src/core/services/youtube/metadata-probe.test.ts +++ b/src/core/services/youtube/metadata-probe.test.ts @@ -34,7 +34,12 @@ EOF function makeHangingFakeYtDlpScript(dir: string): void { const scriptPath = path.join(dir, 'yt-dlp'); - const script = `#!/usr/bin/env sh + const script = + process.platform === 'win32' + ? `#!/usr/bin/env bun +setInterval(() => {}, 1000); +` + : `#!/usr/bin/env sh while :; do sleep 1; done @@ -52,11 +57,19 @@ async function withFakeYtDlp(payload: string, fn: () => Promise): Promise< fs.mkdirSync(binDir, { recursive: true }); makeFakeYtDlpScript(binDir, payload); const originalPath = process.env.PATH ?? ''; + const originalCommand = process.env.SUBMINER_YTDLP_BIN; process.env.PATH = `${binDir}${path.delimiter}${originalPath}`; + process.env.SUBMINER_YTDLP_BIN = + process.platform === 'win32' ? path.join(binDir, 'yt-dlp.cmd') : path.join(binDir, 'yt-dlp'); try { return await fn(); } finally { process.env.PATH = originalPath; + if (originalCommand === undefined) { + delete process.env.SUBMINER_YTDLP_BIN; + } else { + process.env.SUBMINER_YTDLP_BIN = originalCommand; + } } }); } @@ -67,11 +80,19 @@ async function withHangingFakeYtDlp(fn: () => Promise): Promise { fs.mkdirSync(binDir, { recursive: true }); makeHangingFakeYtDlpScript(binDir); const originalPath = process.env.PATH ?? ''; + const originalCommand = process.env.SUBMINER_YTDLP_BIN; process.env.PATH = `${binDir}${path.delimiter}${originalPath}`; + process.env.SUBMINER_YTDLP_BIN = + process.platform === 'win32' ? path.join(binDir, 'yt-dlp.cmd') : path.join(binDir, 'yt-dlp'); try { return await fn(); } finally { process.env.PATH = originalPath; + if (originalCommand === undefined) { + delete process.env.SUBMINER_YTDLP_BIN; + } else { + process.env.SUBMINER_YTDLP_BIN = originalCommand; + } } }); } diff --git a/src/core/services/youtube/track-download.test.ts b/src/core/services/youtube/track-download.test.ts index 54a4a85c..2488ac73 100644 --- a/src/core/services/youtube/track-download.test.ts +++ b/src/core/services/youtube/track-download.test.ts @@ -143,12 +143,12 @@ if [ "$YTDLP_FAKE_MODE" = "multi" ]; then IFS="," for lang in $sub_lang; do if [ -n "$lang" ]; then - printf 'WEBVTT\\n' > "${prefix}.${lang}.vtt" + printf 'WEBVTT\\n' > "\${prefix}.\${lang}.vtt" fi done IFS="$OLD_IFS" elif [ "$YTDLP_FAKE_MODE" = "rolling-auto" ]; then - cat <<'EOF' > "${prefix}.vtt" + cat <<'EOF' > "\${prefix}.vtt" WEBVTT 00:00:01.000 --> 00:00:02.000 @@ -162,19 +162,19 @@ WEBVTT EOF elif [ "$YTDLP_FAKE_MODE" = "multi-primary-only-fail" ]; then - primary_lang="${sub_lang%%,*}" + primary_lang="\${sub_lang%%,*}" if [ -n "$primary_lang" ]; then - printf 'WEBVTT\\n' > "${prefix}.${primary_lang}.vtt" + printf 'WEBVTT\\n' > "\${prefix}.\${primary_lang}.vtt" fi printf "ERROR: Unable to download video subtitles for 'en': HTTP Error 429: Too Many Requests\\n" 1>&2 exit 1 elif [ "$YTDLP_FAKE_MODE" = "both" ]; then - printf 'WEBVTT\\n' > "${prefix}.vtt" - printf 'webp' > "${prefix}.orig.webp" + printf 'WEBVTT\\n' > "\${prefix}.vtt" + printf 'webp' > "\${prefix}.orig.webp" elif [ "$YTDLP_FAKE_MODE" = "webp-only" ]; then - printf 'webp' > "${prefix}.orig.webp" + printf 'webp' > "\${prefix}.orig.webp" else - printf 'WEBVTT\\n' > "${prefix}.vtt" + printf 'WEBVTT\\n' > "\${prefix}.vtt" fi `; fs.writeFileSync(scriptPath, script, 'utf8'); diff --git a/src/core/services/youtube/track-probe.test.ts b/src/core/services/youtube/track-probe.test.ts index 00891851..fe31517b 100644 --- a/src/core/services/youtube/track-probe.test.ts +++ b/src/core/services/youtube/track-probe.test.ts @@ -46,11 +46,19 @@ async function withFakeYtDlp( fs.mkdirSync(binDir, { recursive: true }); makeFakeYtDlpScript(binDir, payload, options.rawScript === true); const originalPath = process.env.PATH ?? ''; + const originalCommand = process.env.SUBMINER_YTDLP_BIN; process.env.PATH = `${binDir}${path.delimiter}${originalPath}`; + process.env.SUBMINER_YTDLP_BIN = + process.platform === 'win32' ? path.join(binDir, 'yt-dlp.cmd') : path.join(binDir, 'yt-dlp'); try { return await fn(); } finally { process.env.PATH = originalPath; + if (originalCommand === undefined) { + delete process.env.SUBMINER_YTDLP_BIN; + } else { + process.env.SUBMINER_YTDLP_BIN = originalCommand; + } } }); }