from graphene_django.utils import GraphQLTestCase from vbv_lernwelt.course.models import CourseSessionUser from vbv_lernwelt.dashboard.tests.graphql.utils import ( create_course, create_course_session, create_user, add_course_session_user, create_course_session_group, add_course_session_group_supervisor, ) class DashboardTestCase(GraphQLTestCase): GRAPHQL_URL = "/server/graphql/" def test_dashboard_config(self): # GIVEN course_1, _ = create_course("Test Course 1") course_2, _ = create_course("Test Course 2") cs_1 = create_course_session(course=course_1, title="Test Course 1 Session") cs_2 = create_course_session(course=course_2, title="Test Course 2 Session") # Member of course 1 (via cs_1) # Supervisor of course 2 (via cs_2) supervisor = create_user("supervisor") add_course_session_user( course_session=cs_1, user=supervisor, role=CourseSessionUser.Role.MEMBER ) group = create_course_session_group(course_session=cs_2) add_course_session_group_supervisor(group=group, user=supervisor) self.client.force_login(supervisor) # WHEN query = """query { dashboard_config { id name dashboard_type } } """ response = self.query(query) # THEN self.assertResponseNoErrors(response) dashboard_config = response.json()["data"]["dashboard_config"] self.assertEqual(len(dashboard_config), 3) course_1_config = find_dashboard_config_by_course_id( dashboard_config, course_1.id ) self.assertIsNotNone(course_1_config) self.assertEqual(course_1_config["name"], course_1.title) self.assertEqual(course_1_config["dashboard_type"], "SIMPLE_LIST_DASHBOARD") course_2_config = find_dashboard_config_by_course_id( dashboard_config, course_2.id ) self.assertIsNotNone(course_2_config) self.assertEqual(course_2_config["name"], course_2.title) self.assertEqual(course_2_config["dashboard_type"], "STATISTICS_DASHBOARD") def test_course_statistics_deny_not_allowed_user(self): # GIVEN disallowed_user = create_user("1337_hacker_schorsch") course, _ = create_course("Test Course") create_course_session(course=course, title="Test Course Session") self.client.force_login(disallowed_user) query = f"""query($course_id: ID!) {{ course_statistics(course_id: $course_id) {{ id }} }} """ variables = {"course_id": str(course.id)} # WHEN response = self.query(query, variables=variables) # THEN self.assertResponseNoErrors(response) course_statistics = response.json()["data"]["course_statistics"] self.assertEqual(course_statistics, None) def test_course_statistics_data(self): # GIVEN supervisor = create_user("supervisor") course_1, _ = create_course("Test Course 1") course_2, _ = create_course("Test Course 2") cs_1 = create_course_session(course=course_1, title="Test Course 1 Session") cs_2 = create_course_session(course=course_2, title="Test Course 2 Session") cs_group_1 = create_course_session_group(course_session=cs_1) add_course_session_group_supervisor(group=cs_group_1, user=supervisor) cs_group_2 = create_course_session_group(course_session=cs_2) add_course_session_group_supervisor(group=cs_group_2, user=supervisor) self.client.force_login(supervisor) query = f"""query($course_id: ID!) {{ course_statistics(course_id: $course_id) {{ id course_title }} }} """ variables = {"course_id": str(course_2.id)} # WHEN response = self.query(query, variables=variables) # THEN self.assertResponseNoErrors(response) course_statistics = response.json()["data"]["course_statistics"] self.assertEqual(course_statistics["id"], str(course_2.id)) self.assertEqual(course_statistics["course_title"], course_2.title) def find_dashboard_config_by_course_id(dashboard_configs, course_id): return next( (config for config in dashboard_configs if config["id"] == str(course_id)), None )