From d2d5f225368db259f869e62196ffc2e0ba47accf Mon Sep 17 00:00:00 2001 From: Livio Bieri Date: Wed, 25 Oct 2023 17:03:04 +0200 Subject: [PATCH] chore: details url for competence performances --- .../dashboard/graphql/types/competence.py | 22 ++++++++++++------- .../dashboard/graphql/types/dashboard.py | 1 + .../tests/graphql/test_competence.py | 5 +++++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/server/vbv_lernwelt/dashboard/graphql/types/competence.py b/server/vbv_lernwelt/dashboard/graphql/types/competence.py index 469bce3a..7a631bf6 100644 --- a/server/vbv_lernwelt/dashboard/graphql/types/competence.py +++ b/server/vbv_lernwelt/dashboard/graphql/types/competence.py @@ -14,6 +14,7 @@ class CompetencePerformance(graphene.ObjectType): circle_id = graphene.ID(required=True) success_count = graphene.Int(required=True) fail_count = graphene.Int(required=True) + details_url = graphene.String(required=True) class Competences(graphene.ObjectType): @@ -23,6 +24,7 @@ class Competences(graphene.ObjectType): def competences( course_session_selection_ids: graphene.List(graphene.ID), + course_slug: graphene.String, ) -> Competences: completions = CourseCompletion.objects.filter( course_session_id__in=course_session_selection_ids, @@ -33,23 +35,27 @@ def competences( circle_cache = {} - for c in completions: - if c.page.id not in circle_cache: - circle_cache[c.page.id] = c.page.specific.learning_unit.get_circle() + for completion in completions: + if completion.page.id not in circle_cache: + 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: + details_url = f"/course/{course_slug}/cockpit?courseSessionId={completion.course_session.id}" competence_performances[circle.id] = CompetencePerformance( - course_session_id=c.course_session.id, # noqa - generation=c.course_session.generation, # noqa + course_session_id=completion.course_session.id, # noqa + generation=completion.course_session.generation, # noqa circle_id=circle.id, # noqa success_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 - elif c.completion_status == CourseCompletionStatus.FAIL.value: + elif completion.completion_status == CourseCompletionStatus.FAIL.value: competence_performances[circle.id].fail_count += 1 return Competences( diff --git a/server/vbv_lernwelt/dashboard/graphql/types/dashboard.py b/server/vbv_lernwelt/dashboard/graphql/types/dashboard.py index 6a9a7288..205e38f8 100644 --- a/server/vbv_lernwelt/dashboard/graphql/types/dashboard.py +++ b/server/vbv_lernwelt/dashboard/graphql/types/dashboard.py @@ -84,6 +84,7 @@ class CourseStatisticsType(graphene.ObjectType): def resolve_competences(root, info) -> Competences: return competences( course_session_selection_ids=root.course_session_selection_ids, + course_slug=root.course_slug, ) def resolve_assignments(root, info) -> Assignments: diff --git a/server/vbv_lernwelt/dashboard/tests/graphql/test_competence.py b/server/vbv_lernwelt/dashboard/tests/graphql/test_competence.py index 88658e6a..8a3af5da 100644 --- a/server/vbv_lernwelt/dashboard/tests/graphql/test_competence.py +++ b/server/vbv_lernwelt/dashboard/tests/graphql/test_competence.py @@ -72,6 +72,7 @@ class DashboardCompetenceTestCase(GraphQLTestCase): circle_id success_count fail_count + details_url }} summary {{ success_total @@ -97,6 +98,10 @@ class DashboardCompetenceTestCase(GraphQLTestCase): self.assertEqual(performances[0]["circle_id"], str(circle.id)) self.assertEqual(performances[0]["course_session_id"], str(course_session.id)) self.assertEqual(performances[0]["generation"], "2023") + self.assertEqual( + performances[0]["details_url"], + f"/course/{course.slug}/cockpit?courseSessionId={course_session.id}", + ) summary = competences["summary"] self.assertEqual(summary["success_total"], 1)