From 45d197a5e1708b59d66cc6fde34a3304ae5694f8 Mon Sep 17 00:00:00 2001 From: Mara Karagianni Date: Wed, 2 Aug 2023 14:26:55 +0300 Subject: [PATCH] apps/moderatorfeedback: add ai_report serialiser --- apps/ai_reports/models.py | 3 ++ apps/ai_reports/serializers.py | 13 ++++++++ apps/moderatorfeedback/serializers.py | 5 ++- changelog/7571.md | 3 ++ tests/moderatorfeedback/conftest.py | 2 ++ .../test_moderator_comment_feedback_api.py | 33 +++++++++++++++++++ 6 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 apps/ai_reports/serializers.py create mode 100644 changelog/7571.md diff --git a/apps/ai_reports/models.py b/apps/ai_reports/models.py index 7592e1dd1..44d02b63a 100644 --- a/apps/ai_reports/models.py +++ b/apps/ai_reports/models.py @@ -14,3 +14,6 @@ class AiReport(TimeStampedModel): on_delete=models.CASCADE, related_name="ai_report", ) + + def __str__(self): + return "%s" % (self.explanation) diff --git a/apps/ai_reports/serializers.py b/apps/ai_reports/serializers.py new file mode 100644 index 000000000..6fe6f1930 --- /dev/null +++ b/apps/ai_reports/serializers.py @@ -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", + ) diff --git a/apps/moderatorfeedback/serializers.py b/apps/moderatorfeedback/serializers.py index 565c7bcb8..78f747283 100644 --- a/apps/moderatorfeedback/serializers.py +++ b/apps/moderatorfeedback/serializers.py @@ -34,12 +34,11 @@ def get_last_edit(self, feedback): class CommentWithFeedbackSerializer(a4_serializers.CommentSerializer): moderator_feedback = ModeratorCommentFeedbackSerializer(read_only=True) + ai_report = serializers.StringRelatedField(read_only=True) class Meta: model = Comment - read_only_fields = a4_serializers.CommentSerializer.Meta.read_only_fields + ( - "moderator_comment_feedback", - ) + read_only_fields = a4_serializers.CommentSerializer.Meta.read_only_fields exclude = ("creator",) diff --git a/changelog/7571.md b/changelog/7571.md new file mode 100644 index 000000000..3cd0f6d9e --- /dev/null +++ b/changelog/7571.md @@ -0,0 +1,3 @@ +### Added + +- Ai report serializer for comments viewset (#7571) diff --git a/tests/moderatorfeedback/conftest.py b/tests/moderatorfeedback/conftest.py index 25648287d..931870fd2 100644 --- a/tests/moderatorfeedback/conftest.py +++ b/tests/moderatorfeedback/conftest.py @@ -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) diff --git a/tests/moderatorfeedback/test_moderator_comment_feedback_api.py b/tests/moderatorfeedback/test_moderator_comment_feedback_api.py index 0f6b6a362..8a42844c5 100644 --- a/tests/moderatorfeedback/test_moderator_comment_feedback_api.py +++ b/tests/moderatorfeedback/test_moderator_comment_feedback_api.py @@ -4,6 +4,39 @@ from apps.moderatorfeedback.models import ModeratorCommentFeedback +@pytest.mark.django_db +def test_moderator_and_ai_report_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_report = 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) + assert ( + feedback.feedback_text in response.data["moderator_feedback"]["feedback_text"] + ) + assert comment.ai_report.explanation == ai_report.explanation + + assert ai_report.explanation in response.data["ai_report"] + 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)