From ca7b39c692803c95018f1d801e35560cd8de7227 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Wed, 27 Mar 2019 12:27:23 +0100
Subject: [PATCH] Fix #740: Do not consider tracks as duplicates during import
 if they have different positions

---
 api/funkwhale_api/music/tasks.py |  4 +++-
 api/tests/music/test_tasks.py    | 19 +++++++++++++++++++
 changes/changelog.d/740.bugfix   |  1 +
 3 files changed, 23 insertions(+), 1 deletion(-)
 create mode 100644 changes/changelog.d/740.bugfix

diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py
index e9c73273e4..fc4da9cad6 100644
--- a/api/funkwhale_api/music/tasks.py
+++ b/api/funkwhale_api/music/tasks.py
@@ -503,7 +503,9 @@ def _get_track(data):
     # get / create track
     track_title = data["title"]
     track_number = data.get("track_number", 1)
-    query = Q(title__iexact=track_title, artist=artist, album=album)
+    query = Q(
+        title__iexact=track_title, artist=artist, album=album, position=track_number
+    )
     if track_mbid:
         query |= Q(mbid=track_mbid)
     if track_fid:
diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py
index 76d820cca7..0fc85a0c11 100644
--- a/api/tests/music/test_tasks.py
+++ b/api/tests/music/test_tasks.py
@@ -156,6 +156,25 @@ def test_can_create_track_from_file_metadata_distinct_release_mbid(factories):
     assert new_track != track
 
 
+def test_can_create_track_from_file_metadata_distinct_position(factories):
+    """Cf https://dev.funkwhale.audio/funkwhale/funkwhale/issues/740"""
+    artist = factories["music.Artist"]()
+    album = factories["music.Album"](artist=artist)
+    track = factories["music.Track"](album=album, artist=artist)
+    metadata = {
+        "artist": artist.name,
+        "album": album.title,
+        "title": track.title,
+        "track_number": track.position + 1,
+        "musicbrainz_artistid": artist.mbid,
+        "musicbrainz_albumid": album.mbid,
+    }
+
+    new_track = tasks.get_track_from_import_metadata(metadata)
+
+    assert new_track != track
+
+
 def test_can_create_track_from_file_metadata_federation(factories, mocker, r_mock):
     metadata = {
         "artist": "Artist",
diff --git a/changes/changelog.d/740.bugfix b/changes/changelog.d/740.bugfix
new file mode 100644
index 0000000000..5cf04c8269
--- /dev/null
+++ b/changes/changelog.d/740.bugfix
@@ -0,0 +1 @@
+Do not consider tracks as duplicates during import if they have different positions (#740)
-- 
GitLab