Warns exactly once when deno is missing (naming the cryptic failure it prevents users from having to debug), stays silent when deno is on PATH.
44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
"""Seam tests for the yt-dlp JS-runtime startup check.
|
|
|
|
YouTube gates downloadable formats behind JS challenges; without Deno on PATH
|
|
every stream / music-video download fails with the cryptic "Requested format
|
|
is not available". The check must say so plainly in the log — once — and stay
|
|
silent when deno is present.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import core.youtube_client as yc
|
|
|
|
|
|
def _reset():
|
|
yc._JS_RUNTIME_WARNED = False
|
|
|
|
|
|
def _capture_warnings(monkeypatch):
|
|
calls = []
|
|
monkeypatch.setattr(yc.logger, 'warning', lambda msg, *a: calls.append(msg % a if a else msg))
|
|
return calls
|
|
|
|
|
|
def test_warns_once_when_deno_missing(monkeypatch):
|
|
_reset()
|
|
warnings = _capture_warnings(monkeypatch)
|
|
monkeypatch.setattr('shutil.which', lambda name: None)
|
|
|
|
yc._warn_if_no_js_runtime()
|
|
yc._warn_if_no_js_runtime() # second call must not duplicate
|
|
|
|
assert len(warnings) == 1
|
|
assert 'Requested format is not available' in warnings[0]
|
|
assert 'Deno' in warnings[0] or 'deno' in warnings[0]
|
|
|
|
|
|
def test_silent_when_deno_present(monkeypatch):
|
|
_reset()
|
|
warnings = _capture_warnings(monkeypatch)
|
|
monkeypatch.setattr('shutil.which', lambda name: '/usr/local/bin/deno' if name == 'deno' else None)
|
|
|
|
yc._warn_if_no_js_runtime()
|
|
|
|
assert warnings == []
|