feat: missing stuff in VV comp-navi API

This commit is contained in:
Livio Bieri 2024-02-16 16:24:38 +01:00
parent 7f8cfcba24
commit a7ca88da79
4 changed files with 52 additions and 4 deletions

View File

@ -322,6 +322,14 @@ class SelfEvaluationFeedbackAPI(APITestCase):
feedback_assessment["provider_user"]["id"], str(self.mentor.id)
)
aggregate = response.data["aggregates"]
self.assertEqual(aggregate["self_assessment"]["pass"], 1)
self.assertEqual(aggregate["self_assessment"]["fail"], 1)
self.assertEqual(aggregate["self_assessment"]["unknown"], 1)
self.assertEqual(aggregate["feedback_assessment"]["pass"], 1)
self.assertEqual(aggregate["feedback_assessment"]["fail"], 1)
self.assertEqual(aggregate["feedback_assessment"]["unknown"], 1)
def test_no_feedbacks_but_with_completion_status(self):
"""Case: CourseCompletion but NO feedback"""
@ -432,6 +440,8 @@ class SelfEvaluationFeedbackAPI(APITestCase):
result = response.data["results"][0]
self.assertEqual(result["title"], learning_unit.title)
self.assertEqual(result["id"], learning_unit.id)
self.assertEqual(result["circle_id"], self.circle.id)
self.assertEqual(result["circle_title"], self.circle.title)
circles = response.data["circles"]
self.assertEqual(len(circles), 1)

View File

@ -12,7 +12,7 @@ from vbv_lernwelt.self_evaluation_feedback.views import (
urlpatterns = [
# /requester/* URLs -> For the user who requests feedback
path(
"requester/<int:course_session_id>/feedbacks",
"requester/<int:course_session_id>/feedbacks/summaries",
get_self_evaluation_feedbacks_as_requester,
name="get_self_evaluation_feedbacks_as_requester",
),

View File

@ -112,3 +112,11 @@ def get_self_assessment_counts(
fail_count=fail_count,
unknown_count=unknown_count,
)
def calculate_aggregate(counts: [AssessmentCounts]):
return AssessmentCounts(
pass_count=sum(x.pass_count for x in counts),
fail_count=sum(x.fail_count for x in counts),
unknown_count=sum(x.unknown_count for x in counts),
)

View File

@ -24,6 +24,7 @@ from vbv_lernwelt.self_evaluation_feedback.serializers import (
from vbv_lernwelt.self_evaluation_feedback.utils import (
get_self_assessment_counts,
get_self_evaluation_feedback_counts,
calculate_aggregate,
)
@ -97,6 +98,9 @@ def get_self_evaluation_feedbacks_as_requester(request, course_session_id: int):
results = []
circle_ids = set()
all_self_assessment_counts = []
all_feedback_assessment_counts = []
for learning_unit in LearningUnit.objects.filter(
feedback_user=LearningUnitPerformanceFeedbackType.MENTOR_FEEDBACK.value,
course_category__course=course_session.course,
@ -104,15 +108,18 @@ def get_self_evaluation_feedbacks_as_requester(request, course_session_id: int):
circle = learning_unit.get_parent().specific
circle_ids.add(circle.id)
feedback_assessment = None
feedback = SelfEvaluationFeedback.objects.filter(
learning_unit=learning_unit,
feedback_requester_user=request.user,
).first()
if feedback:
if not feedback:
# no feedback given yet
feedback_assessment = None
else:
# feedback given
feedback_counts = get_self_evaluation_feedback_counts(feedback)
all_feedback_assessment_counts.append(feedback_counts)
feedback_assessment = {
"submitted_by_provider": feedback.feedback_submitted,
@ -125,11 +132,14 @@ def get_self_evaluation_feedbacks_as_requester(request, course_session_id: int):
}
self_assessment_counts = get_self_assessment_counts(learning_unit, request.user)
all_self_assessment_counts.append(self_assessment_counts)
results.append(
{
"id": learning_unit.id,
"title": learning_unit.title,
"circle_id": circle.id,
"circle_title": circle.title,
"feedback_assessment": feedback_assessment,
"self_assessment": {
"pass": self_assessment_counts.pass_count,
@ -139,12 +149,32 @@ def get_self_evaluation_feedbacks_as_requester(request, course_session_id: int):
}
)
self_assessment_counts_aggregate = calculate_aggregate(
counts=all_self_assessment_counts
)
feedback_assessment_counts_aggregate = calculate_aggregate(
counts=all_feedback_assessment_counts
)
return Response(
{
"results": results,
"circles": list(
Circle.objects.filter(id__in=circle_ids).values("id", "title")
),
"aggregates": {
"feedback_assessment": {
"pass": feedback_assessment_counts_aggregate.pass_count,
"fail": feedback_assessment_counts_aggregate.fail_count,
"unknown": feedback_assessment_counts_aggregate.unknown_count,
},
"self_assessment": {
"pass": self_assessment_counts_aggregate.pass_count,
"fail": self_assessment_counts_aggregate.fail_count,
"unknown": self_assessment_counts_aggregate.unknown_count,
},
},
}
)