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, ) 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 ) create_course_session_group(course_session=cs_2, user=supervisor) self.client.force_login(supervisor) # WHEN query = """query { dashboard_config { id title dashboard_type } } """ response = self.query(query) # THEN self.assertResponseNoErrors(response) dashboard_config = response.json()["data"]["dashboard_config"] self.assertEqual(len(dashboard_config), 2) course_1_config = find_dashboard_config_by_course_id( dashboard_config, course_1.id ) self.assertIsNotNone(course_1_config) self.assertEqual(course_1_config["title"], course_1.title) self.assertEqual(course_1_config["dashboard_type"], "SimpleDashboard") course_2_config = find_dashboard_config_by_course_id( dashboard_config, course_2.id ) self.assertIsNotNone(course_2_config) self.assertEqual(course_2_config["title"], course_2.title) self.assertEqual(course_2_config["dashboard_type"], "StatisticsDashboard") def test_course_statistics_id(self): # GIVEN # TODO: Give this guy the right permissions, once we have them supervisor = create_user("supervisor") course_1, _ = create_course("Test Course 1") course_2, _ = create_course("Test Course 2") create_course_session(course=course_1, title="Test Course 1 Session") create_course_session(course=course_2, title="Test Course 2 Session") self.client.force_login(supervisor) query = f"""query($course_id: ID!) {{ course_statistics(course_id: $course_id) {{ course_id }} }} """ 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(len(course_statistics), 1) self.assertEqual(course_statistics[0]["course_id"], str(course_2.id)) 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 )