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( feedback_id = serializers.PrimaryKeyRelatedField(
read_only=True, source="course_completion_feedback" read_only=True, source="course_completion_feedback"
) )
circle_name = serializers.SerializerMethodField()
class Meta: class Meta:
model = SelfEvaluationFeedback model = SelfEvaluationFeedback
fields = [ fields = [
"feedback_id", "feedback_id",
"learning_unit_id", "learning_unit_id",
"circle_name",
"feedback_submitted", "feedback_submitted",
"feedback_requester_user", "feedback_requester_user",
"feedback_provider_user", "feedback_provider_user",
"criteria", "criteria",
] ]
def get_circle_name(self, obj):
return obj.learning_unit.get_circle().title
def get_criteria(self, obj): def get_criteria(self, obj):
performance_criteria: List[ performance_criteria: List[
PerformanceCriteria PerformanceCriteria

View File

@ -120,7 +120,7 @@ class SelfEvaluationFeedbackAPI(APITestCase):
# THEN # THEN
self.assertEqual(response.status_code, 403) self.assertEqual(response.status_code, 403)
def test_list_self_evaluation_feedback_provider(self): def test_get_provider_self_evaluation_feedback(self):
# GIVEN # GIVEN
learning_unit = create_learning_unit(course=self.course, circle=self.circle) learning_unit = create_learning_unit(course=self.course, circle=self.circle)
@ -145,14 +145,14 @@ class SelfEvaluationFeedbackAPI(APITestCase):
completion_status=CourseCompletionStatus.SUCCESS.value, completion_status=CourseCompletionStatus.SUCCESS.value,
) )
feedback = create_self_evaluation_feedback( self_evaluation_feedback = create_self_evaluation_feedback(
learning_unit=learning_unit, learning_unit=learning_unit,
feedback_requester_user=self.member, feedback_requester_user=self.member,
feedback_provider_user=self.mentor, feedback_provider_user=self.mentor,
) )
CourseCompletionFeedback.objects.create( CourseCompletionFeedback.objects.create(
feedback=feedback, feedback=self_evaluation_feedback,
course_completion=completion, course_completion=completion,
feedback_assessment=CourseCompletionStatus.FAIL.value, feedback_assessment=CourseCompletionStatus.FAIL.value,
) )
@ -160,29 +160,36 @@ class SelfEvaluationFeedbackAPI(APITestCase):
self.client.force_login(self.mentor) self.client.force_login(self.mentor)
# WHEN # 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 # THEN
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 1) feedback = response.data
self.assertEqual(response.data[0]["learning_unit_id"], learning_unit.id) 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["id"], str(self.mentor.id)) # noqa
self.assertEqual(provider_user["first_name"], self.mentor.first_name) self.assertEqual(provider_user["first_name"], self.mentor.first_name)
self.assertEqual(provider_user["last_name"], self.mentor.last_name) self.assertEqual(provider_user["last_name"], self.mentor.last_name)
self.assertEqual(provider_user["avatar_url"], self.mentor.avatar_url) 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["id"], str(self.member.id)) # noqa
self.assertEqual(requester_user["first_name"], self.member.first_name) self.assertEqual(requester_user["first_name"], self.member.first_name)
self.assertEqual(requester_user["last_name"], self.member.last_name) self.assertEqual(requester_user["last_name"], self.member.last_name)
self.assertEqual(requester_user["avatar_url"], self.member.avatar_url) 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["course_completion_id"], completion.id)
self.assertEqual(first_criteria["title"], performance_criteria_1.title) self.assertEqual(first_criteria["title"], performance_criteria_1.title)
self.assertEqual( self.assertEqual(
@ -193,7 +200,7 @@ class SelfEvaluationFeedbackAPI(APITestCase):
first_criteria["feedback_assessment"], CourseCompletionStatus.FAIL.value 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["course_completion_id"], None)
self.assertEqual(second_criteria["title"], performance_criteria_1.title) self.assertEqual(second_criteria["title"], performance_criteria_1.title)
self.assertEqual( self.assertEqual(
@ -203,3 +210,32 @@ class SelfEvaluationFeedbackAPI(APITestCase):
second_criteria["feedback_assessment"], second_criteria["feedback_assessment"],
CourseCompletionStatus.UNKNOWN.value, 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 django.urls import path
from vbv_lernwelt.self_evaluation_feedback.views import ( from vbv_lernwelt.self_evaluation_feedback.views import (
list_self_evaluation_feedbacks_provider, get_provider_self_evaluation_feedback,
start_self_evaluation_feedback, start_self_evaluation_feedback,
submit_self_evaluation_feedback,
) )
urlpatterns = [ urlpatterns = [
path( path(
"reqeuster/start-feedback", "feedback/start",
start_self_evaluation_feedback, start_self_evaluation_feedback,
name="start_self_evaluation_feedback", name="start_self_evaluation_feedback",
), ),
path( path(
"provider/list-feedbacks", "feedback/<int:feedback_id>/submit",
list_self_evaluation_feedbacks_provider, submit_self_evaluation_feedback,
name="list_self_evaluation_feedbacks_provider", 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}) return Response({"success": True})
@api_view(["GET"]) @api_view(["PUT"])
@permission_classes([IsAuthenticated]) @permission_classes([IsAuthenticated])
def list_self_evaluation_feedbacks_provider(request): def submit_self_evaluation_feedback(request, feedback_id):
feedbacks = SelfEvaluationFeedback.objects.filter( feedback = get_object_or_404(
feedback_provider_user=request.user 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})