feat: add course session props
This commit is contained in:
parent
09181d0e72
commit
3925d074ee
|
|
@ -1,5 +1,6 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
|
||||||
|
from vbv_lernwelt.course.models import CourseSession, CourseSessionUser
|
||||||
from vbv_lernwelt.dashboard.graphql.types.attendance import (
|
from vbv_lernwelt.dashboard.graphql.types.attendance import (
|
||||||
attendance_day_presences,
|
attendance_day_presences,
|
||||||
AttendanceDayPresences,
|
AttendanceDayPresences,
|
||||||
|
|
@ -8,6 +9,7 @@ from vbv_lernwelt.dashboard.graphql.types.feedback import (
|
||||||
feedback_responses,
|
feedback_responses,
|
||||||
FeedbackResponses,
|
FeedbackResponses,
|
||||||
)
|
)
|
||||||
|
from vbv_lernwelt.learnpath.models import Circle
|
||||||
|
|
||||||
|
|
||||||
class CourseSessionData(graphene.ObjectType):
|
class CourseSessionData(graphene.ObjectType):
|
||||||
|
|
@ -41,5 +43,52 @@ class CourseDashboardType(graphene.ObjectType):
|
||||||
return feedback_responses(root.course_id, info.context.user)
|
return feedback_responses(root.course_id, info.context.user)
|
||||||
|
|
||||||
def resolve_course_session_properties(root, info):
|
def resolve_course_session_properties(root, info):
|
||||||
pass
|
course_session_data = []
|
||||||
# return course_session_properties(root.course_id, info.context.user)
|
circle_data = []
|
||||||
|
generations = set()
|
||||||
|
|
||||||
|
course_sessions = CourseSession.objects.filter(
|
||||||
|
coursesessionuser__user=info.context.user,
|
||||||
|
coursesessionuser__role=CourseSessionUser.Role.SESSION_SUPERVISOR,
|
||||||
|
course_id=root.course_id,
|
||||||
|
)
|
||||||
|
|
||||||
|
for course_session in course_sessions:
|
||||||
|
course_session_data.append(
|
||||||
|
CourseSessionData(
|
||||||
|
session_id=course_session.id,
|
||||||
|
session_title=course_session.title,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
generations.add(course_session.generation)
|
||||||
|
|
||||||
|
# Get all circles for this course session
|
||||||
|
siblings = (
|
||||||
|
course_session.course.get_learning_path()
|
||||||
|
.get_descendants()
|
||||||
|
.live()
|
||||||
|
.specific()
|
||||||
|
)
|
||||||
|
|
||||||
|
circles = []
|
||||||
|
for sibling in siblings:
|
||||||
|
if sibling.specific_class == Circle:
|
||||||
|
circles.append(sibling.specific)
|
||||||
|
|
||||||
|
for circle in circles:
|
||||||
|
circle_data.append(
|
||||||
|
CircleData(
|
||||||
|
circle_id=circle.id,
|
||||||
|
circle_title=circle.title,
|
||||||
|
experts=[
|
||||||
|
f"{su.user.first_name} {su.user.last_name}"
|
||||||
|
for su in circle.expert.all()
|
||||||
|
],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return CourseSessionProperties(
|
||||||
|
sessions=course_session_data,
|
||||||
|
generations=list(generations),
|
||||||
|
circles=circle_data,
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ from graphene_django.utils import GraphQLTestCase
|
||||||
from vbv_lernwelt.course.models import CourseSessionUser
|
from vbv_lernwelt.course.models import CourseSessionUser
|
||||||
from vbv_lernwelt.dashboard.tests.graphql.utils import (
|
from vbv_lernwelt.dashboard.tests.graphql.utils import (
|
||||||
add_course_session_user,
|
add_course_session_user,
|
||||||
|
create_circle,
|
||||||
create_course,
|
create_course,
|
||||||
create_course_session,
|
create_course_session,
|
||||||
create_user,
|
create_user,
|
||||||
|
|
@ -15,7 +16,7 @@ class DashboardTestCase(GraphQLTestCase):
|
||||||
def test_course_dashboard(self):
|
def test_course_dashboard(self):
|
||||||
# GIVEN
|
# GIVEN
|
||||||
supervisor = create_user("supervisor")
|
supervisor = create_user("supervisor")
|
||||||
course, _ = create_course("Test Course")
|
course, course_page = create_course("Test Course")
|
||||||
course_session = create_course_session(course=course, title="Test Bern 2022 a")
|
course_session = create_course_session(course=course, title="Test Bern 2022 a")
|
||||||
add_course_session_user(
|
add_course_session_user(
|
||||||
course_session=course_session,
|
course_session=course_session,
|
||||||
|
|
@ -33,6 +34,17 @@ class DashboardTestCase(GraphQLTestCase):
|
||||||
role=CourseSessionUser.Role.MEMBER,
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
circle, _ = create_circle(title="Test Circle", course_page=course_page)
|
||||||
|
|
||||||
|
# expert
|
||||||
|
expert = create_user("expert")
|
||||||
|
expert_session_user = add_course_session_user(
|
||||||
|
course_session=some_course_session,
|
||||||
|
user=expert,
|
||||||
|
role=CourseSessionUser.Role.EXPERT,
|
||||||
|
)
|
||||||
|
expert_session_user.expert.add(circle)
|
||||||
|
|
||||||
self.client.force_login(supervisor)
|
self.client.force_login(supervisor)
|
||||||
|
|
||||||
query = f"""
|
query = f"""
|
||||||
|
|
@ -40,6 +52,18 @@ class DashboardTestCase(GraphQLTestCase):
|
||||||
course_dashboard {{
|
course_dashboard {{
|
||||||
course_id
|
course_id
|
||||||
course_title
|
course_title
|
||||||
|
course_session_properties{{
|
||||||
|
sessions{{
|
||||||
|
session_id
|
||||||
|
session_title
|
||||||
|
}}
|
||||||
|
generations
|
||||||
|
circles{{
|
||||||
|
circle_id
|
||||||
|
circle_title
|
||||||
|
experts
|
||||||
|
}}
|
||||||
|
}}
|
||||||
}}
|
}}
|
||||||
}}
|
}}
|
||||||
"""
|
"""
|
||||||
|
|
@ -56,6 +80,28 @@ class DashboardTestCase(GraphQLTestCase):
|
||||||
self.assertEqual(course_dashboard[0]["course_id"], str(course.id))
|
self.assertEqual(course_dashboard[0]["course_id"], str(course.id))
|
||||||
self.assertEqual(course_dashboard[0]["course_title"], str(course.title))
|
self.assertEqual(course_dashboard[0]["course_title"], str(course.title))
|
||||||
|
|
||||||
|
session_properties = course_dashboard[0]["course_session_properties"]
|
||||||
|
self.assertEqual(len(session_properties["sessions"]), 1)
|
||||||
|
self.assertEqual(
|
||||||
|
session_properties["sessions"][0]["session_id"], str(course_session.id)
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
session_properties["sessions"][0]["session_title"],
|
||||||
|
str(course_session.title),
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(len(session_properties["generations"]), 1)
|
||||||
|
self.assertEqual(
|
||||||
|
session_properties["generations"][0], str(course_session.generation)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(len(session_properties["circles"]), 1)
|
||||||
|
self.assertEqual(session_properties["circles"][0]["circle_id"], str(circle.id))
|
||||||
|
self.assertEqual(
|
||||||
|
session_properties["circles"][0]["circle_title"], str(circle.title)
|
||||||
|
)
|
||||||
|
self.assertEqual(session_properties["circles"][0]["experts"], ["Test Expert"])
|
||||||
|
|
||||||
def test_course_dashboard_id(self):
|
def test_course_dashboard_id(self):
|
||||||
# GIVEN
|
# GIVEN
|
||||||
supervisor = create_user("supervisor")
|
supervisor = create_user("supervisor")
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
||||||
CircleFactory,
|
CircleFactory,
|
||||||
LearningContentAttendanceCourseFactory,
|
LearningContentAttendanceCourseFactory,
|
||||||
LearningPathFactory,
|
LearningPathFactory,
|
||||||
|
TopicFactory,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -43,6 +44,8 @@ def create_user(username: str) -> User:
|
||||||
password=make_password("test"),
|
password=make_password("test"),
|
||||||
email=f"{username}@example.com",
|
email=f"{username}@example.com",
|
||||||
language="de",
|
language="de",
|
||||||
|
first_name="Test",
|
||||||
|
last_name=username.capitalize(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -72,6 +75,8 @@ def create_circle(
|
||||||
if not learning_path:
|
if not learning_path:
|
||||||
learning_path = LearningPathFactory(title="Test Lernpfad", parent=course_page)
|
learning_path = LearningPathFactory(title="Test Lernpfad", parent=course_page)
|
||||||
|
|
||||||
|
TopicFactory(title="Circle Test Topic", is_visible=False, parent=learning_path)
|
||||||
|
|
||||||
circle = CircleFactory(
|
circle = CircleFactory(
|
||||||
title=title, parent=learning_path, description="Circle Description"
|
title=title, parent=learning_path, description="Circle Description"
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue