vbv/server/vbv_lernwelt/dashboard/tests/graphql/test_dashboard.py

137 lines
4.5 KiB
Python

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
)