108 lines
4.5 KiB
Python
108 lines
4.5 KiB
Python
from django.test import TestCase
|
|
from django.utils import timezone
|
|
|
|
from vbv_lernwelt.assignment.models import AssignmentType
|
|
from vbv_lernwelt.core.create_default_users import create_default_users
|
|
from vbv_lernwelt.course.creators.test_course import create_test_course
|
|
from vbv_lernwelt.course.models import CourseSession
|
|
from vbv_lernwelt.course_session.models import CourseSessionAttendanceCourse, CourseSessionAssignment
|
|
from vbv_lernwelt.importer.services import create_or_update_course_session
|
|
from vbv_lernwelt.learnpath.models import LearningContentAttendanceCourse, LearningContentAssignment
|
|
|
|
TEST_SESSION = {
|
|
"ID": "AG 2023 A",
|
|
"Generation": "2023",
|
|
"Region": "Aargau",
|
|
"Sprache": "de",
|
|
"Klasse": "A",
|
|
"Kickoff Start": "30.08.2023, 09:15",
|
|
"Kickoff Ende": "30.08.2023, 17:00",
|
|
"Kickoff Raum": "E34",
|
|
"Kickoff Standort": "HKV Aarau",
|
|
"Kickoff Adresse": "Bahnhofstrasse 46, 5000, Aarau",
|
|
"Basis Start": "06.09.2023, 09:15",
|
|
"Basis Ende": "06.09.2023, 17:00",
|
|
"Basis Raum": "E34",
|
|
"Basis Standort": "HKV Aarau",
|
|
"Basis Adresse": "Bahnhofstrasse 46, 5000, Aarau",
|
|
"Fahrzeug Start": "08.11.2023, 09:15",
|
|
"Fahrzeug Ende": "08.11.2023, 17:00",
|
|
"Fahrzeug Raum": "E34",
|
|
"Fahrzeug Standort": "HKV Aarau",
|
|
"Fahrzeug Adresse": "Bahnhofstrasse 46, 5000, Aarau",
|
|
"Haushalt Teil 1 Start": "17.01.2024, 09:15",
|
|
"Hauhalt Teil 1 Ende": "17.01.2024, 17:00",
|
|
"Haushalt Teil 1 Raum": "E34",
|
|
"Haushalt Teil 1 Standort": "HKV Aarau",
|
|
"Haushalt Teil 1 Adresse": "Bahnhofstrasse 46, 5000, Aarau",
|
|
"Haushalt Teil 2 Start": "20.03.2024, 09:15",
|
|
"Haushalt Teil 2 Ende": "20.03.2024, 17:00",
|
|
"Haushalt Teil 2 Raum": "E34",
|
|
"Haushalt Teil 2 Standort": "HKV Aarau",
|
|
"Haushalt Teil 2 Adresse": "Bahnhofstrasse 46, 5000, Aarau",
|
|
}
|
|
|
|
TEST_CIRCLES = ["Fahrzeug"]
|
|
|
|
LP_DATA = {
|
|
"Fahrzeug":
|
|
{
|
|
"de": {
|
|
"title": "Fahrzeug",
|
|
"slug": "fahrzeug",
|
|
"presence_course": "fahrzeug-lc-präsenzkurs-fahrzeug",
|
|
"assignments": [
|
|
"fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice",
|
|
"fahrzeug-lc-fahrzeug-mein-erstes-auto",
|
|
]
|
|
},
|
|
},
|
|
}
|
|
|
|
|
|
class EdoniqSessionTrainerImportTestCase(TestCase):
|
|
def setUp(self) -> None:
|
|
create_default_users()
|
|
self.course = create_test_course(with_sessions=False)
|
|
|
|
def test_session_import(self):
|
|
create_or_update_course_session(self.course, TEST_SESSION, "de", circle_keys=TEST_CIRCLES)
|
|
cs = CourseSession.objects.get(import_id="AG 2023 A")
|
|
|
|
self.assertEqual(cs.course, self.course)
|
|
|
|
for circle_name in TEST_CIRCLES:
|
|
self._check_attendance(circle_name, cs)
|
|
self._check_assignments(circle_name, cs)
|
|
|
|
def _check_attendance(self, circle_name: str, cs: CourseSession):
|
|
attendance = LearningContentAttendanceCourse.objects.filter(
|
|
slug=f"{self.course.slug}-lp-circle-{LP_DATA[circle_name]['de']['presence_course']}",
|
|
)
|
|
self.assertEqual(attendance.count(), 1) # only one attendance per circle
|
|
|
|
csac = CourseSessionAttendanceCourse.objects.get(
|
|
course_session=cs, learning_content=attendance.first()
|
|
)
|
|
|
|
self.assertEqual(
|
|
f"{TEST_SESSION[f'{circle_name} Raum']}, {TEST_SESSION[f'{circle_name} Standort']}, {TEST_SESSION[f'{circle_name} Adresse']}",
|
|
csac.location)
|
|
self.assertEqual(f"{TEST_SESSION[f'{circle_name} Start']}",
|
|
timezone.localtime(csac.due_date.start).strftime("%d.%m.%Y, %H:%M"))
|
|
self.assertEqual(f"{TEST_SESSION[f'{circle_name} Ende']}",
|
|
timezone.localtime(csac.due_date.end).strftime("%d.%m.%Y, %H:%M"))
|
|
self.assertEqual("", csac.trainer)
|
|
|
|
def _check_assignments(self, circle_name: str, cs: CourseSession):
|
|
for assignment_slug in LP_DATA[circle_name]["de"]["assignments"]:
|
|
csa = CourseSessionAssignment.objects.get(
|
|
course_session=cs,
|
|
learning_content=LearningContentAssignment.objects.get(
|
|
slug=f"{self.course.slug}-lp-circle-{assignment_slug}"
|
|
),
|
|
)
|
|
if csa.learning_content.assignment_type == AssignmentType.PREP_ASSIGNMENT.value:
|
|
self.assertEqual(f"{TEST_SESSION[f'{circle_name} Start']}",
|
|
timezone.localtime(csa.submission_deadline.end).strftime("%d.%m.%Y, %H:%M"))
|