soulsync/tests/imports/test_import_album.py
Antti Kettunen e10df4caf2
Rehome import helpers into core/imports
- Move import flow modules into a dedicated package
- Update app and test imports to the new namespace
- Group the import-focused tests under tests/imports
2026-04-27 19:54:44 +03:00

189 lines
6.1 KiB
Python

import core.imports.album as import_album
class _FakeEngine:
def normalize_string(self, text):
return str(text or "").strip().lower()
def similarity_score(self, left, right):
return 1.0 if left == right else 0.0
def test_resolve_album_artist_context_uses_provider_genres(monkeypatch):
class _FakeClient:
def get_artist(self, artist_id):
assert artist_id == "artist-1"
return {"genres": ["rock", "indie"]}
monkeypatch.setattr(import_album, "get_client_for_source", lambda source: _FakeClient() if source == "spotify" else None)
context = import_album.resolve_album_artist_context(
{
"id": "album-1",
"name": "Album One",
"artist_id": "artist-1",
"artists": [{"name": "Artist One", "id": "artist-1"}],
},
source="spotify",
)
assert context == {
"id": "artist-1",
"name": "Artist One",
"genres": ["rock", "indie"],
"source": "spotify",
}
def test_build_album_import_context_is_neutral():
context = import_album.build_album_import_context(
{
"id": "album-1",
"name": "Album One",
"artist": "Artist One",
"artist_id": "artist-1",
"artists": [{"name": "Artist One", "id": "artist-1"}],
"release_date": "2024-01-01",
"total_tracks": 12,
"album_type": "album",
"image_url": "https://img.example/album.jpg",
"source": "deezer",
},
{
"id": "track-1",
"name": "Song One",
"track_number": 3,
"disc_number": 2,
"duration_ms": 180000,
"artists": [{"name": "Artist One"}],
"uri": "deezer:track:track-1",
"album": "Album One",
"source": "deezer",
},
artist_context={
"id": "artist-1",
"name": "Artist One",
"genres": ["rock"],
"source": "deezer",
},
total_discs=2,
source="deezer",
)
assert context["artist"]["name"] == "Artist One"
assert context["artist"]["genres"] == ["rock"]
assert context["album"]["name"] == "Album One"
assert context["album"]["total_discs"] == 2
assert context["track_info"]["name"] == "Song One"
assert context["track_info"]["track_number"] == 3
assert context["original_search_result"]["clean_title"] == "Song One"
assert context["source"] == "deezer"
assert "spotify_artist" not in context
assert "spotify_album" not in context
def test_build_album_import_match_payload_uses_generic_track_keys(monkeypatch, tmp_path):
staging_root = tmp_path / "Staging"
staging_root.mkdir()
(staging_root / "Song One.flac").write_text("fake")
monkeypatch.setattr(import_album, "_get_matching_engine", lambda: _FakeEngine())
monkeypatch.setattr(
import_album,
"collect_staging_files",
lambda file_paths=None: [
{
"filename": "Song One.flac",
"full_path": str(staging_root / "Song One.flac"),
"title": "Song One",
"artist": "Artist One",
"album": "Album One",
"albumartist": "Artist One",
"track_number": 1,
"disc_number": 1,
}
],
)
monkeypatch.setattr(
import_album,
"get_artist_album_tracks",
lambda album_id, artist_name="", album_name="", source=None: {
"success": True,
"album": {
"id": album_id,
"name": "Album One",
"artist": "Artist One",
"artist_name": "Artist One",
"artist_id": "artist-1",
"artists": [{"name": "Artist One", "id": "artist-1"}],
"release_date": "2024-01-01",
"total_tracks": 1,
"total_discs": 1,
"album_type": "album",
"image_url": "https://img.example/album.jpg",
"images": [{"url": "https://img.example/album.jpg"}],
"source": "spotify",
},
"tracks": [
{
"id": "track-1",
"name": "Song One",
"track_number": 1,
"disc_number": 1,
"duration_ms": 180000,
"artists": [{"name": "Artist One"}],
"uri": "spotify:track:track-1",
"album": {
"id": album_id,
"name": "Album One",
"artist": "Artist One",
},
"source": "spotify",
}
],
"source": "spotify",
"source_priority": ["spotify"],
"resolved_album_id": album_id,
},
)
result = import_album.build_album_import_match_payload(
"album-1",
album_name="Album One",
album_artist="Artist One",
source="spotify",
)
assert result["success"] is True
assert result["album"]["artist"] == "Artist One"
assert result["source"] == "spotify"
assert result["matches"] == [
{
"track": {
"id": "track-1",
"name": "Song One",
"track_number": 1,
"disc_number": 1,
"duration_ms": 180000,
"artists": [{"name": "Artist One"}],
"uri": "spotify:track:track-1",
"album": {
"id": "album-1",
"name": "Album One",
"artist": "Artist One",
},
"source": "spotify",
},
"staging_file": {
"filename": "Song One.flac",
"full_path": str(staging_root / "Song One.flac"),
"title": "Song One",
"artist": "Artist One",
"album": "Album One",
"albumartist": "Artist One",
"track_number": 1,
"disc_number": 1,
},
"confidence": 1.0,
}
]