diff --git a/api/funkwhale_api/history/serializers.py b/api/funkwhale_api/history/serializers.py index c894ec59ab093026f014b467dadf2f2f8db1af79..c61fda6620bc00a4cc0cc93c0e6bf0d2d8263cad 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 170b44d6b11fa62b650f6f4a932db26b68873b6a..397467a0cb6fe04d1584cd4cd289dae49a7d0ab6 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, + )