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

120 lines
4.0 KiB
Python

from datetime import timedelta
from django.utils import timezone
from graphene_django.utils import GraphQLTestCase
from vbv_lernwelt.course.models import CourseSessionUser
from vbv_lernwelt.course_session.services.attendance import AttendanceUserStatus
from vbv_lernwelt.dashboard.tests.graphql.utils import (
add_course_session_user,
create_attendance_course,
create_circle,
create_course,
create_course_session,
create_user,
create_course_session_group,
)
class DashboardAttendanceTestCase(GraphQLTestCase):
GRAPHQL_URL = "/server/graphql/"
def test_attendance_day_presences(self):
# GIVEN
course, course_page = create_course("Test Course")
course_session = create_course_session(course=course, title="Test Bern 2022 a")
supervisor = create_user("supervisor")
create_course_session_group(course_session=course_session, user=supervisor)
circle, _ = create_circle(title="Test Circle", course_page=course_page)
m1 = create_user("member_1")
add_course_session_user(
course_session=course_session,
user=m1,
role=CourseSessionUser.Role.MEMBER,
)
m2 = create_user("member_2")
add_course_session_user(
course_session=course_session,
user=m2,
role=CourseSessionUser.Role.MEMBER,
)
m3 = create_user("member_3")
add_course_session_user(
course_session=course_session,
user=m3,
role=CourseSessionUser.Role.MEMBER,
)
e1 = create_user("expert_1")
add_course_session_user(
course_session=course_session,
user=e1,
role=CourseSessionUser.Role.EXPERT,
)
attendance_user_list = [
{"user_id": str(m1.id), "status": AttendanceUserStatus.PRESENT.value},
{"user_id": str(m2.id), "status": AttendanceUserStatus.ABSENT.value},
]
due_date_end = timezone.now() - timedelta(hours=2)
attendance_course = create_attendance_course(
course_session=course_session,
circle=circle,
attendance_user_list=attendance_user_list,
due_date_end=due_date_end,
)
self.client.force_login(supervisor)
query = f"""
query($course_id: ID!) {{
course_statistics(course_id: $course_id) {{
attendance_day_presences{{
summary{{
days_completed
participants_present
}}
records{{
course_session_id
generation
circle_id
due_date
participants_present
participants_total
cockpit_url
}}
}}
}}
}}
"""
# WHEN
response = self.query(query, variables={"course_id": str(course.id)})
self.assertResponseNoErrors(response)
data = response.json()["data"]
attendance_day_presences = data["course_statistics"]["attendance_day_presences"]
record = attendance_day_presences["records"][0]
self.assertEqual(record["course_session_id"], str(course_session.id))
self.assertEqual(record["generation"], "2023")
self.assertEqual(record["participants_present"], 1)
self.assertEqual(record["participants_total"], 3)
self.assertEqual(
record["cockpit_url"],
f"/course/test-lehrgang/cockpit/attendance?id={attendance_course.learning_content.id}&courseSessionId={course_session.id}",
)
summary = attendance_day_presences["summary"]
self.assertEqual(summary["days_completed"], 1)
self.assertEqual(summary["participants_present"], 34)