from django.utils import timezone from graphene_django.utils import GraphQLTestCase from vbv_lernwelt.assignment.models import Assignment, AssignmentCompletion from vbv_lernwelt.core.create_default_users import create_default_users from vbv_lernwelt.course.creators.test_course import create_test_course from vbv_lernwelt.course.creators.test_utils import ( add_course_session_group_supervisor, add_course_session_user, create_course_session_group, create_user, ) from vbv_lernwelt.course.models import CourseSession, CourseSessionUser class TestCertificateList(GraphQLTestCase): GRAPHQL_URL = "/server/graphql/" def setUp(self): create_default_users() self.course = create_test_course(include_vv=False, with_sessions=True) self.course_session = CourseSession.objects.get(title="Test Bern 2022 a") assignment = Assignment.objects.get( slug="test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice" ) self.supervisor = create_user("supervisor") group = create_course_session_group(course_session=self.course_session) add_course_session_group_supervisor(group=group, user=self.supervisor) self.member_one = create_user("member one") add_course_session_user( course_session=self.course_session, user=self.member_one, role=CourseSessionUser.Role.MEMBER, ) self.member_two = create_user("member two") add_course_session_user( course_session=self.course_session, user=self.member_two, role=CourseSessionUser.Role.MEMBER, ) AssignmentCompletion.objects.create( assignment_user=self.member_one, assignment=assignment, learning_content_page=assignment.find_attached_learning_content(), course_session=self.course_session, completion_status="SUBMITTED", submitted_at=timezone.now(), completion_data={}, evaluation_max_points=10, evaluation_points=5, evaluation_passed=False, ) AssignmentCompletion.objects.create( assignment_user=self.member_two, assignment=assignment, learning_content_page=assignment.find_attached_learning_content(), course_session=self.course_session, completion_status="SUBMITTED", submitted_at=timezone.now(), completion_data={}, evaluation_max_points=10, evaluation_points=10, evaluation_passed=True, ) def test_supervisor_userprofile_certificate_summary(self): self.client.force_login(self.supervisor) query = """query competenceCertificateForUserQuery( $courseSlug: String!, $courseSessionId: ID!, $userIds: [UUID!] ) { competence_certificate_list( course_slug: $courseSlug, user_ids: $userIds ) { ...CoursePageFields competence_certificates { ...CoursePageFields assignments { ...CoursePageFields assignment_type max_points completions(course_session_id: $courseSessionId) { id completion_status submitted_at evaluation_points evaluation_max_points evaluation_passed __typename } learning_content { ...CoursePageFields circle { id title slug __typename } __typename } __typename } __typename } __typename } } fragment CoursePageFields on CoursePageInterface { title id slug content_type frontend_url __typename } """ variables = { "courseSessionId": str(self.course_session.id), "courseSlug": self.course.slug, "userIds": [str(self.member_one.id)], } # WHEN response = self.query(query, variables=variables) # THEN self.assertResponseNoErrors(response) certificates = response.json()["data"]["competence_certificate_list"][ "competence_certificates" ] self.assertEqual(len(certificates), 1) assignments = certificates[0]["assignments"] self.assertEqual(len(assignments), 2) completion1 = assignments[0]["completions"][0] self.assertEqual(completion1["completion_status"], "SUBMITTED") self.assertEqual(completion1["evaluation_points"], 5) self.assertEqual(completion1["evaluation_max_points"], 10) self.assertEqual(completion1["evaluation_passed"], False) completion2 = assignments[1]["completions"] self.assertEqual(len(completion2), 0) def test_member_cannot_see_other_user_certificate_summary(self): self.client.force_login(self.member_one) query = """query competenceCertificateForUserQuery( $courseSlug: String!, $courseSessionId: ID!, $userIds: [UUID!] ) { competence_certificate_list( course_slug: $courseSlug, user_ids: $userIds ) { ...CoursePageFields competence_certificates { ...CoursePageFields assignments { ...CoursePageFields assignment_type max_points completions(course_session_id: $courseSessionId) { id completion_status submitted_at evaluation_points evaluation_max_points evaluation_passed __typename } learning_content { ...CoursePageFields circle { id title slug __typename } __typename } __typename } __typename } __typename } } fragment CoursePageFields on CoursePageInterface { title id slug content_type frontend_url __typename } """ variables = { "courseSessionId": str(self.course_session.id), "courseSlug": self.course.slug, "userIds": [str(self.member_two.id)], } # WHEN response = self.query(query, variables=variables) # THEN self.assertResponseNoErrors(response) self.assertIsNone(response.json()["data"]["competence_certificate_list"]) def test_member_userprofile_certificate_summary(self): self.client.force_login(self.member_one) query = """query competenceCertificateForUserQuery( $courseSlug: String!, $courseSessionId: ID!, $userIds: [UUID!], ) { competence_certificate_list( course_slug: $courseSlug, user_ids: $userIds ) { ...CoursePageFields competence_certificates { ...CoursePageFields assignments { ...CoursePageFields assignment_type max_points completions(course_session_id: $courseSessionId) { id completion_status submitted_at evaluation_points evaluation_max_points evaluation_passed __typename } learning_content { ...CoursePageFields circle { id title slug __typename } __typename } __typename } __typename } __typename } } fragment CoursePageFields on CoursePageInterface { title id slug content_type frontend_url __typename } """ variables = { "courseSessionId": str(self.course_session.id), "courseSlug": self.course.slug, "userIds": [str(self.member_one.id)], } # WHEN response = self.query(query, variables=variables) # THEN self.assertResponseNoErrors(response) certificates = response.json()["data"]["competence_certificate_list"][ "competence_certificates" ] self.assertEqual(len(certificates), 1) assignments = certificates[0]["assignments"] self.assertEqual(len(assignments), 2) completion1 = assignments[0]["completions"][0] self.assertEqual(completion1["completion_status"], "SUBMITTED") self.assertEqual(completion1["evaluation_points"], 5) self.assertEqual(completion1["evaluation_max_points"], 10) self.assertEqual(completion1["evaluation_passed"], False) completion2 = assignments[1]["completions"] self.assertEqual(len(completion2), 0)