From c8702ca72672cdf4e6d0698088073024f9845488 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Wed, 11 Dec 2019 10:49:45 +0100
Subject: [PATCH] Fx #986: Fixed invalid displayed number of tracks in playlist

---
 api/funkwhale_api/playlists/views.py |  2 +-
 api/tests/playlists/test_views.py    | 12 ++++++++++++
 changes/changelog.d/986.bugfix       |  1 +
 3 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100644 changes/changelog.d/986.bugfix

diff --git a/api/funkwhale_api/playlists/views.py b/api/funkwhale_api/playlists/views.py
index 6f9ea23ce..f2ade8181 100644
--- a/api/funkwhale_api/playlists/views.py
+++ b/api/funkwhale_api/playlists/views.py
@@ -24,7 +24,7 @@ class PlaylistViewSet(
     queryset = (
         models.Playlist.objects.all()
         .select_related("user__actor")
-        .annotate(tracks_count=Count("playlist_tracks"))
+        .annotate(tracks_count=Count("playlist_tracks", distinct=True))
         .with_covers()
         .with_duration()
     )
diff --git a/api/tests/playlists/test_views.py b/api/tests/playlists/test_views.py
index 1c2b0f19e..2be64b2bb 100644
--- a/api/tests/playlists/test_views.py
+++ b/api/tests/playlists/test_views.py
@@ -25,6 +25,18 @@ def test_serializer_includes_tracks_count(factories, logged_in_api_client):
     assert response.data["tracks_count"] == 1
 
 
+def test_serializer_includes_tracks_count_986(factories, logged_in_api_client):
+    playlist = factories["playlists.Playlist"]()
+    plt = factories["playlists.PlaylistTrack"](playlist=playlist)
+    factories["music.Upload"].create_batch(
+        3, track=plt.track, library__privacy_level="everyone", import_status="finished"
+    )
+    url = reverse("api:v1:playlists-detail", kwargs={"pk": playlist.pk})
+    response = logged_in_api_client.get(url)
+
+    assert response.data["tracks_count"] == 1
+
+
 def test_serializer_includes_is_playable(factories, logged_in_api_client):
     playlist = factories["playlists.Playlist"]()
     factories["playlists.PlaylistTrack"](playlist=playlist)
diff --git a/changes/changelog.d/986.bugfix b/changes/changelog.d/986.bugfix
new file mode 100644
index 000000000..b18d8ec8d
--- /dev/null
+++ b/changes/changelog.d/986.bugfix
@@ -0,0 +1 @@
+Fixed invalid displayed number of tracks in playlist (#986)
-- 
GitLab