Dispatch hook event when creating listening

This commit is contained in:
Eliot Berriot 2019-09-23 17:53:58 +02:00
parent 3da3627397
commit df88f9c9e3
No known key found for this signature in database
GPG Key ID: 6B501DFD73514E14
2 changed files with 36 additions and 1 deletions

View File

@ -1,6 +1,8 @@
from rest_framework import serializers
from funkwhale_api import plugins
from funkwhale_api.activity import serializers as activity_serializers
from funkwhale_api.common import utils
from funkwhale_api.federation import serializers as federation_serializers
from funkwhale_api.music.serializers import TrackActivitySerializer, TrackSerializer
from funkwhale_api.users.serializers import UserActivitySerializer, UserBasicSerializer
@ -53,4 +55,12 @@ class ListeningWriteSerializer(serializers.ModelSerializer):
def create(self, validated_data):
validated_data["user"] = self.context["user"]
return super().create(validated_data)
instance = super().create(validated_data)
plugins_conf = getattr(self.context["request"], "plugins_conf", None)
utils.on_commit(
plugins.hooks.dispatch,
"history.listening.created",
listening=instance,
plugins_conf=plugins_conf,
)
return instance

View File

@ -1,3 +1,4 @@
from funkwhale_api import plugins
from funkwhale_api.federation import serializers as federation_serializers
from funkwhale_api.history import serializers
from funkwhale_api.music import serializers as music_serializers
@ -18,3 +19,27 @@ def test_listening_serializer(factories, to_api_date):
serializer = serializers.ListeningSerializer(listening)
assert serializer.data == expected
def test_listening_create(factories, to_api_date, mocker, now):
user = factories["users.User"]()
track = factories["music.Track"]()
payload = {"track": track.pk}
on_commit = mocker.patch("funkwhale_api.common.utils.on_commit")
request = mocker.Mock(plugins_conf=mocker.Mock())
serializer = serializers.ListeningWriteSerializer(
data=payload, context={"request": request, "user": user}
)
assert serializer.is_valid(raise_exception=True) is True
listening = serializer.save()
assert serializer.instance.user == user
assert serializer.instance.track == track
on_commit.assert_called_once_with(
plugins.hooks.dispatch,
"history.listening.created",
listening=listening,
plugins_conf=request.plugins_conf,
)