vbv/server/vbv_lernwelt/dashboard/tests/test_export.py

253 lines
8.9 KiB
Python

import io
from django.utils.translation import activate
from openpyxl import load_workbook
from vbv_lernwelt.core.constants import (
TEST_AUSBILDUNGSVERANTWORTLICHER1_USER_ID,
TEST_STUDENT1_USER_ID,
TEST_STUDENT2_USER_ID,
TEST_STUDENT3_USER_ID,
TEST_TRAINER1_USER_ID,
TEST_TRAINER2_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 CourseSession, CourseSessionUser
from vbv_lernwelt.course_session.tests.test_attendance_export import ExportBaseTestCase
from vbv_lernwelt.dashboard.views import _export_persons_as_xls_data
from vbv_lernwelt.learnpath.models import Circle
class PersonsExportTestCase(ExportBaseTestCase):
def setUp(self):
super().setUp()
create_default_users()
create_test_course(include_vv=False, with_sessions=True)
self.default_sheet_name = "Sheet"
self.course_session_be = CourseSession.objects.get(title="Test Bern 2022 a")
self.course_session_zh = CourseSession.objects.get(title="Test Zürich 2022 a")
self.circle_fahrzeug = Circle.objects.get(
slug="test-lehrgang-lp-circle-fahrzeug"
)
self.circle_reisen = Circle.objects.get(slug="test-lehrgang-lp-circle-fahrzeug")
self.test_trainer1 = User.objects.get(id=TEST_TRAINER1_USER_ID)
self.test_trainer2 = User.objects.get(id=TEST_TRAINER2_USER_ID)
self.test_ausbildungsverantwortlicher1 = User.objects.get(
id=TEST_AUSBILDUNGSVERANTWORTLICHER1_USER_ID
)
self.test_student1 = User.objects.get(id=TEST_STUDENT1_USER_ID)
self.test_student2 = User.objects.get(id=TEST_STUDENT2_USER_ID)
self.test_student3 = User.objects.get(id=TEST_STUDENT3_USER_ID)
self.test_student1_csu_be = CourseSessionUser.objects.get(
user=self.test_student1, course_session=self.course_session_be
)
self.test_student2_csu_be = CourseSessionUser.objects.get(
user=self.test_student2, course_session=self.course_session_be
)
self.test_student2_csu_zh = CourseSessionUser.objects.get(
user=self.test_student2, course_session=self.course_session_zh
)
self.test_student3_csu_be = CourseSessionUser.objects.get(
user=self.test_student3, course_session=self.course_session_be
)
self.test_trainer1_csu_be = CourseSessionUser.objects.get(
user=self.test_trainer1, course_session=self.course_session_be
)
self.test_trainer2_csu_zh = CourseSessionUser.objects.get(
user=self.test_trainer2, course_session=self.course_session_zh
)
self.test_student1_row = [
self.test_student1.first_name,
self.test_student1.last_name,
self.test_student1.email,
None,
None,
"Teilnehmer",
]
self.test_student2_row = [
self.test_student2.first_name,
self.test_student2.last_name,
self.test_student2.email,
None,
None,
"Teilnehmer",
]
self.test_student3_row = [
self.test_student3.first_name,
self.test_student3.last_name,
self.test_student3.email,
None,
None,
"Teilnehmer",
]
self.test_trainer1_row = [
self.test_trainer1.first_name,
self.test_trainer1.last_name,
self.test_trainer1.email,
None,
None,
"Trainer",
]
self.test_trainer2_row = [
self.test_trainer2.first_name,
self.test_trainer2.last_name,
self.test_trainer2.email,
None,
None,
"Trainer",
]
def _generate_expected_data(self, rows):
expected_data = [
self._make_header(),
]
for r in rows:
expected_data.append(r)
return expected_data
def _generate_workbook(self, user, course_session_ids):
data = _export_persons_as_xls_data(user, course_session_ids)
self.assertIsNotNone(data)
export_data = io.BytesIO(data) # type: ignore
return load_workbook(export_data)
def _make_header(self):
return [
"Vorname",
"Nachname",
"Email",
"Lehrvertragsnummer",
"Telefon",
"Rolle",
]
def test_export_persons(self):
export_course_session_user_ids = [
self.test_student1_csu_be.id,
self.test_student2_csu_be.id,
self.test_student3_csu_be.id,
self.test_trainer1_csu_be.id,
]
wb = self._generate_workbook(self.test_trainer1, export_course_session_user_ids)
self.assertEqual(len(wb.sheetnames), 1)
self.assertEqual(wb.sheetnames[0], self.default_sheet_name)
wb.active = wb[self.default_sheet_name]
data = self._generate_expected_data(
[
self.test_student1_row,
self.test_student2_row,
self.test_student3_row,
self.test_trainer1_row,
]
)
self._check_export(wb, data, 5, 6)
export_course_session_user_ids = [
self.test_student2_csu_zh.id,
self.test_trainer2_csu_zh.id,
]
wb = self._generate_workbook(self.test_trainer2, export_course_session_user_ids)
self.assertEqual(len(wb.sheetnames), 1)
self.assertEqual(wb.sheetnames[0], self.default_sheet_name)
wb.active = wb[self.default_sheet_name]
data = self._generate_expected_data(
[self.test_student2_row, self.test_trainer2_row]
)
self._check_export(wb, data, 3, 6)
def test_can_only_export_with_role(self):
csu = [
self.test_student1_csu_be.id,
self.test_student2_csu_be.id,
self.test_student3_csu_be.id,
self.test_student2_csu_zh.id,
]
wb = self._generate_workbook(self.test_trainer2, csu)
self.assertEqual(len(wb.sheetnames), 1)
self.assertEqual(wb.sheetnames[0], self.default_sheet_name)
wb.active = wb[self.default_sheet_name]
data = self._generate_expected_data([self.test_student2_row])
self._check_export(wb, data, 1, 6)
def test_can_only_export_with_agent_participant_relation(self):
csu = [
self.test_student1_csu_be.id,
self.test_student2_csu_be.id,
self.test_student3_csu_be.id,
self.test_student2_csu_zh.id,
]
wb = self._generate_workbook(self.test_ausbildungsverantwortlicher1, csu)
self.assertEqual(len(wb.sheetnames), 1)
self.assertEqual(wb.sheetnames[0], self.default_sheet_name)
wb.active = wb[self.default_sheet_name]
data = self._generate_expected_data([self.test_student2_row])
self._check_export(wb, data, 1, 6)
def test_export_in_fr(self):
activate("fr")
export_course_session_user_ids = [
self.test_student1_csu_be.id,
self.test_student2_csu_be.id,
self.test_student3_csu_be.id,
self.test_trainer1_csu_be.id,
]
wb = self._generate_workbook(self.test_trainer1, export_course_session_user_ids)
self.assertEqual(len(wb.sheetnames), 1)
self.assertEqual(wb.sheetnames[0], self.default_sheet_name)
wb.active = wb[self.default_sheet_name]
header = [
"Prénom",
"Nom de famille",
"E-mail",
"Numéro de contrat d'apprentissage",
"Téléphone",
"Rôle",
]
self.assertEqual([cell.value for cell in wb.active[1]], header)
self.assertEqual(wb.active.cell(row=2, column=6).value, "Participant")
self.assertEqual(
wb.active.cell(row=5, column=6).value, "Formateur / Formatrice"
)
def test_export_in_it(self):
activate("it")
export_course_session_user_ids = [
self.test_student1_csu_be.id,
self.test_student2_csu_be.id,
self.test_student3_csu_be.id,
self.test_trainer1_csu_be.id,
]
wb = self._generate_workbook(self.test_trainer1, export_course_session_user_ids)
self.assertEqual(len(wb.sheetnames), 1)
self.assertEqual(wb.sheetnames[0], self.default_sheet_name)
wb.active = wb[self.default_sheet_name]
header = [
"Nome",
"Cognome",
"Email",
"Numero di contratto di tirocinio",
"Telefono",
"Ruolo",
]
self.assertEqual([cell.value for cell in wb.active[1]], header)
self.assertEqual(wb.active.cell(row=2, column=6).value, "Partecipante")
self.assertEqual(wb.active.cell(row=5, column=6).value, "Trainer")