Refactor attendance_course code into its own module
This commit is contained in:
parent
eb0b03f413
commit
46b14bd4e7
|
|
@ -0,0 +1,50 @@
|
||||||
|
from vbv_lernwelt.core.models import User
|
||||||
|
from vbv_lernwelt.course.services import mark_course_completion
|
||||||
|
from vbv_lernwelt.course_session.models import CourseSessionAttendanceCourse
|
||||||
|
|
||||||
|
|
||||||
|
def update_attendance_list(
|
||||||
|
attendance_course: CourseSessionAttendanceCourse, attendance_user_list: list
|
||||||
|
):
|
||||||
|
user_id_list_before = attendance_course.attendance_user_list or []
|
||||||
|
|
||||||
|
result_user_list = []
|
||||||
|
for attendance_user in attendance_user_list:
|
||||||
|
u = User.objects.filter(id=attendance_user.get("user_id")).first()
|
||||||
|
if u is not None:
|
||||||
|
result_user_list.append(
|
||||||
|
{
|
||||||
|
"user_id": u.id,
|
||||||
|
"email": u.email,
|
||||||
|
"first_name": u.first_name,
|
||||||
|
"last_name": u.last_name,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
mark_course_completion(
|
||||||
|
page_key=attendance_course.learning_content.translation_key,
|
||||||
|
user=u,
|
||||||
|
course_session=attendance_course.course_session,
|
||||||
|
completion_status="success",
|
||||||
|
)
|
||||||
|
|
||||||
|
attendance_course.attendance_user_list = result_user_list
|
||||||
|
attendance_course.save()
|
||||||
|
|
||||||
|
user_id_list_after = attendance_course.attendance_user_list or []
|
||||||
|
|
||||||
|
user_id_list_removed = [
|
||||||
|
user_id for user_id in user_id_list_before if user_id not in user_id_list_after
|
||||||
|
]
|
||||||
|
|
||||||
|
for user_id in user_id_list_removed:
|
||||||
|
# FIXME: create completion for every user in attendance_user_list
|
||||||
|
u = User.objects.filter(id=user_id).first()
|
||||||
|
if u is not None:
|
||||||
|
mark_course_completion(
|
||||||
|
page_key=attendance_course.learning_content.translation_key,
|
||||||
|
user=u,
|
||||||
|
course_session=attendance_course.course_session,
|
||||||
|
completion_status="fail",
|
||||||
|
)
|
||||||
|
|
||||||
|
return attendance_course
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
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}])
|
||||||
|
|
||||||
|
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",
|
||||||
|
"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}])
|
||||||
|
|
||||||
|
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")
|
||||||
|
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, "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"
|
||||||
|
)
|
||||||
Loading…
Reference in New Issue