From df88f9c9e391cd68d488e18bc20a5ccd29bdd28e Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Mon, 23 Sep 2019 17:53:58 +0200 Subject: [PATCH] Dispatch hook event when creating listening --- api/funkwhale_api/history/serializers.py | 12 +++++++++++- api/tests/history/test_serializers.py | 25 ++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/api/funkwhale_api/history/serializers.py b/api/funkwhale_api/history/serializers.py index c894ec59a..c61fda662 100644 --- a/api/funkwhale_api/history/serializers.py +++ b/api/funkwhale_api/history/serializers.py @@ -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 diff --git a/api/tests/history/test_serializers.py b/api/tests/history/test_serializers.py index 170b44d6b..397467a0c 100644 --- a/api/tests/history/test_serializers.py +++ b/api/tests/history/test_serializers.py @@ -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, + )