add scanner metadata cache reuse and control flags
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
"""Tests for CLI scan command options."""
|
||||
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
from click.testing import CliRunner
|
||||
|
||||
from vlm.cli import main
|
||||
|
||||
|
||||
def test_scan_no_metadata_passes_flag_to_scanner(tmp_path):
|
||||
"""Test `scan --no-metadata` disables ffprobe metadata extraction."""
|
||||
library_root = tmp_path / "library"
|
||||
library_root.mkdir(parents=True)
|
||||
|
||||
config_file = tmp_path / "config.yaml"
|
||||
config_file.write_text(
|
||||
f"""
|
||||
library_root: {library_root}
|
||||
video_extensions:
|
||||
- .mp4
|
||||
categories:
|
||||
movie: [movie, movies]
|
||||
series: [series, tv, shows]
|
||||
anime: [anime]
|
||||
""".strip()
|
||||
)
|
||||
|
||||
runner = CliRunner()
|
||||
with patch("vlm.scanner.scan_library", return_value=[]) as mock_scan, patch(
|
||||
"vlm.scanner.save_inventory_csv"
|
||||
) as mock_save:
|
||||
result = runner.invoke(
|
||||
main,
|
||||
["--config", str(config_file), "scan", "--no-metadata", "--output", str(tmp_path / "inv.csv")]
|
||||
)
|
||||
|
||||
assert result.exit_code == 0
|
||||
assert mock_scan.call_count == 1
|
||||
_, kwargs = mock_scan.call_args
|
||||
assert kwargs["include_video_metadata"] is False
|
||||
assert "progress_callback" in kwargs
|
||||
assert mock_save.call_count == 1
|
||||
|
||||
|
||||
def test_scan_force_refresh_metadata_disables_cache(tmp_path):
|
||||
"""Test `scan --force-refresh-metadata` skips cache loading."""
|
||||
library_root = tmp_path / "library"
|
||||
library_root.mkdir(parents=True)
|
||||
|
||||
config_file = tmp_path / "config.yaml"
|
||||
config_file.write_text(
|
||||
f"""
|
||||
library_root: {library_root}
|
||||
video_extensions:
|
||||
- .mp4
|
||||
categories:
|
||||
movie: [movie, movies]
|
||||
series: [series, tv, shows]
|
||||
anime: [anime]
|
||||
""".strip()
|
||||
)
|
||||
|
||||
output_file = tmp_path / "inventory.csv"
|
||||
output_file.write_text(
|
||||
"# Generated: 2026-02-09T00:00:00\n"
|
||||
f"# Library Root: {library_root}\n"
|
||||
"path,filename,size_bytes,modified_timestamp,category,resolution,codec,duration_seconds,bitrate_kbps\n"
|
||||
)
|
||||
|
||||
runner = CliRunner()
|
||||
with patch("vlm.scanner.load_inventory_csv") as mock_load_cache, patch(
|
||||
"vlm.scanner.scan_library", return_value=[]
|
||||
) as mock_scan, patch("vlm.scanner.save_inventory_csv") as mock_save:
|
||||
result = runner.invoke(
|
||||
main,
|
||||
[
|
||||
"--config", str(config_file), "scan",
|
||||
"--output", str(output_file),
|
||||
"--force-refresh-metadata"
|
||||
]
|
||||
)
|
||||
|
||||
assert result.exit_code == 0
|
||||
mock_load_cache.assert_not_called()
|
||||
_, kwargs = mock_scan.call_args
|
||||
assert kwargs["include_video_metadata"] is True
|
||||
assert kwargs["metadata_cache"] is None
|
||||
assert mock_save.call_count == 1
|
||||
Reference in New Issue
Block a user