"""Regression tests for CLI JSON error handling.""" from pathlib import Path from click.testing import CliRunner from vlm.cli import main def _write_config(path: Path, library_root: Path) -> None: path.parent.mkdir(parents=True, exist_ok=True) path.write_text( f""" library_root: {library_root} video_extensions: - .mp4 - .mkv templates: movie_dir: "movie/{{title}} ({{year}})/" series_dir: "series/{{title}}/Season {{season:02d}}/" movie_filename: "{{title}} ({{year}}){{ext}}" series_filename: "S{{season:02d}}E{{episode:02d}}{{ext}}" """.strip() ) def test_analyze_invalid_json_returns_user_friendly_error(tmp_path): config_path = tmp_path / ".vlm" / "config.yaml" _write_config(config_path, tmp_path / "library") invalid_json = tmp_path / "identities.json" invalid_json.write_text("{ this is invalid json") result = CliRunner().invoke( main, [ "--config", str(config_path), "analyze", "--input", str(invalid_json), "--output", str(tmp_path / "analysis.json"), ], ) assert result.exit_code != 0 assert "Failed to parse JSON file" in result.output assert "NameError" not in result.output def test_plan_invalid_json_returns_user_friendly_error(tmp_path): config_path = tmp_path / ".vlm" / "config.yaml" _write_config(config_path, tmp_path / "library") invalid_json = tmp_path / "identities.json" invalid_json.write_text("{ this is invalid json") result = CliRunner().invoke( main, [ "--config", str(config_path), "plan", "--input", str(invalid_json), "--output", str(tmp_path / "plan.json"), ], ) assert result.exit_code != 0 assert "Failed to parse JSON file" in result.output assert "NameError" not in result.output