import csv import sys from serato_doctor.cli import main def test_cli_writes_reports_and_prints_counts(tmp_path, monkeypatch, capsys): serato = tmp_path / "serato" subcrates = serato / "Subcrates" music = tmp_path / "music" subcrates.mkdir(parents=True) music.mkdir() crate_text = ( "Users/sample-user/OneDrive/Jukebox/Found.mp漳牴k" "Users/sample-user/OneDrive/Jukebox/Missing.mp漳牴k" ) (subcrates / "Test.crate").write_bytes(crate_text.encode("utf-16-le")) (music / "Found.mp3").write_bytes(b"synthetic audio") csv_path = tmp_path / "scan.csv" report_path = tmp_path / "report.txt" monkeypatch.setattr( sys, "argv", [ "serato-doctor", "--serato", str(serato), "--music", str(music), "--out", str(csv_path), "--report", str(report_path), ], ) main() output = capsys.readouterr().out assert "Crate references: 2" in output assert "Disk tracks: 1" in output assert "Missing by filename: 1" in output assert f"CSV: {csv_path}" in output assert f"Report: {report_path}" in output with csv_path.open(newline="", encoding="utf-8") as csv_file: rows = list(csv.DictReader(csv_file)) assert [row["exists_by_filename"] for row in rows] == ["True", "False"] assert "Total missing references: 1" in report_path.read_text(encoding="utf-8") def test_cli_accepts_old_reference_root(tmp_path, monkeypatch, capsys): serato = tmp_path / "serato" subcrates = serato / "Subcrates" music = tmp_path / "music" subcrates.mkdir(parents=True) music.mkdir() (subcrates / "Test.crate").write_bytes( "Archive/Jukebox/Found.mp3otrk".encode("utf-16-le") ) (music / "Found.mp3").write_bytes(b"synthetic audio") monkeypatch.setattr( sys, "argv", [ "serato-doctor", "--serato", str(serato), "--music", str(music), "--out", str(tmp_path / "scan.csv"), "--report", str(tmp_path / "report.txt"), "--reference-root", "/Archive/Jukebox", ], ) main() output = capsys.readouterr().out assert "Crate references: 1" in output assert "Missing by filename: 0" in output