wip: API for feedback provider to add assessment

This commit is contained in:
Livio Bieri 2024-01-22 17:51:15 +01:00
parent 8bf762173a
commit 8eee03cb69
4 changed files with 106 additions and 21 deletions

View File

@ -21,18 +21,23 @@ class SelfEvaluationFeedbackSerializer(serializers.ModelSerializer):
feedback_id = serializers.PrimaryKeyRelatedField(
read_only=True, source="course_completion_feedback"
)
circle_name = serializers.SerializerMethodField()
class Meta:
model = SelfEvaluationFeedback
fields = [
"feedback_id",
"learning_unit_id",
"circle_name",
"feedback_submitted",
"feedback_requester_user",
"feedback_provider_user",
"criteria",
]
def get_circle_name(self, obj):
return obj.learning_unit.get_circle().title
def get_criteria(self, obj):
performance_criteria: List[
PerformanceCriteria

View File

@ -120,7 +120,7 @@ class SelfEvaluationFeedbackAPI(APITestCase):
# THEN
self.assertEqual(response.status_code, 403)
def test_list_self_evaluation_feedback_provider(self):
def test_get_provider_self_evaluation_feedback(self):
# GIVEN
learning_unit = create_learning_unit(course=self.course, circle=self.circle)
@ -145,14 +145,14 @@ class SelfEvaluationFeedbackAPI(APITestCase):
completion_status=CourseCompletionStatus.SUCCESS.value,
)
feedback = create_self_evaluation_feedback(
self_evaluation_feedback = create_self_evaluation_feedback(
learning_unit=learning_unit,
feedback_requester_user=self.member,
feedback_provider_user=self.mentor,
)
CourseCompletionFeedback.objects.create(
feedback=feedback,
feedback=self_evaluation_feedback,
course_completion=completion,
feedback_assessment=CourseCompletionStatus.FAIL.value,
)
@ -160,29 +160,36 @@ class SelfEvaluationFeedbackAPI(APITestCase):
self.client.force_login(self.mentor)
# WHEN
response = self.client.get(reverse("list_self_evaluation_feedbacks_provider"))
response = self.client.get(
reverse(
"get_provider_self_evaluation_feedback",
args=[self_evaluation_feedback.id],
)
)
# THEN
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 1)
self.assertEqual(response.data[0]["learning_unit_id"], learning_unit.id)
feedback = response.data
self.assertEqual(feedback["learning_unit_id"], learning_unit.id)
self.assertEqual(feedback["feedback_submitted"], False)
self.assertEqual(feedback["circle_name"], self.circle.title)
provider_user = response.data[0]["feedback_provider_user"]
provider_user = feedback["feedback_provider_user"]
self.assertEqual(provider_user["id"], str(self.mentor.id)) # noqa
self.assertEqual(provider_user["first_name"], self.mentor.first_name)
self.assertEqual(provider_user["last_name"], self.mentor.last_name)
self.assertEqual(provider_user["avatar_url"], self.mentor.avatar_url)
requester_user = response.data[0]["feedback_requester_user"]
requester_user = feedback["feedback_requester_user"]
self.assertEqual(requester_user["id"], str(self.member.id)) # noqa
self.assertEqual(requester_user["first_name"], self.member.first_name)
self.assertEqual(requester_user["last_name"], self.member.last_name)
self.assertEqual(requester_user["avatar_url"], self.member.avatar_url)
self.assertEqual(len(response.data[0]["criteria"]), 2)
self.assertEqual(len(feedback["criteria"]), 2)
first_criteria = response.data[0]["criteria"][0]
first_criteria = feedback["criteria"][0]
self.assertEqual(first_criteria["course_completion_id"], completion.id)
self.assertEqual(first_criteria["title"], performance_criteria_1.title)
self.assertEqual(
@ -193,7 +200,7 @@ class SelfEvaluationFeedbackAPI(APITestCase):
first_criteria["feedback_assessment"], CourseCompletionStatus.FAIL.value
)
second_criteria = response.data[0]["criteria"][1]
second_criteria = feedback["criteria"][1]
self.assertEqual(second_criteria["course_completion_id"], None)
self.assertEqual(second_criteria["title"], performance_criteria_1.title)
self.assertEqual(
@ -203,3 +210,32 @@ class SelfEvaluationFeedbackAPI(APITestCase):
second_criteria["feedback_assessment"],
CourseCompletionStatus.UNKNOWN.value,
)
def test_submit_self_evaluation_feedback(self):
# GIVEN
learning_unit = create_learning_unit(course=self.course, circle=self.circle)
self_evaluation_feedback = create_self_evaluation_feedback(
learning_unit=learning_unit,
feedback_requester_user=self.member,
feedback_provider_user=self.mentor,
)
self.assertEqual(self_evaluation_feedback.feedback_submitted, False)
self.client.force_login(self.mentor)
# WHEN
response = self.client.put(
reverse(
"submit_self_evaluation_feedback", args=[self_evaluation_feedback.id]
),
)
# THEN
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data["success"], True)
self.assertEqual(
SelfEvaluationFeedback.objects.get(
id=self_evaluation_feedback.id
).feedback_submitted,
True,
)

