fix: album directory parsing with album versions (#1683)
authorMarek Skrobacki <skrobul@skrobul.com>
Mon, 30 Sep 2024 22:40:35 +0000 (23:40 +0100)
committerGitHub <noreply@github.com>
Mon, 30 Sep 2024 22:40:35 +0000 (00:40 +0200)
music_assistant/server/providers/filesystem_local/helpers.py
tests/server/providers/filesystem/test_helpers.py

index 9f16bdb0a66df4996468a7016d0ad5d36941c430..237699ab773cf6c44154b320132bcd2a076d32cf 100644 (file)
@@ -79,7 +79,7 @@ def get_album_dir(track_dir: str, album_name: str) -> str | None:
         if compare_strings(album_name, dirname.split(" - ")[-1], False):
             # account for ArtistName - AlbumName format in the directory name
             return parentdir
-        if compare_strings(album_name, dirname.split("(")[0], False):
+        if compare_strings(album_name, dirname.split(" - ")[-1].split("(")[0], False):
             # account for ArtistName - AlbumName (Version) format in the directory name
             return parentdir
         if compare_strings(album_name.split("(")[0], dirname, False):
index 1ce824d95ddf0fb3a0be2a2118d72a2c09e46579..cac1bb781be31273dc2823426a6963f4645ac619 100644 (file)
@@ -1,5 +1,7 @@
 """Tests for utility/helper functions."""
 
+import pytest
+
 from music_assistant.server.providers.filesystem_local import helpers
 
 # ruff: noqa: S108
@@ -31,3 +33,59 @@ def test_get_artist_dir() -> None:
     album_path = "/tmp/Antonin Dvorak/Album"
     artist_name = "Antonín Dvořák"
     assert helpers.get_artist_dir(artist_name, album_path) == "/tmp/Antonin Dvorak"
+
+
+@pytest.mark.parametrize(
+    ("album_name", "track_dir", "expected"),
+    [
+        # Test literal match
+        (
+            "Selected Ambient Works 85-92",
+            "/home/user/Music/Aphex Twin/Selected Ambient Works 85-92",
+            "/home/user/Music/Aphex Twin/Selected Ambient Works 85-92",
+        ),
+        # Test artist - album format
+        (
+            "Selected Ambient Works 85-92",
+            "/home/user/Music/Aphex Twin - Selected Ambient Works 85-92",
+            "/home/user/Music/Aphex Twin - Selected Ambient Works 85-92",
+        ),
+        # Test artist - album (version) format
+        (
+            "Selected Ambient Works 85-92",
+            "/home/user/Music/Aphex Twin - Selected Ambient Works 85-92 (Remastered)",
+            "/home/user/Music/Aphex Twin - Selected Ambient Works 85-92 (Remastered)",
+        ),
+        # Test artist - album (version) format
+        (
+            "Selected Ambient Works 85-92",
+            "/home/user/Music/Aphex Twin - Selected Ambient Works 85-92 (Remastered) - WEB",
+            "/home/user/Music/Aphex Twin - Selected Ambient Works 85-92 (Remastered) - WEB",
+        ),
+        # Test album (version) format
+        (
+            "Selected Ambient Works 85-92",
+            "/home/user/Music/Aphex Twin/Selected Ambient Works 85-92 (Remastered)",
+            "/home/user/Music/Aphex Twin/Selected Ambient Works 85-92 (Remastered)",
+        ),
+        # Test album name in dir
+        (
+            "Selected Ambient Works 85-92",
+            "/home/user/Music/RandomDirWithSelected Ambient Works 85-92InIt",
+            "/home/user/Music/RandomDirWithSelected Ambient Works 85-92InIt",
+        ),
+        # Test no match
+        (
+            "NonExistentAlbumName",
+            "/home/user/Music/Aphex Twin/Selected Ambient Works 85-92",
+            None,
+        ),
+        # Test empty album name
+        ("", "/home/user/Music/Aphex Twin/Selected Ambient Works 85-92", None),
+        # Test empty track dir
+        ("Selected Ambient Works 85-92", "", None),
+    ],
+)
+def test_get_album_dir(album_name: str, track_dir: str, expected: str) -> None:
+    """Test the extraction of an album dir."""
+    assert helpers.get_album_dir(track_dir, album_name) == expected