Capped number of tracks in playlists

This commit is contained in:
Eliot Berriot 2018-03-19 12:36:15 +01:00
parent d8486beeb0
commit 944135e752
No known key found for this signature in database
GPG Key ID: DD6965E2476E5C27
3 changed files with 28 additions and 0 deletions

View File

@ -383,3 +383,6 @@ CACHEOPS = {
# Custom Admin URL, use {% url 'admin:index' %}
ADMIN_URL = env('DJANGO_ADMIN_URL', default='^api/admin/')
CSRF_USE_SESSIONS = True
# Playlist settings
PLAYLISTS_MAX_TRACKS = env.int('PLAYLISTS_MAX_TRACKS', default=500)

View File

@ -1,3 +1,4 @@
from django.conf import settings
from rest_framework import serializers
from taggit.models import Tag
@ -20,6 +21,14 @@ class PlaylistTrackCreateSerializer(serializers.ModelSerializer):
model = models.PlaylistTrack
fields = ('id', 'track', 'playlist', 'position')
def validate_playlist(self, value):
existing = value.playlist_tracks.count()
if existing >= settings.PLAYLISTS_MAX_TRACKS:
raise serializers.ValidationError(
'Playlist has reached the maximum of {} tracks'.format(
settings.PLAYLISTS_MAX_TRACKS))
return value
class PlaylistSerializer(serializers.ModelSerializer):

View File

@ -0,0 +1,16 @@
from funkwhale_api.playlists import serializers
def test_cannot_max_500_tracks_per_playlist(mocker, factories, settings):
settings.PLAYLISTS_MAX_TRACKS = 2
playlist = factories['playlists.Playlist']()
plts = factories['playlists.PlaylistTrack'].create_batch(
size=2, playlist=playlist)
track = factories['music.Track']()
serializer = serializers.PlaylistTrackCreateSerializer(data={
'playlist': playlist.pk,
'track': track.pk,
})
assert serializer.is_valid() is False
assert 'playlist' in serializer.errors