From d5025e34080529556b284572b68e8ab72b53616e Mon Sep 17 00:00:00 2001 From: Livio Bieri Date: Wed, 25 Oct 2023 16:30:10 +0200 Subject: [PATCH] chore: details url for feedbacks --- .../vbv_lernwelt/dashboard/graphql/queries.py | 1 + .../dashboard/graphql/types/dashboard.py | 18 ++++++++++++++---- .../dashboard/graphql/types/feedback.py | 16 ++++++++++++++-- .../dashboard/tests/graphql/test_dashboard.py | 2 ++ .../dashboard/tests/graphql/test_feedback.py | 9 +++++++++ 5 files changed, 40 insertions(+), 6 deletions(-) diff --git a/server/vbv_lernwelt/dashboard/graphql/queries.py b/server/vbv_lernwelt/dashboard/graphql/queries.py index 449320a8..1729793f 100644 --- a/server/vbv_lernwelt/dashboard/graphql/queries.py +++ b/server/vbv_lernwelt/dashboard/graphql/queries.py @@ -49,6 +49,7 @@ class DashboardQuery(graphene.ObjectType): return CourseStatisticsType( id=course.id, # noqa course_title=course.title, # noqa + course_slug=course.slug, # noqa course_session_selection_ids=list(course_session_ids), # noqa ) diff --git a/server/vbv_lernwelt/dashboard/graphql/types/dashboard.py b/server/vbv_lernwelt/dashboard/graphql/types/dashboard.py index 45c82f24..6a9a7288 100644 --- a/server/vbv_lernwelt/dashboard/graphql/types/dashboard.py +++ b/server/vbv_lernwelt/dashboard/graphql/types/dashboard.py @@ -59,6 +59,7 @@ class CourseProgressType(graphene.ObjectType): class CourseStatisticsType(graphene.ObjectType): id = graphene.ID(required=True) # course_id, named id for urql course_title = graphene.String(required=True) + course_slug = graphene.String(required=True) course_session_properties = graphene.Field(CourseSessionProperties, required=True) course_session_selection_ids = graphene.List(graphene.ID, required=True) course_session_selection_metrics = graphene.Field( @@ -70,16 +71,25 @@ class CourseStatisticsType(graphene.ObjectType): competences = graphene.Field(Competences, required=True) def resolve_attendance_day_presences(root, info) -> AttendanceDayPresences: - return attendance_day_presences(root.course_session_selection_ids) + return attendance_day_presences( + course_session_selection_ids=root.course_session_selection_ids + ) def resolve_feedback_responses(root, info) -> FeedbackResponses: - return feedback_responses(root.course_session_selection_ids) + return feedback_responses( + course_session_selection_ids=root.course_session_selection_ids, + course_slug=root.course_slug, + ) def resolve_competences(root, info) -> Competences: - return competences(root.course_session_selection_ids) + return competences( + course_session_selection_ids=root.course_session_selection_ids, + ) def resolve_assignments(root, info) -> Assignments: - return assignments(root.course_session_selection_ids) + return assignments( + course_session_selection_ids=root.course_session_selection_ids + ) def resolve_course_session_selection_metrics( root, info diff --git a/server/vbv_lernwelt/dashboard/graphql/types/feedback.py b/server/vbv_lernwelt/dashboard/graphql/types/feedback.py index d768685c..d81c5ba2 100644 --- a/server/vbv_lernwelt/dashboard/graphql/types/feedback.py +++ b/server/vbv_lernwelt/dashboard/graphql/types/feedback.py @@ -19,6 +19,7 @@ class FeedbackRecord(graphene.ObjectType): circle_id = graphene.ID(required=True) satisfaction_average = graphene.Float(required=True) satisfaction_max = graphene.Int(required=True) + details_url = graphene.String(required=True) class FeedbackResponses(graphene.ObjectType): @@ -28,6 +29,7 @@ class FeedbackResponses(graphene.ObjectType): def feedback_responses( course_session_selection_ids: graphene.List(graphene.ID), + course_slug: graphene.String, ) -> FeedbackResponses: # Get all course sessions for this user in the given course course_sessions = CourseSession.objects.filter( @@ -44,7 +46,12 @@ def feedback_responses( ) circle_feedbacks.extend( - circle_feedback_average(fbs, course_session.id, course_session.generation) + circle_feedback_average( + feedbacks=fbs, + course_session_id=course_session.id, + generation=course_session.generation, + course_slug=str(course_slug), + ) ) avg = sum([fb.satisfaction_average for fb in circle_feedbacks]) / len( @@ -62,7 +69,10 @@ def feedback_responses( def circle_feedback_average( - feedbacks: List[FeedbackResponse], course_session_id, generation: str + feedbacks: List[FeedbackResponse], + course_session_id, + generation: str, + course_slug: str, ): circle_data = {} records = [] @@ -81,6 +91,7 @@ def circle_feedback_average( circle_data[circle_id] = {"total": satisfaction, "count": 1} for circle_id, data in circle_data.items(): + details_url = f"/course/{course_slug}/cockpit/feedback/{circle_id}?courseSessionId={course_session_id}" records.append( FeedbackRecord( course_session_id=course_session_id, # noqa @@ -88,6 +99,7 @@ def circle_feedback_average( circle_id=circle_id, # noqa satisfaction_average=data["total"] / data["count"], # noqa satisfaction_max=4, # noqa + details_url=details_url, # noqa ) ) diff --git a/server/vbv_lernwelt/dashboard/tests/graphql/test_dashboard.py b/server/vbv_lernwelt/dashboard/tests/graphql/test_dashboard.py index ab1dc5d7..a4062dd2 100644 --- a/server/vbv_lernwelt/dashboard/tests/graphql/test_dashboard.py +++ b/server/vbv_lernwelt/dashboard/tests/graphql/test_dashboard.py @@ -188,6 +188,7 @@ class DashboardTestCase(GraphQLTestCase): course_statistics(course_id: $course_id) {{ id course_title + course_slug }} }} """ @@ -203,6 +204,7 @@ class DashboardTestCase(GraphQLTestCase): self.assertEqual(course_statistics["id"], str(course_2.id)) self.assertEqual(course_statistics["course_title"], course_2.title) + self.assertEqual(course_statistics["course_slug"], course_2.slug) def find_dashboard_config_by_course_id(dashboard_configs, course_id): diff --git a/server/vbv_lernwelt/dashboard/tests/graphql/test_feedback.py b/server/vbv_lernwelt/dashboard/tests/graphql/test_feedback.py index a7e5c2fa..4db7b77f 100644 --- a/server/vbv_lernwelt/dashboard/tests/graphql/test_feedback.py +++ b/server/vbv_lernwelt/dashboard/tests/graphql/test_feedback.py @@ -79,6 +79,7 @@ class DashboardFeedbackTestCase(GraphQLTestCase): circle_id satisfaction_average satisfaction_max + details_url }} summary {{ satisfaction_average @@ -109,6 +110,10 @@ class DashboardFeedbackTestCase(GraphQLTestCase): self.assertEqual(circle1_record["satisfaction_average"], 3.5) self.assertEqual(circle1_record["course_session_id"], str(course_session.id)) self.assertEqual(circle1_record["generation"], "2023") + self.assertEqual( + circle1_record["details_url"], + f"/course/{course.slug}/cockpit/feedback/{circle1.id}?courseSessionId={course_session.id}", + ) circle2_record = next( (r for r in records if r["circle_id"] == str(circle2.id)), None @@ -116,6 +121,10 @@ class DashboardFeedbackTestCase(GraphQLTestCase): self.assertEqual(circle2_record["satisfaction_average"], 1.5) self.assertEqual(circle2_record["course_session_id"], str(course_session.id)) self.assertEqual(circle2_record["generation"], "2023") + self.assertEqual( + circle2_record["details_url"], + f"/course/{course.slug}/cockpit/feedback/{circle2.id}?courseSessionId={course_session.id}", + ) summary = feedback_responses["summary"] self.assertEqual(summary["satisfaction_average"], 2.5)