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 from vbv_lernwelt.course.models import CourseCompletion, CourseSession 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, ) 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)