from pathlib import Path from serato_doctor.health import analyze_health from serato_doctor.models.library import Library from serato_doctor.models.reference import TrackReference from serato_doctor.models.track import DiskTrack def reference(filename): return TrackReference( Path("Test.crate"), Path("/old/House") / filename, filename ) def track(filename, folder="House"): path = Path("/new") / folder / filename return DiskTrack(path, filename, 100, path.suffix.lower()) def test_health_report_exposes_each_metric(): library = Library.build( [ reference("Found.mp3"), reference("Conflict.mp3"), reference("Absent.mp3"), ], [ track("Found.mp3"), track("Conflict 2.mp3"), track("Conflict 2.mp3", "Backup"), track("Unused.mp3"), ], ) report = analyze_health(library) assert report.score == 33.3 assert report.score_basis == ( "Resolved crate references / total crate references" ) assert report.total_references == 3 assert report.healthy_references == 1 assert report.missing_references == 2 assert report.unique_missing_filenames == 2 assert report.disk_tracks == 4 assert report.duplicate_filename_groups == 1 assert report.duplicate_files == 1 assert report.unused_tracks == 3 assert report.suggested_matches == 1 def test_empty_library_has_no_health_score(): report = analyze_health(Library.build([], [])) assert report.score is None assert report.total_references == 0