View File

@ -1,19 +1,30 @@
from django.urls import path
from vbv_lernwelt.self_evaluation_feedback.views import (
list_self_evaluation_feedbacks_provider,
get_provider_self_evaluation_feedback,
start_self_evaluation_feedback,
submit_self_evaluation_feedback,
)
urlpatterns = [
path(
"reqeuster/start-feedback",
"feedback/start",
start_self_evaluation_feedback,
name="start_self_evaluation_feedback",
),
path(
"provider/list-feedbacks",
list_self_evaluation_feedbacks_provider,
name="list_self_evaluation_feedbacks_provider",
"feedback/<int:feedback_id>/submit",
submit_self_evaluation_feedback,
name="submit_self_evaluation_feedback",
),
path(
"feedback/<int:feedback_id>/add-feedback-assessment",
add_self_evaluation_feedback_assessment,
name="add_self_evaluation_feedback_assessment",
),
path(
"provider/feedback/<int:feedback_id>",
get_provider_self_evaluation_feedback,
name="get_provider_self_evaluation_feedback",
),
]

View File

@ -40,11 +40,44 @@ def start_self_evaluation_feedback(request):
return Response({"success": True})
@api_view(["GET"])
@api_view(["PUT"])
@permission_classes([IsAuthenticated])
def list_self_evaluation_feedbacks_provider(request):
feedbacks = SelfEvaluationFeedback.objects.filter(
feedback_provider_user=request.user
def submit_self_evaluation_feedback(request, feedback_id):
feedback = get_object_or_404(
SelfEvaluationFeedback, id=feedback_id, feedback_provider_user=request.user
)
return Response(SelfEvaluationFeedbackSerializer(feedbacks, many=True).data)
feedback.feedback_submitted = True
feedback.save()
return Response({"success": True})
@api_view(["GET"])
@permission_classes([IsAuthenticated])
def get_provider_self_evaluation_feedback(request, feedback_id):
feedback = get_object_or_404(
SelfEvaluationFeedback, id=feedback_id, feedback_provider_user=request.user
)
return Response(SelfEvaluationFeedbackSerializer(feedback).data)
@api_view(["PUT"])
@permission_classes([IsAuthenticated])
def add_self_evaluation_feedback_assessment(request, feedback_id):
feedback = get_object_or_404(
SelfEvaluationFeedback, id=feedback_id, feedback_provider_user=request.user
)
feedback_assessment = request.data.get("feedback_assessment")
# TODO @livioso continue here
# CourseCompletionFeedback.objects.get_or_create(
# feedback=feedback,
# course_completion=feedback.learning_unit.performancecriteria_set.first(),
# defaults={"feedback_assessment": feedback_assessment},
# )
return Response({"success": True})