161 lines
5.4 KiB
Python
161 lines
5.4 KiB
Python
from django.urls import reverse
|
|
from rest_framework import status
|
|
from rest_framework.test import APITestCase
|
|
|
|
from vbv_lernwelt.assignment.models import (
|
|
AssignmentCompletion,
|
|
AssignmentCompletionStatus,
|
|
AssignmentType,
|
|
)
|
|
from vbv_lernwelt.course.creators.test_utils import (
|
|
add_course_session_user,
|
|
create_assignment,
|
|
create_assignment_learning_content,
|
|
create_circle,
|
|
create_course,
|
|
create_course_session,
|
|
create_course_session_assignment,
|
|
create_user,
|
|
)
|
|
from vbv_lernwelt.course.models import CourseSessionUser
|
|
from vbv_lernwelt.learning_mentor.models import LearningMentor
|
|
|
|
|
|
class LearningMentorAPITest(APITestCase):
|
|
def setUp(self) -> None:
|
|
self.course, self.course_page = create_course("Test Course")
|
|
self.course_session = create_course_session(course=self.course, title="Test VV")
|
|
|
|
self.circle, _ = create_circle(title="Circle", course_page=self.course_page)
|
|
|
|
self.assignment = create_assignment(
|
|
course=self.course, assignment_type=AssignmentType.PRAXIS_ASSIGNMENT
|
|
)
|
|
|
|
lca = create_assignment_learning_content(self.circle, self.assignment)
|
|
create_course_session_assignment(
|
|
course_session=self.course_session, learning_content_assignment=lca
|
|
)
|
|
|
|
self.mentor = create_user("mentor")
|
|
self.participant_1 = add_course_session_user(
|
|
self.course_session,
|
|
create_user("participant_1"),
|
|
role=CourseSessionUser.Role.MEMBER,
|
|
)
|
|
self.participant_2 = add_course_session_user(
|
|
self.course_session,
|
|
create_user("participant_2"),
|
|
role=CourseSessionUser.Role.MEMBER,
|
|
)
|
|
self.participant_3 = add_course_session_user(
|
|
self.course_session,
|
|
create_user("participant_3"),
|
|
role=CourseSessionUser.Role.MEMBER,
|
|
)
|
|
|
|
self.url = reverse(
|
|
"mentor_summary", kwargs={"course_session_id": self.course_session.id}
|
|
)
|
|
|
|
def test_api_no_mentor(self) -> None:
|
|
# GIVEN
|
|
self.client.force_login(self.mentor)
|
|
|
|
# WHEN
|
|
response = self.client.get(self.url)
|
|
|
|
# THEN
|
|
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
|
|
|
def test_api_no_participants(self) -> None:
|
|
# GIVEN
|
|
self.client.force_login(self.mentor)
|
|
LearningMentor.objects.create(
|
|
mentor=self.mentor, course=self.course_session.course
|
|
)
|
|
|
|
# WHEN
|
|
response = self.client.get(self.url)
|
|
|
|
# THEN
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
self.assertEqual(response.data["participants"], [])
|
|
self.assertEqual(response.data["praxis_assignments"], [])
|
|
|
|
def test_api_participants(self) -> None:
|
|
# GIVEN
|
|
participants = [self.participant_1, self.participant_2, self.participant_3]
|
|
self.client.force_login(self.mentor)
|
|
mentor = LearningMentor.objects.create(
|
|
mentor=self.mentor,
|
|
course=self.course_session.course,
|
|
)
|
|
mentor.participants.set(participants)
|
|
|
|
# WHEN
|
|
response = self.client.get(self.url)
|
|
|
|
# THEN
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
self.assertEqual(len(response.data["participants"]), len(participants))
|
|
|
|
participant_1 = [
|
|
p
|
|
for p in response.data["participants"]
|
|
if p["id"] == str(self.participant_1.user.id)
|
|
][0]
|
|
self.assertEqual(participant_1["email"], "participant_1@example.com")
|
|
self.assertEqual(participant_1["first_name"], "Test")
|
|
self.assertEqual(participant_1["last_name"], "Participant_1")
|
|
|
|
def test_api_praxis_assignments(self) -> None:
|
|
# GIVEN
|
|
participants = [self.participant_1, self.participant_2, self.participant_3]
|
|
self.client.force_login(self.mentor)
|
|
|
|
mentor = LearningMentor.objects.create(
|
|
mentor=self.mentor,
|
|
course=self.course_session.course,
|
|
)
|
|
mentor.participants.set(participants)
|
|
|
|
AssignmentCompletion.objects.create(
|
|
assignment_user=self.participant_1.user,
|
|
course_session=self.course_session,
|
|
assignment=self.assignment,
|
|
completion_status=AssignmentCompletionStatus.EVALUATION_SUBMITTED.value,
|
|
)
|
|
|
|
AssignmentCompletion.objects.create(
|
|
assignment_user=self.participant_3.user,
|
|
course_session=self.course_session,
|
|
assignment=self.assignment,
|
|
completion_status=AssignmentCompletionStatus.SUBMITTED.value,
|
|
)
|
|
|
|
# WHEN
|
|
response = self.client.get(self.url)
|
|
|
|
# THEN
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
self.assertEqual(len(response.data["praxis_assignments"]), 1)
|
|
|
|
self.assertEqual(
|
|
response.data["circles"],
|
|
[{"id": self.circle.id, "title": self.circle.title}],
|
|
)
|
|
|
|
assignment = response.data["praxis_assignments"][0]
|
|
self.assertEqual(assignment["pending_evaluations"], 1)
|
|
|
|
self.assertEqual(
|
|
assignment["completions"][0]["last_name"], self.participant_3.user.last_name
|
|
)
|
|
self.assertEqual(
|
|
assignment["completions"][1]["last_name"], self.participant_1.user.last_name
|
|
)
|
|
self.assertEqual(
|
|
assignment["completions"][2]["last_name"], self.participant_2.user.last_name
|
|
)
|