95 lines
3.0 KiB
Python
95 lines
3.0 KiB
Python
from funkwhale_api.federation import actors
|
|
from funkwhale_api.federation import utils as federation_utils
|
|
from funkwhale_api.federation.serializers import AP_CONTEXT
|
|
from funkwhale_api.music import serializers
|
|
|
|
|
|
def test_activity_pub_audio_collection_serializer_to_import(factories):
|
|
sender = factories['federation.Actor']()
|
|
|
|
collection = {
|
|
'id': 'https://batch.import',
|
|
'type': 'Collection',
|
|
'totalItems': 2,
|
|
'items': factories['federation.Audio'].create_batch(size=2)
|
|
}
|
|
|
|
serializer = serializers.AudioCollectionImportSerializer(
|
|
data=collection, context={'sender': sender})
|
|
|
|
assert serializer.is_valid(raise_exception=True)
|
|
|
|
batch = serializer.save()
|
|
jobs = list(batch.jobs.all())
|
|
|
|
assert batch.source == 'federation'
|
|
assert batch.federation_source == collection['id']
|
|
assert batch.federation_actor == sender
|
|
assert len(jobs) == 2
|
|
|
|
for i, a in enumerate(collection['items']):
|
|
job = jobs[i]
|
|
assert job.federation_source == a['id']
|
|
assert job.source == a['url']['href']
|
|
a['metadata']['mediaType'] = a['url']['mediaType']
|
|
assert job.metadata == a['metadata']
|
|
|
|
|
|
def test_activity_pub_audio_serializer_to_ap(factories):
|
|
tf = factories['music.TrackFile'](mimetype='audio/mp3')
|
|
library = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
|
expected = {
|
|
'@context': AP_CONTEXT,
|
|
'type': 'Audio',
|
|
'id': tf.get_federation_url(),
|
|
'name': tf.track.full_name,
|
|
'metadata': {
|
|
'artist': tf.track.artist.musicbrainz_url,
|
|
'release': tf.track.album.musicbrainz_url,
|
|
'track': tf.track.musicbrainz_url,
|
|
},
|
|
'url': {
|
|
'href': federation_utils.full_url(tf.path),
|
|
'type': 'Link',
|
|
'mediaType': 'audio/mp3'
|
|
},
|
|
'attributedTo': [
|
|
library.url
|
|
]
|
|
}
|
|
|
|
serializer = serializers.AudioSerializer(tf, context={'actor': library})
|
|
|
|
assert serializer.data == expected
|
|
|
|
|
|
def test_activity_pub_audio_collection_serializer_to_ap(factories):
|
|
tf1 = factories['music.TrackFile'](mimetype='audio/mp3')
|
|
tf2 = factories['music.TrackFile'](mimetype='audio/ogg')
|
|
library = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
|
expected = {
|
|
'@context': AP_CONTEXT,
|
|
'id': 'https://test.id',
|
|
'actor': library.url,
|
|
'totalItems': 2,
|
|
'type': 'Collection',
|
|
'items': [
|
|
serializers.AudioSerializer(
|
|
tf1, context={'actor': library, 'include_ap_context': False}
|
|
).data,
|
|
serializers.AudioSerializer(
|
|
tf2, context={'actor': library, 'include_ap_context': False}
|
|
).data,
|
|
]
|
|
}
|
|
|
|
collection = {
|
|
'id': expected['id'],
|
|
'actor': library,
|
|
'items': [tf1, tf2],
|
|
}
|
|
serializer = serializers.AudioCollectionImportSerializer(
|
|
collection, context={'actor': library, 'id': 'https://test.id'})
|
|
|
|
assert serializer.data == expected
|