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.learnpath.creators import create_course_profiles class CourseGraphQLTestCase(TestCase): def setUp(self) -> None: create_default_users() create_course_profiles() create_versicherungsvermittlerin_course() user = User.objects.get(username="student-vv@eiger-versicherungen.ch") request = RequestFactory().get("/") request.user = user self.client = Client(schema=schema, context_value=request) def test_query(self): 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 = self.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(["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 = self.client.execute(mutation, variables={"input": input}) self.assertIsNone(mutation_result.get("errors")) second_query_result = self.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(["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)