fix: properly merge competence per learning unit

This commit is contained in:
Livio Bieri 2023-10-30 13:21:49 +01:00
parent a01e8bd9f0
commit d61c93db09
2 changed files with 22 additions and 10 deletions

View File

@ -15,6 +15,7 @@ class CompetenceRecordStatisticsType(graphene.ObjectType):
_id = graphene.ID(required=True) _id = graphene.ID(required=True)
course_session_id = graphene.ID(required=True) course_session_id = graphene.ID(required=True)
generation = graphene.String(required=True) generation = graphene.String(required=True)
title = graphene.String(required=True)
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)
@ -55,24 +56,33 @@ def competences(
] = completion.page.specific.learning_unit.get_circle() ] = completion.page.specific.learning_unit.get_circle()
circle = circle_cache[completion.page.id] circle = circle_cache[completion.page.id]
learning_unit = completion.page.specific.learning_unit
if circle.id not in competence_records: competence_records.setdefault(circle.id, {}).setdefault(
details_url = f"/course/{course_slug}/cockpit?courseSessionId={completion.course_session.id}" learning_unit,
competence_records[circle.id] = CompetenceRecordStatisticsType( CompetenceRecordStatisticsType(
_id=circle.id, # noqa _id=circle.id, # noqa
title=learning_unit.title, # noqa
course_session_id=completion.course_session.id, # noqa course_session_id=completion.course_session.id, # noqa
generation=completion.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 details_url=f"/course/{course_slug}/cockpit?courseSessionId={completion.course_session.id}", # noqa
) ),
if completion.completion_status == CourseCompletionStatus.SUCCESS.value: )
competence_records[circle.id].success_count += 1
elif completion.completion_status == CourseCompletionStatus.FAIL.value: if completion.completion_status == CourseCompletionStatus.SUCCESS.value:
competence_records[circle.id].fail_count += 1 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]) success_count = sum([c.success_count for c in values])
fail_count = sum([c.fail_count for c in values]) fail_count = sum([c.fail_count for c in values])

View File

@ -66,6 +66,7 @@ class DashboardCompetenceTestCase(GraphQLTestCase):
course_statistics(course_id: $course_id) {{ course_statistics(course_id: $course_id) {{
competences {{ competences {{
records {{ records {{
title
course_session_id course_session_id
generation generation
circle_id circle_id
@ -92,6 +93,7 @@ class DashboardCompetenceTestCase(GraphQLTestCase):
competences = response.json()["data"]["course_statistics"]["competences"] competences = response.json()["data"]["course_statistics"]["competences"]
records = competences["records"] records = competences["records"]
self.assertEqual(records[0]["title"], "Learning Unit")
self.assertEqual(records[0]["success_count"], 1) self.assertEqual(records[0]["success_count"], 1)
self.assertEqual(records[0]["fail_count"], 1) self.assertEqual(records[0]["fail_count"], 1)
self.assertEqual(records[0]["circle_id"], str(circle.id)) self.assertEqual(records[0]["circle_id"], str(circle.id))