funkwhale/api/tests/subsonic/test_serializers.py

217 wiersze
6.7 KiB
Python
Czysty Zwykły widok Historia

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,
'coverArt': 'al-{}'.format(album.id),
'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, bitrate=42000, duration=43, size=44)
expected = {
'id': album.pk,
'artistId': artist.pk,
'name': album.title,
'artist': artist.name,
'songCount': 1,
'created': album.creation_date,
'year': album.release_date.year,
'coverArt': 'al-{}'.format(album.id),
'song': [
{
'id': track.pk,
'isDir': 'false',
'title': track.title,
'coverArt': 'al-{}'.format(album.id),
'album': album.title,
'artist': artist.name,
'track': track.position,
'year': track.album.release_date.year,
'contentType': tf.mimetype,
'suffix': tf.extension or '',
'bitrate': 42,
'duration': 43,
'size': 44,
'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
def test_directory_serializer_artist(factories):
track = factories['music.Track']()
tf = factories['music.TrackFile'](
track=track, bitrate=42000, duration=43, size=44)
album = track.album
artist = track.artist
expected = {
'id': artist.pk,
'parent': 1,
'name': artist.name,
'child': [{
'id': track.pk,
'isDir': 'false',
'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 '',
'bitrate': 42,
'duration': 43,
'size': 44,
'created': track.creation_date,
'albumId': album.pk,
'artistId': artist.pk,
'parent': artist.pk,
'type': 'music',
}]
}
data = serializers.get_music_directory_data(artist)
assert data == expected