from django.test import RequestFactory, TestCase from graphene.test import Client from vbv_lernwelt.core.admin import User from vbv_lernwelt.core.create_default_users import create_default_users from vbv_lernwelt.core.schema import schema from vbv_lernwelt.course.management.commands.create_default_courses import ( create_versicherungsvermittlerin_course, ) from vbv_lernwelt.course.models import CourseSessionUser from vbv_lernwelt.learnpath.creators import create_course_profiles from vbv_lernwelt.learnpath.models import CourseProfile class CourseGraphQLTestCase(TestCase): def setUp(self) -> None: create_default_users() create_course_profiles() create_versicherungsvermittlerin_course() def test_update_course_profile(self): user = User.objects.get(username="student-vv@eiger-versicherungen.ch") request = RequestFactory().get("/") request.user = user client = Client(schema=schema, context_value=request) query = """ query CourseQuery($slug: String!) { course(slug: $slug){ id profiles course_session_users { id __typename chosen_profile course_session { id } } } } """ slug = "versicherungsvermittler-in" variables = {"slug": slug} result = client.execute(query, variables=variables) self.assertIsNone(result.get("errors")) data = result.get("data") course = data.get("course") profiles = course.get("profiles") self.assertEqual( set(profiles), set(["all", "nichtleben", "leben", "krankenzusatzversicherung"]), ) course_session_user = course.get("course_session_users")[0] chosen_profile = course_session_user.get("chosen_profile") self.assertEqual(chosen_profile, "") mutation = """ mutation UpdateCourseSessionProfile($input: CourseSessionProfileMutationInput!) { update_course_session_profile(input: $input) { clientMutationId result { __typename ... on UpdateCourseProfileSuccess { user { id chosen_profile } } ... on UpdateCourseProfileError { message } } } } """ profile = "nichtleben" input = {"course_profile": profile, "course_slug": slug} mutation_result = client.execute(mutation, variables={"input": input}) self.assertIsNone(mutation_result.get("errors")) second_query_result = client.execute(query, variables=variables) self.assertIsNone(second_query_result.get("errors")) data = second_query_result.get("data") course = data.get("course") profiles = course.get("profiles") self.assertEqual( set(profiles), set(["all", "nichtleben", "leben", "krankenzusatzversicherung"]), ) course_session_user = course.get("course_session_users")[0] chosen_profile = course_session_user.get("chosen_profile") self.assertEqual(chosen_profile, profile) def test_mentor_profile_view(self): user = User.objects.get(username="test-mentor1@example.com") request = RequestFactory().get("/") request.user = user client = Client(schema=schema, context_value=request) query = """ query courseQuery($slug: String!, $user: String) { course(slug: $slug) { id title slug category_name profiles course_session_users(id: $user) { id __typename chosen_profile course_session { id __typename } } __typename } } """ student = User.objects.get(username="student-vv@eiger-versicherungen.ch") slug = "versicherungsvermittler-in" student_id = str(student.id) variables = {"slug": slug, "user": student_id} print(variables) result = client.execute(query, variables=variables) self.assertIsNone(result.get("errors")) data = result.get("data") course = data.get("course") profiles = course.get("profiles") self.assertEqual( set(profiles), set(["all", "nichtleben", "leben", "krankenzusatzversicherung"]), ) course_session_user = course.get("course_session_users")[0] chosen_profile = course_session_user.get("chosen_profile") self.assertEqual(chosen_profile, "") csu = CourseSessionUser.objects.get( course_session__course__slug=slug, user=student ) course_profile = CourseProfile.objects.get(code="nichtleben") csu.chosen_profile = course_profile csu.save() second_result = client.execute(query, variables=variables) self.assertIsNone(second_result.get("errors")) data = second_result.get("data") course = data.get("course") profiles = course.get("profiles") self.assertEqual( set(profiles), set(["all", "nichtleben", "leben", "krankenzusatzversicherung"]), ) course_session_user = course.get("course_session_users")[0] chosen_profile = course_session_user.get("chosen_profile") self.assertEqual(chosen_profile, "nichtleben")