mirror of https://github.com/Nezreka/SoulSync.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.5 KiB
89 lines
2.5 KiB
from types import SimpleNamespace
|
|
|
|
from core.repair_jobs.acoustid_scanner import AcoustIDScannerJob
|
|
|
|
|
|
class _FakeCursor:
|
|
def __init__(self, rows):
|
|
self._rows = rows
|
|
self.executed = []
|
|
|
|
def execute(self, query, params=None):
|
|
self.executed.append((query, params))
|
|
return self
|
|
|
|
def fetchall(self):
|
|
return self._rows
|
|
|
|
def fetchone(self):
|
|
return None
|
|
|
|
|
|
class _FakeConnection:
|
|
def __init__(self, rows):
|
|
self._cursor = _FakeCursor(rows)
|
|
|
|
def cursor(self):
|
|
return self._cursor
|
|
|
|
def close(self):
|
|
pass
|
|
|
|
|
|
def _make_context(rows):
|
|
conn = _FakeConnection(rows)
|
|
config_manager = SimpleNamespace(
|
|
get=lambda key, default=None: default,
|
|
set=lambda *args, **kwargs: None,
|
|
)
|
|
db = SimpleNamespace(_get_connection=lambda: conn)
|
|
return SimpleNamespace(
|
|
db=db,
|
|
transfer_folder="/music",
|
|
config_manager=config_manager,
|
|
acoustid_client=object(),
|
|
create_finding=None,
|
|
report_progress=lambda **kwargs: None,
|
|
update_progress=lambda *args, **kwargs: None,
|
|
check_stop=lambda: False,
|
|
wait_if_paused=lambda: False,
|
|
sleep_or_stop=lambda *args, **kwargs: False,
|
|
)
|
|
|
|
|
|
def test_load_db_tracks_skips_null_ids_and_normalizes_track_ids():
|
|
job = AcoustIDScannerJob()
|
|
context = _make_context([
|
|
(None, "Broken Track", "Artist", "/music/broken.flac", 1, "Album", None, None),
|
|
(42, "Good Track", "Artist", "/music/good.flac", 2, "Album", "album-thumb", "artist-thumb"),
|
|
])
|
|
|
|
tracks = job._load_db_tracks(context)
|
|
|
|
assert list(tracks.keys()) == ["42"]
|
|
assert tracks["42"]["title"] == "Good Track"
|
|
assert tracks["42"]["artist"] == "Artist"
|
|
|
|
|
|
def test_scan_handles_mixed_track_id_types(monkeypatch):
|
|
job = AcoustIDScannerJob()
|
|
context = _make_context([
|
|
(None, "Broken Track", "Artist", "/music/broken.flac", 1, "Album", None, None),
|
|
(42, "Good Track", "Artist", "/music/good.flac", 2, "Album", "album-thumb", "artist-thumb"),
|
|
])
|
|
|
|
monkeypatch.setattr(job, "_resolve_path", lambda file_path, _context: file_path)
|
|
|
|
scanned_track_ids = []
|
|
|
|
def fake_scan_file(fpath, track_id, expected, acoustid_client, context, result,
|
|
fp_threshold, title_threshold, artist_threshold):
|
|
scanned_track_ids.append(track_id)
|
|
|
|
monkeypatch.setattr(job, "_scan_file", fake_scan_file)
|
|
|
|
result = job.scan(context)
|
|
|
|
assert result.scanned == 1
|
|
assert scanned_track_ids == ["42"]
|