Skip to content
Snippets Groups Projects
test_serializers.py 5.41 KiB
Newer Older
  • Learn to ignore specific revisions
  • from funkwhale_api.music import models as music_models
    
    from funkwhale_api.subsonic import serializers
    
    
    def test_get_artists_serializer(factories):
        artist1 = factories['music.Artist'](name='eliot')
        artist2 = factories['music.Artist'](name='Ellena')
        artist3 = factories['music.Artist'](name='Rilay')
    
        factories['music.Album'].create_batch(size=3, artist=artist1)
        factories['music.Album'].create_batch(size=2, artist=artist2)
    
        expected = {
            'ignoredArticles': '',
            'index': [
                {
                    'name': 'E',
                    'artist': [
                        {
                            'id': artist1.pk,
                            'name': artist1.name,
                            'albumCount': 3,
                        },
                        {
                            'id': artist2.pk,
                            'name': artist2.name,
                            'albumCount': 2,
                        },
                    ]
                },
                {
                    'name': 'R',
                    'artist': [
                        {
                            'id': artist3.pk,
                            'name': artist3.name,
                            'albumCount': 0,
                        },
                    ]
                },
            ]
        }
    
        queryset = artist1.__class__.objects.filter(pk__in=[
            artist1.pk, artist2.pk, artist3.pk
        ])
    
        assert serializers.GetArtistsSerializer(queryset).data == expected
    
    
    def test_get_artist_serializer(factories):
        artist = factories['music.Artist']()
        album = factories['music.Album'](artist=artist)
        tracks = factories['music.Track'].create_batch(size=3, album=album)
    
        expected = {
            'id': artist.pk,
            'name': artist.name,
            'albumCount': 1,
            'album': [
                {
                    'id': album.pk,
                    'artistId': artist.pk,
                    'name': album.title,
                    'artist': artist.name,
                    'songCount': len(tracks),
                    'created': album.creation_date,
                    'year': album.release_date.year,
                }
            ]
        }
    
        assert serializers.GetArtistSerializer(artist).data == expected
    
    
    def test_get_album_serializer(factories):
        artist = factories['music.Artist']()
        album = factories['music.Album'](artist=artist)
        track = factories['music.Track'](album=album)
        tf = factories['music.TrackFile'](track=track)
    
        expected = {
            'id': album.pk,
            'artistId': artist.pk,
            'name': album.title,
            'artist': artist.name,
            'songCount': 1,
            'created': album.creation_date,
            'year': album.release_date.year,
            'song': [
                {
                    'id': track.pk,
    
                    'title': track.title,
                    'album': album.title,
                    'artist': artist.name,
                    'track': track.position,
                    'year': track.album.release_date.year,
                    'contentType': tf.mimetype,
    
                    'suffix': tf.extension or '',
                    'duration': tf.duration or 0,
    
                    'created': track.creation_date,
                    'albumId': album.pk,
                    'artistId': artist.pk,
                    'type': 'music',
                }
            ]
        }
    
        assert serializers.GetAlbumSerializer(album).data == expected
    
    
    
    def test_starred_tracks2_serializer(factories):
        artist = factories['music.Artist']()
        album = factories['music.Album'](artist=artist)
        track = factories['music.Track'](album=album)
        tf = factories['music.TrackFile'](track=track)
        favorite = factories['favorites.TrackFavorite'](track=track)
        expected = [serializers.get_track_data(album, track, tf)]
        expected[0]['starred'] = favorite.creation_date
        data = serializers.get_starred_tracks_data([favorite])
        assert data == expected
    
    
    def test_get_album_list2_serializer(factories):
        album1 = factories['music.Album']()
        album2 = factories['music.Album']()
    
        qs = music_models.Album.objects.with_tracks_count().order_by('pk')
        expected = [
            serializers.get_album2_data(album1),
            serializers.get_album2_data(album2),
        ]
        data = serializers.get_album_list2_data(qs)
        assert data == expected
    
    
    
    def test_playlist_serializer(factories):
        plt = factories['playlists.PlaylistTrack']()
        playlist = plt.playlist
        qs = music_models.Album.objects.with_tracks_count().order_by('pk')
        expected = {
            'id': playlist.pk,
            'name': playlist.name,
            'owner': playlist.user.username,
            'public': 'false',
            'songCount': 1,
            'duration': 0,
            'created': playlist.creation_date,
        }
        qs = playlist.__class__.objects.with_tracks_count()
        data = serializers.get_playlist_data(qs.first())
        assert data == expected
    
    
    def test_playlist_detail_serializer(factories):
        plt = factories['playlists.PlaylistTrack']()
        tf = factories['music.TrackFile'](track=plt.track)
        playlist = plt.playlist
        qs = music_models.Album.objects.with_tracks_count().order_by('pk')
        expected = {
            'id': playlist.pk,
            'name': playlist.name,
            'owner': playlist.user.username,
            'public': 'false',
            'songCount': 1,
            'duration': 0,
            'created': playlist.creation_date,
            'entry': [
                serializers.get_track_data(plt.track.album, plt.track, tf)
            ]
        }
        qs = playlist.__class__.objects.with_tracks_count()
        data = serializers.get_playlist_detail_data(qs.first())
        assert data == expected