chore: details url for competence performances

This commit is contained in:
Livio Bieri 2023-10-25 17:03:04 +02:00
parent d5025e3408
commit d2d5f22536
3 changed files with 20 additions and 8 deletions

View File

@ -14,6 +14,7 @@ class CompetencePerformance(graphene.ObjectType):
circle_id = graphene.ID(required=True) circle_id = graphene.ID(required=True)
success_count = graphene.Int(required=True) success_count = graphene.Int(required=True)
fail_count = graphene.Int(required=True) fail_count = graphene.Int(required=True)
details_url = graphene.String(required=True)
class Competences(graphene.ObjectType): class Competences(graphene.ObjectType):
@ -23,6 +24,7 @@ class Competences(graphene.ObjectType):
def competences( def competences(
course_session_selection_ids: graphene.List(graphene.ID), course_session_selection_ids: graphene.List(graphene.ID),
course_slug: graphene.String,
) -> Competences: ) -> Competences:
completions = CourseCompletion.objects.filter( completions = CourseCompletion.objects.filter(
course_session_id__in=course_session_selection_ids, course_session_id__in=course_session_selection_ids,
@ -33,23 +35,27 @@ def competences(
circle_cache = {} circle_cache = {}
for c in completions: for completion in completions:
if c.page.id not in circle_cache: if completion.page.id not in circle_cache:
circle_cache[c.page.id] = c.page.specific.learning_unit.get_circle() circle_cache[
completion.page.id
] = completion.page.specific.learning_unit.get_circle()
circle = circle_cache[c.page.id] circle = circle_cache[completion.page.id]
if circle.id not in competence_performances: if circle.id not in competence_performances:
details_url = f"/course/{course_slug}/cockpit?courseSessionId={completion.course_session.id}"
competence_performances[circle.id] = CompetencePerformance( competence_performances[circle.id] = CompetencePerformance(
course_session_id=c.course_session.id, # noqa course_session_id=completion.course_session.id, # noqa
generation=c.course_session.generation, # noqa generation=completion.course_session.generation, # noqa
circle_id=circle.id, # noqa circle_id=circle.id, # noqa
success_count=0, # noqa success_count=0, # noqa
fail_count=0, # noqa fail_count=0, # noqa
details_url=details_url, # noqa
) )
if c.completion_status == CourseCompletionStatus.SUCCESS.value: if completion.completion_status == CourseCompletionStatus.SUCCESS.value:
competence_performances[circle.id].success_count += 1 competence_performances[circle.id].success_count += 1
elif c.completion_status == CourseCompletionStatus.FAIL.value: elif completion.completion_status == CourseCompletionStatus.FAIL.value:
competence_performances[circle.id].fail_count += 1 competence_performances[circle.id].fail_count += 1
return Competences( return Competences(

View File

@ -84,6 +84,7 @@ class CourseStatisticsType(graphene.ObjectType):
def resolve_competences(root, info) -> Competences: def resolve_competences(root, info) -> Competences:
return competences( return competences(
course_session_selection_ids=root.course_session_selection_ids, course_session_selection_ids=root.course_session_selection_ids,
course_slug=root.course_slug,
) )
def resolve_assignments(root, info) -> Assignments: def resolve_assignments(root, info) -> Assignments:

View File

@ -72,6 +72,7 @@ class DashboardCompetenceTestCase(GraphQLTestCase):
circle_id circle_id
success_count success_count
fail_count fail_count
details_url
}} }}
summary {{ summary {{
success_total success_total
@ -97,6 +98,10 @@ class DashboardCompetenceTestCase(GraphQLTestCase):
self.assertEqual(performances[0]["circle_id"], str(circle.id)) self.assertEqual(performances[0]["circle_id"], str(circle.id))
self.assertEqual(performances[0]["course_session_id"], str(course_session.id)) self.assertEqual(performances[0]["course_session_id"], str(course_session.id))
self.assertEqual(performances[0]["generation"], "2023") self.assertEqual(performances[0]["generation"], "2023")
self.assertEqual(
performances[0]["details_url"],
f"/course/{course.slug}/cockpit?courseSessionId={course_session.id}",
)
summary = competences["summary"] summary = competences["summary"]
self.assertEqual(summary["success_total"], 1) self.assertEqual(summary["success_total"], 1)