133 lines
5.3 KiB
Python
133 lines
5.3 KiB
Python
from django.test import TestCase
|
|
|
|
from vbv_lernwelt.core.constants import TEST_STUDENT1_USER_ID
|
|
from vbv_lernwelt.core.create_default_users import create_default_users
|
|
from vbv_lernwelt.core.models import User
|
|
from vbv_lernwelt.course.creators.test_course import (
|
|
create_test_course,
|
|
create_test_uk_circle_fahrzeug,
|
|
)
|
|
from vbv_lernwelt.course.models import (
|
|
CourseCompletion,
|
|
CourseSession,
|
|
CourseSessionUser,
|
|
)
|
|
from vbv_lernwelt.course.services import mark_course_completion
|
|
from vbv_lernwelt.course_session.models import CourseSessionAttendanceCourse
|
|
from vbv_lernwelt.course_session.services.attendance import (
|
|
AttendanceUserStatus,
|
|
update_attendance_list,
|
|
)
|
|
from vbv_lernwelt.learnpath.models import Circle, LearningPath
|
|
from vbv_lernwelt.notify.email.reminders.attendance import get_recipients
|
|
|
|
|
|
class AttendanceServicesTestCase(TestCase):
|
|
def setUp(self):
|
|
create_default_users()
|
|
create_test_course(include_vv=False, with_sessions=True)
|
|
self.course_session = CourseSession.objects.get(title="Test Bern 2022 a")
|
|
self.attendance_course = (
|
|
self.course_session.coursesessionattendancecourse_set.first()
|
|
)
|
|
self.trainer = User.objects.get(username="test-trainer1@example.com")
|
|
self.client.force_login(self.trainer)
|
|
|
|
def test_updateAttendanceList_withSingleUserId_findsDetailsAndStoresResult(self):
|
|
student = User.objects.get(username="test-student1@example.com")
|
|
|
|
update_attendance_list(
|
|
self.attendance_course,
|
|
[{"user_id": student.id, "status": AttendanceUserStatus.PRESENT}],
|
|
)
|
|
|
|
attendance_course = CourseSessionAttendanceCourse.objects.get(
|
|
id=self.attendance_course.id
|
|
)
|
|
self.assertEqual(
|
|
attendance_course.attendance_user_list[0]["user_id"], str(student.id)
|
|
)
|
|
self.assertEqual(
|
|
attendance_course.attendance_user_list,
|
|
[
|
|
{
|
|
"email": "test-student1@example.com",
|
|
"status": "PRESENT",
|
|
"user_id": TEST_STUDENT1_USER_ID,
|
|
"last_name": "Student1",
|
|
"first_name": "Test",
|
|
}
|
|
],
|
|
)
|
|
|
|
def test_updateAttendanceList_willUpdateUserCourseCompletion(self):
|
|
student = User.objects.get(username="test-student1@example.com")
|
|
update_attendance_list(
|
|
self.attendance_course,
|
|
[{"user_id": student.id, "status": AttendanceUserStatus.PRESENT}],
|
|
)
|
|
self.assertEqual(CourseCompletion.objects.count(), 1)
|
|
cc = CourseCompletion.objects.first()
|
|
self.assertEqual(cc.user, student)
|
|
self.assertEqual(cc.completion_status, "SUCCESS")
|
|
self.assertEqual(cc.page_id, self.attendance_course.learning_content.id)
|
|
|
|
def test_updateAttendanceList_withRemovedUser_willUpdateUserCourseCompletion(self):
|
|
student = User.objects.get(username="test-student1@example.com")
|
|
self.attendance_course.attendance_user_list = [
|
|
{
|
|
"email": "test-student1@example.com",
|
|
"status": "PRESENT",
|
|
"user_id": TEST_STUDENT1_USER_ID,
|
|
"last_name": "Student1",
|
|
"first_name": "Test",
|
|
}
|
|
]
|
|
self.attendance_course.save()
|
|
mark_course_completion(
|
|
page=self.attendance_course.learning_content,
|
|
user=student,
|
|
course_session=self.course_session,
|
|
completion_status="SUCCESS",
|
|
)
|
|
update_attendance_list(self.attendance_course, [])
|
|
|
|
self.assertEqual(CourseCompletion.objects.count(), 1)
|
|
cc = CourseCompletion.objects.first()
|
|
self.assertEqual(cc.user, student)
|
|
self.assertEqual(cc.completion_status, "FAIL")
|
|
self.assertEqual(cc.page_id, self.attendance_course.learning_content.id)
|
|
|
|
|
|
class AttendanceReminderTestCase(TestCase):
|
|
def setUp(self):
|
|
create_default_users()
|
|
create_test_course(include_vv=False, with_sessions=True)
|
|
self.course_session = CourseSession.objects.get(title="Test Bern 2022 a")
|
|
self.attendance_course = (
|
|
self.course_session.coursesessionattendancecourse_set.first()
|
|
)
|
|
self.trainer = User.objects.get(username="test-trainer1@example.com")
|
|
self.other_circle_title = "Something different"
|
|
lp = LearningPath.objects.get(title="Test Lernpfad")
|
|
create_test_uk_circle_fahrzeug(lp, title=self.other_circle_title)
|
|
csu = CourseSessionUser.objects.get(user=self.trainer)
|
|
fahrzeug = Circle.objects.get(title="Fahrzeug")
|
|
csu.expert.add(fahrzeug)
|
|
|
|
def test_reminderOnlySendsToMembersAndRelevantExperts(self):
|
|
# promote user to expert, but in another circle
|
|
csu = CourseSessionUser.objects.get(user__email="test-student3@example.com")
|
|
other_circle = Circle.objects.get(title=self.other_circle_title)
|
|
csu.role = CourseSessionUser.Role.EXPERT
|
|
csu.save()
|
|
csu.expert.add(other_circle)
|
|
|
|
expected_csu = {
|
|
"test-student1@example.com",
|
|
"test-student2@example.com",
|
|
"test-trainer1@example.com",
|
|
}
|
|
csus = get_recipients(self.attendance_course)
|
|
self.assertEqual(set([u.user.email for u in csus]), expected_csu)
|