import os import shutil import subprocess import sys import pytest # Ensure the project root is on sys.path when running tests. ROOT = os.path.dirname(os.path.dirname(__file__)) if ROOT not in sys.path: sys.path.insert(0, ROOT) @pytest.fixture(scope="session", autouse=True) def require_ffmpeg(): """The tests exercise real encodes; there is little point faking them.""" for tool in ("ffmpeg", "ffprobe"): if shutil.which(tool) is None: pytest.skip(f"{tool} is not on PATH", allow_module_level=True) @pytest.fixture def make_flac(): """Return a factory writing a short tagged FLAC file.""" def factory(path, title="Test Title", artist="Test Artist", album="Test Album", seconds=1): path.parent.mkdir(parents=True, exist_ok=True) subprocess.run( [ "ffmpeg", "-nostdin", "-hide_banner", "-loglevel", "error", "-y", "-f", "lavfi", "-i", f"sine=frequency=440:duration={seconds}", "-metadata", f"title={title}", "-metadata", f"artist={artist}", "-metadata", f"album={album}", "-metadata", "track=3", str(path), ], check=True, capture_output=True, ) return path return factory @pytest.fixture def probe_tag(): """Return a helper reading a single metadata tag from a file.""" def reader(path, tag): completed = subprocess.run( [ "ffprobe", "-v", "error", "-show_entries", f"format_tags={tag}", "-of", "default=noprint_wrappers=1:nokey=1", str(path), ], check=True, capture_output=True, text=True, ) return completed.stdout.strip() return reader