From d61c93db09bbb9f6f4570650a7bc9a9882348463 Mon Sep 17 00:00:00 2001 From: Livio Bieri Date: Mon, 30 Oct 2023 13:21:49 +0100 Subject: [PATCH] fix: properly merge competence per learning unit --- .../dashboard/graphql/types/competence.py | 30 ++++++++++++------- .../tests/graphql/test_competence.py | 2 ++ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/server/vbv_lernwelt/dashboard/graphql/types/competence.py b/server/vbv_lernwelt/dashboard/graphql/types/competence.py index 9a998729..0f633922 100644 --- a/server/vbv_lernwelt/dashboard/graphql/types/competence.py +++ b/server/vbv_lernwelt/dashboard/graphql/types/competence.py @@ -15,6 +15,7 @@ class CompetenceRecordStatisticsType(graphene.ObjectType): _id = graphene.ID(required=True) course_session_id = graphene.ID(required=True) generation = graphene.String(required=True) + title = graphene.String(required=True) circle_id = graphene.ID(required=True) success_count = graphene.Int(required=True) fail_count = graphene.Int(required=True) @@ -55,24 +56,33 @@ def competences( ] = completion.page.specific.learning_unit.get_circle() circle = circle_cache[completion.page.id] + learning_unit = completion.page.specific.learning_unit - if circle.id not in competence_records: - details_url = f"/course/{course_slug}/cockpit?courseSessionId={completion.course_session.id}" - competence_records[circle.id] = CompetenceRecordStatisticsType( + competence_records.setdefault(circle.id, {}).setdefault( + learning_unit, + CompetenceRecordStatisticsType( _id=circle.id, # noqa + title=learning_unit.title, # 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 completion.completion_status == CourseCompletionStatus.SUCCESS.value: - competence_records[circle.id].success_count += 1 - elif completion.completion_status == CourseCompletionStatus.FAIL.value: - competence_records[circle.id].fail_count += 1 + details_url=f"/course/{course_slug}/cockpit?courseSessionId={completion.course_session.id}", # noqa + ), + ) + + if completion.completion_status == CourseCompletionStatus.SUCCESS.value: + competence_records[circle.id][learning_unit].success_count += 1 + elif completion.completion_status == CourseCompletionStatus.FAIL.value: + competence_records[circle.id][learning_unit].fail_count += 1 + + values = [ + record + for circle_records in competence_records.values() + for record in circle_records.values() + ] - values = list(competence_records.values()) success_count = sum([c.success_count for c in values]) fail_count = sum([c.fail_count for c in values]) diff --git a/server/vbv_lernwelt/dashboard/tests/graphql/test_competence.py b/server/vbv_lernwelt/dashboard/tests/graphql/test_competence.py index 84a8f575..bdcc6f66 100644 --- a/server/vbv_lernwelt/dashboard/tests/graphql/test_competence.py +++ b/server/vbv_lernwelt/dashboard/tests/graphql/test_competence.py @@ -66,6 +66,7 @@ class DashboardCompetenceTestCase(GraphQLTestCase): course_statistics(course_id: $course_id) {{ competences {{ records {{ + title course_session_id generation circle_id @@ -92,6 +93,7 @@ class DashboardCompetenceTestCase(GraphQLTestCase): competences = response.json()["data"]["course_statistics"]["competences"] records = competences["records"] + self.assertEqual(records[0]["title"], "Learning Unit") self.assertEqual(records[0]["success_count"], 1) self.assertEqual(records[0]["fail_count"], 1) self.assertEqual(records[0]["circle_id"], str(circle.id))