Use our new event system for track favorites

This commit is contained in:
Eliot Berriot 2018-03-01 20:38:48 +01:00
commit e490284511
No known key found for this signature in database
GPG key ID: DD6965E2476E5C27
5 changed files with 85 additions and 1 deletions

View file

@ -1,5 +1,6 @@
from funkwhale_api.users.serializers import UserActivitySerializer
from funkwhale_api.favorites import serializers
from funkwhale_api.favorites import activities
def test_get_favorite_activity_url(settings, factories):
@ -26,3 +27,45 @@ def test_activity_favorite_serializer(factories):
data = serializers.TrackFavoriteActivitySerializer(favorite).data
assert data == expected
def test_track_favorite_serializer_is_connected(activity_registry):
conf = activity_registry['favorites.TrackFavorite']
assert conf['serializer'] == serializers.TrackFavoriteActivitySerializer
def test_track_favorite_serializer_instance_activity_consumer(
activity_registry):
conf = activity_registry['favorites.TrackFavorite']
consumer = activities.broadcast_track_favorite_to_instance_timeline
assert consumer in conf['consumers']
def test_broadcast_track_favorite_to_instance_timeline(
factories, mocker):
p = mocker.patch('funkwhale_api.common.channels.group_send')
favorite = factories['favorites.TrackFavorite']()
data = serializers.TrackFavoriteActivitySerializer(favorite).data
consumer = activities.broadcast_track_favorite_to_instance_timeline
message = {
"type": 'event',
"data": data
}
consumer(data=data, obj=favorite)
p.assert_called_once_with('instance_timeline', message)
def test_broadcast_track_favorite_to_instance_timeline_private(
factories, mocker):
p = mocker.patch('funkwhale_api.common.channels.group_send')
favorite = factories['favorites.TrackFavorite'](
user__privacy_level='me'
)
data = serializers.TrackFavoriteActivitySerializer(favorite).data
consumer = activities.broadcast_track_favorite_to_instance_timeline
message = {
"type": 'event',
"data": data
}
consumer(data=data, obj=favorite)
p.assert_not_called()

View file

@ -33,7 +33,8 @@ def test_user_can_get_his_favorites(factories, logged_in_client, client):
assert expected == parsed_json['results']
def test_user_can_add_favorite_via_api(factories, logged_in_client, client):
def test_user_can_add_favorite_via_api(
factories, logged_in_client, activity_muted):
track = factories['music.Track']()
url = reverse('api:v1:favorites:tracks-list')
response = logged_in_client.post(url, {'track': track.pk})
@ -51,6 +52,27 @@ def test_user_can_add_favorite_via_api(factories, logged_in_client, client):
assert favorite.user == logged_in_client.user
def test_adding_favorites_calls_activity_record(
factories, logged_in_client, activity_muted):
track = factories['music.Track']()
url = reverse('api:v1:favorites:tracks-list')
response = logged_in_client.post(url, {'track': track.pk})
favorite = TrackFavorite.objects.latest('id')
expected = {
'track': track.pk,
'id': favorite.id,
'creation_date': favorite.creation_date.isoformat().replace('+00:00', 'Z'),
}
parsed_json = json.loads(response.content.decode('utf-8'))
assert expected == parsed_json
assert favorite.track == track
assert favorite.user == logged_in_client.user
activity_muted.assert_called_once_with(favorite)
def test_user_can_remove_favorite_via_api(logged_in_client, factories, client):
favorite = factories['favorites.TrackFavorite'](user=logged_in_client.user)
url = reverse('api:v1:favorites:tracks-detail', kwargs={'pk': favorite.pk})