mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-05 05:19:24 +02:00
API refinements for activity stream
This commit is contained in:
parent
d509c090d3
commit
a6da10be41
12 changed files with 188 additions and 12 deletions
|
@ -1,4 +1,5 @@
|
|||
from funkwhale_api.users.serializers import UserActivitySerializer
|
||||
from funkwhale_api.music.serializers import TrackActivitySerializer
|
||||
from funkwhale_api.favorites import serializers
|
||||
from funkwhale_api.favorites import activities
|
||||
|
||||
|
@ -18,9 +19,10 @@ def test_activity_favorite_serializer(factories):
|
|||
field = serializers.serializers.DateTimeField()
|
||||
expected = {
|
||||
"type": "Like",
|
||||
"local_id": favorite.pk,
|
||||
"id": favorite.get_activity_url(),
|
||||
"actor": actor,
|
||||
"object": favorite.track.get_activity_url(),
|
||||
"object": TrackActivitySerializer(favorite.track).data,
|
||||
"published": field.to_representation(favorite.creation_date),
|
||||
}
|
||||
|
||||
|
@ -48,7 +50,8 @@ def test_broadcast_track_favorite_to_instance_activity(
|
|||
data = serializers.TrackFavoriteActivitySerializer(favorite).data
|
||||
consumer = activities.broadcast_track_favorite_to_instance_activity
|
||||
message = {
|
||||
"type": 'event',
|
||||
"type": 'event.send',
|
||||
"text": '',
|
||||
"data": data
|
||||
}
|
||||
consumer(data=data, obj=favorite)
|
||||
|
@ -64,7 +67,8 @@ def test_broadcast_track_favorite_to_instance_activity_private(
|
|||
data = serializers.TrackFavoriteActivitySerializer(favorite).data
|
||||
consumer = activities.broadcast_track_favorite_to_instance_activity
|
||||
message = {
|
||||
"type": 'event',
|
||||
"type": 'event.send',
|
||||
"text": '',
|
||||
"data": data
|
||||
}
|
||||
consumer(data=data, obj=favorite)
|
||||
|
|
75
api/tests/history/test_activity.py
Normal file
75
api/tests/history/test_activity.py
Normal file
|
@ -0,0 +1,75 @@
|
|||
from funkwhale_api.users.serializers import UserActivitySerializer
|
||||
from funkwhale_api.music.serializers import TrackActivitySerializer
|
||||
from funkwhale_api.history import serializers
|
||||
from funkwhale_api.history import activities
|
||||
|
||||
|
||||
def test_get_listening_activity_url(settings, factories):
|
||||
listening = factories['history.Listening']()
|
||||
user_url = listening.user.get_activity_url()
|
||||
expected = '{}/listenings/tracks/{}'.format(
|
||||
user_url, listening.pk)
|
||||
assert listening.get_activity_url() == expected
|
||||
|
||||
|
||||
def test_activity_listening_serializer(factories):
|
||||
listening = factories['history.Listening']()
|
||||
|
||||
actor = UserActivitySerializer(listening.user).data
|
||||
field = serializers.serializers.DateTimeField()
|
||||
expected = {
|
||||
"type": "Listen",
|
||||
"local_id": listening.pk,
|
||||
"id": listening.get_activity_url(),
|
||||
"actor": actor,
|
||||
"object": TrackActivitySerializer(listening.track).data,
|
||||
"published": field.to_representation(listening.end_date),
|
||||
}
|
||||
|
||||
data = serializers.ListeningActivitySerializer(listening).data
|
||||
|
||||
assert data == expected
|
||||
|
||||
|
||||
def test_track_listening_serializer_is_connected(activity_registry):
|
||||
conf = activity_registry['history.Listening']
|
||||
assert conf['serializer'] == serializers.ListeningActivitySerializer
|
||||
|
||||
|
||||
def test_track_listening_serializer_instance_activity_consumer(
|
||||
activity_registry):
|
||||
conf = activity_registry['history.Listening']
|
||||
consumer = activities.broadcast_listening_to_instance_activity
|
||||
assert consumer in conf['consumers']
|
||||
|
||||
|
||||
def test_broadcast_listening_to_instance_activity(
|
||||
factories, mocker):
|
||||
p = mocker.patch('funkwhale_api.common.channels.group_send')
|
||||
listening = factories['history.Listening']()
|
||||
data = serializers.ListeningActivitySerializer(listening).data
|
||||
consumer = activities.broadcast_listening_to_instance_activity
|
||||
message = {
|
||||
"type": 'event.send',
|
||||
"text": '',
|
||||
"data": data
|
||||
}
|
||||
consumer(data=data, obj=listening)
|
||||
p.assert_called_once_with('instance_activity', message)
|
||||
|
||||
|
||||
def test_broadcast_listening_to_instance_activity_private(
|
||||
factories, mocker):
|
||||
p = mocker.patch('funkwhale_api.common.channels.group_send')
|
||||
listening = factories['history.Listening'](
|
||||
user__privacy_level='me'
|
||||
)
|
||||
data = serializers.ListeningActivitySerializer(listening).data
|
||||
consumer = activities.broadcast_listening_to_instance_activity
|
||||
message = {
|
||||
"type": 'event.send',
|
||||
"text": '',
|
||||
"data": data
|
||||
}
|
||||
consumer(data=data, obj=listening)
|
||||
p.assert_not_called()
|
|
@ -28,7 +28,8 @@ def test_anonymous_user_can_create_listening_via_api(client, factories, settings
|
|||
assert listening.session_key == client.session.session_key
|
||||
|
||||
|
||||
def test_logged_in_user_can_create_listening_via_api(logged_in_client, factories):
|
||||
def test_logged_in_user_can_create_listening_via_api(
|
||||
logged_in_client, factories, activity_muted):
|
||||
track = factories['music.Track']()
|
||||
|
||||
url = reverse('api:v1:history:listenings-list')
|
||||
|
@ -40,3 +41,17 @@ def test_logged_in_user_can_create_listening_via_api(logged_in_client, factories
|
|||
|
||||
assert listening.track == track
|
||||
assert listening.user == logged_in_client.user
|
||||
|
||||
|
||||
def test_adding_listening_calls_activity_record(
|
||||
factories, logged_in_client, activity_muted):
|
||||
track = factories['music.Track']()
|
||||
|
||||
url = reverse('api:v1:history:listenings-list')
|
||||
response = logged_in_client.post(url, {
|
||||
'track': track.pk,
|
||||
})
|
||||
|
||||
listening = models.Listening.objects.latest('id')
|
||||
|
||||
activity_muted.assert_called_once_with(listening)
|
|
@ -13,6 +13,7 @@ def test_activity_user_serializer(factories):
|
|||
expected = {
|
||||
"type": "Person",
|
||||
"id": user.get_activity_url(),
|
||||
"local_id": user.username,
|
||||
"name": user.username,
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue