Add duplicate filename diagnostics
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
from pathlib import Path
|
||||
|
||||
from serato_doctor.duplicates import find_duplicate_groups
|
||||
from serato_doctor.models.duplicate import DuplicateKind
|
||||
from serato_doctor.models.track import DiskTrack
|
||||
|
||||
|
||||
def track(path):
|
||||
path = Path(path)
|
||||
return DiskTrack(path, path.name, 100, path.suffix.lower())
|
||||
|
||||
|
||||
def test_exact_names_in_different_folders_form_a_group():
|
||||
groups = find_duplicate_groups(
|
||||
[track("/A/Song.mp3"), track("/B/Song.mp3")]
|
||||
)
|
||||
|
||||
assert len(groups) == 1
|
||||
assert groups[0].kind is DuplicateKind.EXACT_NAME
|
||||
assert groups[0].display_name == "Song.mp3"
|
||||
assert groups[0].extra_files == 1
|
||||
|
||||
|
||||
def test_case_only_difference_is_an_exact_name_duplicate():
|
||||
groups = find_duplicate_groups(
|
||||
[track("/A/SONG.MP3"), track("/B/song.mp3")]
|
||||
)
|
||||
|
||||
assert groups[0].kind is DuplicateKind.EXACT_NAME
|
||||
|
||||
|
||||
def test_numeric_suffixes_form_a_suspected_cloud_conflict_group():
|
||||
groups = find_duplicate_groups(
|
||||
[
|
||||
track("/A/Track.mp3"),
|
||||
track("/B/Track 2.mp3"),
|
||||
track("/C/Track 3.mp3"),
|
||||
]
|
||||
)
|
||||
|
||||
assert len(groups) == 1
|
||||
assert groups[0].kind is DuplicateKind.CLOUD_CONFLICT
|
||||
assert groups[0].display_name == "Track.mp3"
|
||||
assert groups[0].extra_files == 2
|
||||
assert [item.path for item in groups[0].tracks] == [
|
||||
Path("/A/Track.mp3"),
|
||||
Path("/B/Track 2.mp3"),
|
||||
Path("/C/Track 3.mp3"),
|
||||
]
|
||||
|
||||
|
||||
def test_unrelated_and_single_files_are_not_reported():
|
||||
groups = find_duplicate_groups(
|
||||
[track("/A/First.mp3"), track("/B/Second.mp3")]
|
||||
)
|
||||
|
||||
assert groups == ()
|
||||
@@ -85,3 +85,22 @@ def test_smart_crate_references_are_reported_but_not_scored():
|
||||
assert report.static_crates == 1
|
||||
assert report.smart_crates == 1
|
||||
assert report.dynamic_references_excluded == 1
|
||||
|
||||
|
||||
def test_health_reports_cloud_conflicts_separately_from_exact_duplicates():
|
||||
library = Library.build(
|
||||
[],
|
||||
[
|
||||
track("Track.mp3", "Original"),
|
||||
track("Track 2.mp3", "Conflict"),
|
||||
track("Copy.mp3", "First"),
|
||||
track("Copy.mp3", "Second"),
|
||||
],
|
||||
)
|
||||
|
||||
report = analyze_health(library)
|
||||
|
||||
assert report.duplicate_filename_groups == 1
|
||||
assert report.duplicate_files == 1
|
||||
assert report.suspected_cloud_conflict_groups == 1
|
||||
assert report.suspected_cloud_conflict_files == 1
|
||||
|
||||
Reference in New Issue
Block a user