Skip to content
Snippets Groups Projects
test_serializers.py 2.53 KiB
Newer Older
  • Learn to ignore specific revisions
  • from funkwhale_api.playlists import models
    
    from funkwhale_api.playlists import serializers
    
    
    
    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.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