from django.test import TestCase 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 CourseSession, CourseCompletion 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 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": "PRESENT"}] ) attendance_course = CourseSessionAttendanceCourse.objects.get( id=self.attendance_course.id ) self.assertEqual( attendance_course.attendance_user_list[0]["user_id"], student.id ) self.assertEqual( attendance_course.attendance_user_list, [ { "email": "test-student1@example.com", "status": "PRESENT", "user_id": -21, "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": "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_key, self.attendance_course.learning_content.translation_key ) self.assertEqual( cc.page_slug, "test-lehrgang-lp-circle-fahrzeug-lc-präsenzkurs-fahrzeug" ) 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": "-21", "last_name": "Student1", "first_name": "Test", } ] self.attendance_course.save() mark_course_completion( page_key=self.attendance_course.learning_content.translation_key, 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_key, self.attendance_course.learning_content.translation_key ) self.assertEqual( cc.page_slug, "test-lehrgang-lp-circle-fahrzeug-lc-präsenzkurs-fahrzeug" )