mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-06 06:19:58 +02:00
Added API endpoint to insert multiple tracks into playlist
This commit is contained in:
parent
1729c4f83e
commit
f8b15a3f48
5 changed files with 112 additions and 12 deletions
|
@ -1,6 +1,6 @@
|
|||
import pytest
|
||||
|
||||
from django import forms
|
||||
from rest_framework import exceptions
|
||||
|
||||
|
||||
def test_can_insert_plt(factories):
|
||||
|
@ -79,14 +79,14 @@ def test_can_insert_and_move_last_to_0(factories):
|
|||
def test_cannot_insert_at_wrong_index(factories):
|
||||
plt = factories['playlists.PlaylistTrack']()
|
||||
new = factories['playlists.PlaylistTrack'](playlist=plt.playlist)
|
||||
with pytest.raises(forms.ValidationError):
|
||||
with pytest.raises(exceptions.ValidationError):
|
||||
plt.playlist.insert(new, 2)
|
||||
|
||||
|
||||
def test_cannot_insert_at_negative_index(factories):
|
||||
plt = factories['playlists.PlaylistTrack']()
|
||||
new = factories['playlists.PlaylistTrack'](playlist=plt.playlist)
|
||||
with pytest.raises(forms.ValidationError):
|
||||
with pytest.raises(exceptions.ValidationError):
|
||||
plt.playlist.insert(new, -1)
|
||||
|
||||
|
||||
|
@ -103,3 +103,24 @@ def test_remove_update_indexes(factories):
|
|||
|
||||
assert first.index == 0
|
||||
assert third.index == 1
|
||||
|
||||
|
||||
def test_can_insert_many(factories):
|
||||
playlist = factories['playlists.Playlist']()
|
||||
existing = factories['playlists.PlaylistTrack'](playlist=playlist, index=0)
|
||||
tracks = factories['music.Track'].create_batch(size=3)
|
||||
plts = playlist.insert_many(tracks)
|
||||
for i, plt in enumerate(plts):
|
||||
assert plt.index == i + 1
|
||||
assert plt.track == tracks[i]
|
||||
assert plt.playlist == playlist
|
||||
|
||||
|
||||
def test_insert_many_honor_max_tracks(factories, settings):
|
||||
settings.PLAYLISTS_MAX_TRACKS = 4
|
||||
playlist = factories['playlists.Playlist']()
|
||||
plts = factories['playlists.PlaylistTrack'].create_batch(
|
||||
size=2, playlist=playlist)
|
||||
track = factories['music.Track']()
|
||||
with pytest.raises(exceptions.ValidationError):
|
||||
playlist.insert_many([track, track, track])
|
||||
|
|
|
@ -153,3 +153,20 @@ def test_can_list_tracks_from_playlist(
|
|||
|
||||
assert response.data['count'] == 1
|
||||
assert response.data['results'][0] == serialized_plt
|
||||
|
||||
|
||||
def test_can_add_multiple_tracks_at_once_via_api(
|
||||
factories, mocker, logged_in_api_client):
|
||||
playlist = factories['playlists.Playlist'](user=logged_in_api_client.user)
|
||||
tracks = factories['music.Track'].create_batch(size=5)
|
||||
track_ids = [t.id for t in tracks]
|
||||
mocker.spy(playlist, 'insert_many')
|
||||
url = reverse('api:v1:playlists-add', kwargs={'pk': playlist.pk})
|
||||
response = logged_in_api_client.post(url, {'tracks': track_ids})
|
||||
|
||||
assert response.status_code == 201
|
||||
assert playlist.playlist_tracks.count() == len(track_ids)
|
||||
|
||||
for plt in playlist.playlist_tracks.order_by('index'):
|
||||
assert response.data['results'][plt.index]['id'] == plt.id
|
||||
assert plt.track == tracks[plt.index]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue