From 4bc1ca636c3c887cc35cb864eeb7e6f2bad5678e Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Tue, 5 Sep 2023 11:13:21 +0200 Subject: [PATCH] Add result data for edoniq test --- client/src/gql/graphql.ts | 8 +++++ client/src/gql/schema.graphql | 1 + .../assignment/graphql/queries.py | 30 +++++++++++++++++++ .../core/management/commands/cypress_reset.py | 26 ++++++++++++++-- .../course/creators/test_course.py | 25 +++++++++++++--- 5 files changed, 83 insertions(+), 7 deletions(-) diff --git a/client/src/gql/graphql.ts b/client/src/gql/graphql.ts index 9fa5a2d6..a68766ad 100644 --- a/client/src/gql/graphql.ts +++ b/client/src/gql/graphql.ts @@ -566,6 +566,7 @@ export type Query = { __typename?: 'Query'; assignment?: Maybe; assignment_completion?: Maybe; + assignment_completions?: Maybe>>; circle?: Maybe; competence_certificate?: Maybe; competence_certificate_list?: Maybe; @@ -599,6 +600,13 @@ export type QueryAssignmentCompletionArgs = { }; +export type QueryAssignmentCompletionsArgs = { + assignment_ids: Array>; + assignment_user_id?: InputMaybe; + course_session_id: Scalars['ID']['input']; +}; + + export type QueryCircleArgs = { id?: InputMaybe; slug?: InputMaybe; diff --git a/client/src/gql/schema.graphql b/client/src/gql/schema.graphql index 837a5eab..1cd73b42 100644 --- a/client/src/gql/schema.graphql +++ b/client/src/gql/schema.graphql @@ -17,6 +17,7 @@ type Query { competence_certificate_list(id: ID, slug: String, course_id: ID, course_slug: String): CompetenceCertificateListObjectType assignment(id: ID, slug: String): AssignmentObjectType assignment_completion(assignment_id: ID!, course_session_id: ID!, learning_content_page_id: ID, assignment_user_id: UUID): AssignmentCompletionObjectType + assignment_completions(assignment_ids: [ID]!, course_session_id: ID!, assignment_user_id: UUID): [AssignmentCompletionObjectType] } type LearningPathObjectType implements CoursePageInterface { diff --git a/server/vbv_lernwelt/assignment/graphql/queries.py b/server/vbv_lernwelt/assignment/graphql/queries.py index 035e478f..67e9a315 100644 --- a/server/vbv_lernwelt/assignment/graphql/queries.py +++ b/server/vbv_lernwelt/assignment/graphql/queries.py @@ -58,3 +58,33 @@ class AssignmentQuery(object): course_session_id=course_session_id, ).first() raise PermissionDenied() + + assignment_completions = graphene.List( + AssignmentCompletionObjectType, + assignment_ids=graphene.List(graphene.ID, required=True), + course_session_id=graphene.ID(required=True), + assignment_user_id=graphene.UUID(required=False), + ) + + def resolve_assignment_completions( + root, + info, + assignment_ids, + course_session_id, + assignment_user_id=None, + **kwargs, + ): + if assignment_user_id is None: + assignment_user_id = info.context.user.id + + if str(assignment_user_id) == str( + info.context.user.id + ) or is_course_session_expert(info.context.user, course_session_id): + course_id = CourseSession.objects.get(id=course_session_id).course_id + if has_course_access(info.context.user, course_id): + return AssignmentCompletion.objects.filter( + assignment_user_id=assignment_user_id, + assignment_id__in=assignment_ids, + course_session_id=course_session_id, + ) + raise PermissionDenied() diff --git a/server/vbv_lernwelt/core/management/commands/cypress_reset.py b/server/vbv_lernwelt/core/management/commands/cypress_reset.py index db462e28..c5be3f35 100644 --- a/server/vbv_lernwelt/core/management/commands/cypress_reset.py +++ b/server/vbv_lernwelt/core/management/commands/cypress_reset.py @@ -9,7 +9,8 @@ from vbv_lernwelt.core.constants import ( from vbv_lernwelt.core.models import User from vbv_lernwelt.course.creators.test_course import ( create_test_assignment_submitted_data, - create_test_assignment_evaulation_data, + create_test_assignment_evaluation_data, + create_edoniq_test_result_data, ) from vbv_lernwelt.course.models import CourseCompletion, CourseSession from vbv_lernwelt.notify.models import Notification @@ -26,7 +27,16 @@ from vbv_lernwelt.notify.models import Notification default=False, help="will create assignment evaluation data for test-student1@example.com", ) -def command(create_assignment_completion, create_assignment_evaluation): +@click.option( + "--create-edoniq-test-results/--no-create-edoniq-test-results", + default=False, + help="will create edoniq result data for test-student1@example.com", +) +def command( + create_assignment_completion, + create_assignment_evaluation, + create_edoniq_test_results, +): print("cypress reset data") CourseCompletion.objects.all().delete() Notification.objects.all().delete() @@ -45,7 +55,7 @@ def command(create_assignment_completion, create_assignment_evaluation): ) if create_assignment_evaluation: print("create assignment evaulation data for test course") - create_test_assignment_evaulation_data( + create_test_assignment_evaluation_data( assignment=Assignment.objects.get( slug="test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice" ), @@ -53,3 +63,13 @@ def command(create_assignment_completion, create_assignment_evaluation): assignment_user=User.objects.get(id=TEST_STUDENT1_USER_ID), evaluation_user=User.objects.get(id=TEST_TRAINER1_USER_ID), ) + + if create_edoniq_test_results: + print("create edoniq test results") + create_edoniq_test_result_data( + assignment=Assignment.objects.get( + slug="test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo" + ), + course_session=CourseSession.objects.get(id=TEST_COURSE_SESSION_BERN_ID), + assignment_user=User.objects.get(id=TEST_STUDENT1_USER_ID), + ) diff --git a/server/vbv_lernwelt/course/creators/test_course.py b/server/vbv_lernwelt/course/creators/test_course.py index c341a4cd..2d47f298 100644 --- a/server/vbv_lernwelt/course/creators/test_course.py +++ b/server/vbv_lernwelt/course/creators/test_course.py @@ -229,7 +229,7 @@ def create_test_assignment_submitted_data(assignment, course_session, user): ) -def create_test_assignment_evaulation_data( +def create_test_assignment_evaluation_data( assignment, course_session, assignment_user, evaluation_user ): if assignment and course_session and assignment_user and evaluation_user: @@ -237,13 +237,13 @@ def create_test_assignment_evaulation_data( evaluation_points = 0 for index, evaluation_task in enumerate(subtasks): - evaluation_points += 2 + evaluation_points += evaluation_task["value"]["max_points"] update_assignment_completion( assignment_user=assignment_user, assignment=assignment, course_session=course_session, - learning_content_page=assignment.learningcontentassignment_set.first(), + learning_content_page=assignment.find_attached_learning_content(), completion_data={ evaluation_task["id"]: { "expert_data": { @@ -260,7 +260,7 @@ def create_test_assignment_evaulation_data( assignment_user=assignment_user, assignment=assignment, course_session=course_session, - learning_content_page=assignment.learningcontentassignment_set.first(), + learning_content_page=assignment.find_attached_learning_content(), completion_data={}, completion_status=AssignmentCompletionStatus.EVALUATION_SUBMITTED, evaluation_user=evaluation_user, @@ -269,6 +269,23 @@ def create_test_assignment_evaulation_data( ) +def create_edoniq_test_result_data( + assignment, course_session, assignment_user, points=24 +): + if assignment and course_session and assignment_user: + update_assignment_completion( + assignment_user=assignment_user, + assignment=assignment, + course_session=course_session, + learning_content_page=assignment.find_attached_learning_content(), + completion_data={}, + completion_status=AssignmentCompletionStatus.EVALUATION_SUBMITTED, + evaluation_user=User.objects.get(username="admin"), + evaluation_grade=6, + evaluation_points=points, + ) + + def create_test_course_with_categories(apps=None, schema_editor=None): if apps is not None: Course = apps.get_model("course", "Course")