Permissions and db state fixes with new index field
This commit is contained in:
parent
257e67b5a6
commit
e87e2654e8
6 changed files with 148 additions and 20 deletions
|
|
@ -72,3 +72,18 @@ def test_cannot_insert_at_negative_index(factories):
|
|||
new = factories['playlists.PlaylistTrack'](playlist=plt.playlist)
|
||||
with pytest.raises(forms.ValidationError):
|
||||
plt.playlist.insert(new, -1)
|
||||
|
||||
|
||||
def test_remove_update_indexes(factories):
|
||||
playlist = factories['playlists.Playlist']()
|
||||
first = factories['playlists.PlaylistTrack'](playlist=playlist, index=0)
|
||||
second = factories['playlists.PlaylistTrack'](playlist=playlist, index=1)
|
||||
third = factories['playlists.PlaylistTrack'](playlist=playlist, index=2)
|
||||
|
||||
second.delete(update_indexes=True)
|
||||
|
||||
first.refresh_from_db()
|
||||
third.refresh_from_db()
|
||||
|
||||
assert first.index == 0
|
||||
assert third.index == 1
|
||||
|
|
|
|||
|
|
@ -1,16 +1,74 @@
|
|||
from funkwhale_api.playlists import models
|
||||
from funkwhale_api.playlists import serializers
|
||||
|
||||
|
||||
def test_cannot_max_500_tracks_per_playlist(mocker, factories, settings):
|
||||
def test_cannot_max_500_tracks_per_playlist(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={
|
||||
serializer = serializers.PlaylistTrackWriteSerializer(data={
|
||||
'playlist': playlist.pk,
|
||||
'track': track.pk,
|
||||
})
|
||||
|
||||
assert serializer.is_valid() is False
|
||||
assert 'playlist' in serializer.errors
|
||||
|
||||
|
||||
def test_create_insert_is_called_when_index_is_None(factories, mocker):
|
||||
insert = mocker.spy(models.Playlist, 'insert')
|
||||
playlist = factories['playlists.Playlist']()
|
||||
track = factories['music.Track']()
|
||||
serializer = serializers.PlaylistTrackWriteSerializer(data={
|
||||
'playlist': playlist.pk,
|
||||
'track': track.pk,
|
||||
'index': None,
|
||||
})
|
||||
assert serializer.is_valid() is True
|
||||
|
||||
plt = serializer.save()
|
||||
insert.assert_called_once_with(playlist, plt, None)
|
||||
assert plt.index == 0
|
||||
|
||||
|
||||
def test_create_insert_is_called_when_index_is_provided(factories, mocker):
|
||||
playlist = factories['playlists.Playlist']()
|
||||
first = factories['playlists.PlaylistTrack'](playlist=playlist, index=0)
|
||||
insert = mocker.spy(models.Playlist, 'insert')
|
||||
factories['playlists.Playlist']()
|
||||
track = factories['music.Track']()
|
||||
serializer = serializers.PlaylistTrackWriteSerializer(data={
|
||||
'playlist': playlist.pk,
|
||||
'track': track.pk,
|
||||
'index': 0,
|
||||
})
|
||||
assert serializer.is_valid() is True
|
||||
|
||||
plt = serializer.save()
|
||||
first.refresh_from_db()
|
||||
insert.assert_called_once_with(playlist, plt, 0)
|
||||
assert plt.index == 0
|
||||
assert first.index == 1
|
||||
|
||||
|
||||
def test_update_insert_is_called_when_index_is_provided(factories, mocker):
|
||||
playlist = factories['playlists.Playlist']()
|
||||
first = factories['playlists.PlaylistTrack'](playlist=playlist, index=0)
|
||||
second = factories['playlists.PlaylistTrack'](playlist=playlist, index=1)
|
||||
insert = mocker.spy(models.Playlist, 'insert')
|
||||
factories['playlists.Playlist']()
|
||||
track = factories['music.Track']()
|
||||
serializer = serializers.PlaylistTrackWriteSerializer(second, data={
|
||||
'playlist': playlist.pk,
|
||||
'track': second.track.pk,
|
||||
'index': 0,
|
||||
})
|
||||
assert serializer.is_valid() is True
|
||||
|
||||
plt = serializer.save()
|
||||
first.refresh_from_db()
|
||||
insert.assert_called_once_with(playlist, plt, 0)
|
||||
assert plt.index == 0
|
||||
assert first.index == 1
|
||||
|
|
|
|||
|
|
@ -80,6 +80,21 @@ def test_only_can_add_track_on_own_playlist_via_api(
|
|||
assert playlist.playlist_tracks.count() == 0
|
||||
|
||||
|
||||
def test_deleting_plt_updates_indexes(
|
||||
mocker, factories, logged_in_api_client):
|
||||
remove = mocker.spy(models.Playlist, 'remove')
|
||||
track = factories['music.Track']()
|
||||
plt = factories['playlists.PlaylistTrack'](
|
||||
index=0,
|
||||
playlist__user=logged_in_api_client.user)
|
||||
url = reverse('api:v1:playlist-tracks-detail', kwargs={'pk': plt.pk})
|
||||
|
||||
response = logged_in_api_client.delete(url)
|
||||
|
||||
assert response.status_code == 204
|
||||
remove.assert_called_once_with(plt.playlist, 0)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('level', ['instance', 'me', 'followers'])
|
||||
def test_playlist_privacy_respected_in_list_anon(level, factories, api_client):
|
||||
factories['playlists.Playlist'](privacy_level=level)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue