Add broken symlink diagnostics
This commit is contained in:
@@ -2,6 +2,7 @@ from pathlib import Path
|
||||
|
||||
from serato_doctor.health import analyze_health
|
||||
from serato_doctor.models.crate import Crate, CrateKind
|
||||
from serato_doctor.models.filesystem import BrokenSymlink
|
||||
from serato_doctor.models.library import Library
|
||||
from serato_doctor.models.reference import TrackReference
|
||||
from serato_doctor.models.track import DiskTrack
|
||||
@@ -104,3 +105,16 @@ def test_health_reports_cloud_conflicts_separately_from_exact_duplicates():
|
||||
assert report.duplicate_files == 1
|
||||
assert report.suspected_cloud_conflict_groups == 1
|
||||
assert report.suspected_cloud_conflict_files == 1
|
||||
|
||||
|
||||
def test_health_reports_broken_symlinks_without_changing_score():
|
||||
library = Library.build(
|
||||
[reference("Found.mp3")],
|
||||
[track("Found.mp3")],
|
||||
[BrokenSymlink(Path("/music/Broken.mp3"), Path("missing.mp3"))],
|
||||
)
|
||||
|
||||
report = analyze_health(library)
|
||||
|
||||
assert report.score == 100.0
|
||||
assert report.broken_symlinks == 1
|
||||
|
||||
+34
-1
@@ -1,4 +1,6 @@
|
||||
from serato_doctor.scanner import scan_audio
|
||||
from pathlib import Path
|
||||
|
||||
from serato_doctor.scanner import scan_audio, scan_filesystem
|
||||
|
||||
|
||||
def test_scan_audio_finds_supported_files(tmp_path):
|
||||
@@ -15,3 +17,34 @@ def test_scan_audio_finds_supported_files(tmp_path):
|
||||
first = next(track for track in tracks if track.filename == "First.MP3")
|
||||
assert first.suffix == ".mp3"
|
||||
assert first.size == len(b"synthetic audio")
|
||||
|
||||
|
||||
def test_scan_filesystem_reports_broken_symlink(tmp_path):
|
||||
music = tmp_path / "music"
|
||||
music.mkdir()
|
||||
link = music / "Missing.mp3"
|
||||
link.symlink_to("not-there.mp3")
|
||||
|
||||
result = scan_filesystem(music)
|
||||
|
||||
assert result.tracks == ()
|
||||
assert len(result.broken_symlinks) == 1
|
||||
assert result.broken_symlinks[0].path == link
|
||||
assert result.broken_symlinks[0].target == Path("not-there.mp3")
|
||||
|
||||
|
||||
def test_valid_audio_symlink_is_scanned_normally(tmp_path):
|
||||
music = tmp_path / "music"
|
||||
music.mkdir()
|
||||
target = music / "Target.mp3"
|
||||
target.write_bytes(b"synthetic audio")
|
||||
link = music / "Linked.mp3"
|
||||
link.symlink_to(target)
|
||||
|
||||
result = scan_filesystem(music)
|
||||
|
||||
assert {track.filename for track in result.tracks} == {
|
||||
"Linked.mp3",
|
||||
"Target.mp3",
|
||||
}
|
||||
assert result.broken_symlinks == ()
|
||||
|
||||
Reference in New Issue
Block a user