From 2a3f43ecb14ac90b0b58a6bcde70de94664b41e6 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Fri, 16 Mar 2018 23:31:08 +0100
Subject: [PATCH] Ensure privacy_level is settable/inherited properly

---
 api/funkwhale_api/playlists/views.py |  7 ++++++-
 api/tests/playlists/test_views.py    | 31 +++++++++++++++++++++-------
 2 files changed, 30 insertions(+), 8 deletions(-)

diff --git a/api/funkwhale_api/playlists/views.py b/api/funkwhale_api/playlists/views.py
index 1a88d231e4..f78b5b8016 100644
--- a/api/funkwhale_api/playlists/views.py
+++ b/api/funkwhale_api/playlists/views.py
@@ -32,7 +32,12 @@ class PlaylistViewSet(
         return self.queryset.filter(user=self.request.user)
 
     def perform_create(self, serializer):
-        return serializer.save(user=self.request.user)
+        return serializer.save(
+            user=self.request.user,
+            privacy_level=serializer.validated_data.get(
+                'privacy_level', self.request.user.privacy_level)
+
+        )
 
 
 class PlaylistTrackViewSet(
diff --git a/api/tests/playlists/test_views.py b/api/tests/playlists/test_views.py
index 943de03e11..f3084e6a06 100644
--- a/api/tests/playlists/test_views.py
+++ b/api/tests/playlists/test_views.py
@@ -7,27 +7,44 @@ from funkwhale_api.playlists import models
 from funkwhale_api.playlists.serializers import PlaylistSerializer
 
 
-def test_can_create_playlist_via_api(logged_in_client):
+def test_can_create_playlist_via_api(logged_in_api_client):
     url = reverse('api:v1:playlists-list')
     data = {
         'name': 'test',
+        'privacy_level': 'everyone'
     }
 
-    response = logged_in_client.post(url, data)
+    response = logged_in_api_client.post(url, data)
 
-    playlist = logged_in_client.user.playlists.latest('id')
+    playlist = logged_in_api_client.user.playlists.latest('id')
     assert playlist.name == 'test'
+    assert playlist.privacy_level == 'everyone'
 
 
-def test_can_add_playlist_track_via_api(factories, logged_in_client):
+def test_playlist_inherits_user_privacy(logged_in_api_client):
+    url = reverse('api:v1:playlists-list')
+    user = logged_in_api_client.user
+    user.privacy_level = 'me'
+    user.save()
+
+    data = {
+        'name': 'test',
+    }
+
+    response = logged_in_api_client.post(url, data)
+    playlist = user.playlists.latest('id')
+    assert playlist.privacy_level == user.privacy_level
+
+
+def test_can_add_playlist_track_via_api(factories, logged_in_api_client):
     tracks = factories['music.Track'].create_batch(5)
-    playlist = factories['playlists.Playlist'](user=logged_in_client.user)
+    playlist = factories['playlists.Playlist'](user=logged_in_api_client.user)
     url = reverse('api:v1:playlist-tracks-list')
     data = {
         'playlist': playlist.pk,
         'track': tracks[0].pk
     }
 
-    response = logged_in_client.post(url, data)
-    plts = logged_in_client.user.playlists.latest('id').playlist_tracks.all()
+    response = logged_in_api_client.post(url, data)
+    plts = logged_in_api_client.user.playlists.latest('id').playlist_tracks.all()
     assert plts.first().track == tracks[0]
-- 
GitLab