Skip to content

Commit

Permalink
apps/moderatorfeedback: add ai_report serialiser
Browse files Browse the repository at this point in the history
  • Loading branch information
m4ra committed Aug 2, 2023
1 parent dd1a653 commit bc2c081
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 0 deletions.
2 changes: 2 additions & 0 deletions adhocracy-plus/config/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from apps.interactiveevents.api import LikesViewSet
from apps.interactiveevents.api import LiveQuestionViewSet
from apps.interactiveevents.routers import LikesDefaultRouter
from apps.moderatorfeedback.api import AiCommentFeedbackViewSet
from apps.moderatorfeedback.api import CommentWithFeedbackViewSet
from apps.moderatorfeedback.api import ModeratorCommentFeedbackViewSet
from apps.moderatorremark.api import ModeratorRemarkViewSet
Expand Down Expand Up @@ -86,6 +87,7 @@
comment_router.register(
r"moderatorfeedback", ModeratorCommentFeedbackViewSet, basename="moderatorfeedback"
)
comment_router.register(r"aicomments", AiCommentFeedbackViewSet, basename="aicomments")

urlpatterns = [
# General platform urls
Expand Down
13 changes: 13 additions & 0 deletions apps/ai_reports/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from rest_framework import serializers

from apps.ai_reports.models import AiReport


class AiReportSerializer(serializers.ModelSerializer):
class Meta:
model = AiReport
fields = (
"explanation",
"category",
"comment",
)
17 changes: 17 additions & 0 deletions apps/moderatorfeedback/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
from adhocracy4.api.mixins import CommentMixin
from adhocracy4.api.permissions import ViewSetRulesPermission
from adhocracy4.comments_async import api as a4_api
from apps.ai_reports.models import AiReport
from apps.ai_reports.serializers import AiReportSerializer
from apps.moderatorfeedback.models import ModeratorCommentFeedback
from apps.moderatorfeedback.serializers import ModeratorCommentFeedbackSerializer
from apps.moderatorfeedback.serializers import ThreadListSerializer
Expand All @@ -28,6 +30,21 @@ def get_queryset(self):
return ModeratorCommentFeedback.objects.filter(comment=self.comment)


class AiCommentFeedbackViewSet(
CommentMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet,
):
serializer_class = AiReportSerializer
permission_classes = (ViewSetRulesPermission,)

def get_permission_object(self):
return self.comment

def get_queryset(self):
return AiReport.objects.filter(comment=self.comment)


class CommentWithFeedbackViewSet(a4_api.CommentViewSet):
def get_serializer_class(self):
if self.action == "list":
Expand Down
4 changes: 4 additions & 0 deletions apps/moderatorfeedback/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from adhocracy4.comments.models import Comment
from adhocracy4.comments_async import serializers as a4_serializers
from apps.ai_reports.serializers import AiReportSerializer
from apps.contrib.dates import get_date_display
from apps.moderatorfeedback.models import ModeratorCommentFeedback

Expand Down Expand Up @@ -34,11 +35,14 @@ def get_last_edit(self, feedback):

class CommentWithFeedbackSerializer(a4_serializers.CommentSerializer):
moderator_feedback = ModeratorCommentFeedbackSerializer(read_only=True)
ai_feedback = AiReportSerializer(read_only=True)
# ai_feedback = serializers.StringRelatedField(read_only=True)

class Meta:
model = Comment
read_only_fields = a4_serializers.CommentSerializer.Meta.read_only_fields + (
"moderator_comment_feedback",
"ai_feedback",
)
exclude = ("creator",)

Expand Down
3 changes: 3 additions & 0 deletions changelog/7571.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
### Added

- Ai report serializer for comments viewset (#7571)
2 changes: 2 additions & 0 deletions tests/moderatorfeedback/conftest.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from pytest_factoryboy import register

from tests.ai_reports.factories import AiReportFactory
from tests.ideas.factories import IdeaFactory

from .factories import ModeratorCommentFeedbackFactory

register(AiReportFactory)
register(IdeaFactory)
register(ModeratorCommentFeedbackFactory)
35 changes: 35 additions & 0 deletions tests/moderatorfeedback/test_moderator_comment_feedback_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,41 @@
from apps.moderatorfeedback.models import ModeratorCommentFeedback


@pytest.mark.django_db
def test_moderator_and_ai_feedback_added_in_comment(
idea,
comment_factory,
apiclient,
moderator_comment_feedback_factory,
ai_report_factory,
):
comment = comment_factory(content_object=idea)
feedback = moderator_comment_feedback_factory(
comment=comment,
)
assert feedback.project == comment.project

ai_feedback = ai_report_factory(comment=comment)
url = reverse(
"comments-detail",
kwargs={
"pk": comment.pk,
"content_type": comment.content_type.pk,
"object_pk": comment.object_pk,
},
)
response = apiclient.get(url)
print("URL", url)
assert (
feedback.feedback_text in response.data["moderator_feedback"]["feedback_text"]
)
assert comment.ai_report.explanation == ai_feedback.explanation

# TODO: make the following assertion to pass
# assert ai_feedback.explanation in response.data["ai_feedback"]["explanation"]
assert response.status_code == 200


@pytest.mark.django_db
def test_anonymous_cannot_add_feedback(apiclient, idea, comment_factory):
comment = comment_factory(pk=1, content_object=idea)
Expand Down

0 comments on commit bc2c081

Please sign in to comment.