185 lines
6.1 KiB
Python
185 lines
6.1 KiB
Python
import io
|
|
|
|
from django.utils.translation import activate
|
|
from openpyxl import load_workbook
|
|
|
|
from vbv_lernwelt.core.constants import (
|
|
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
|
|
from vbv_lernwelt.course_session.tests.test_attendance_export import ExportBaseTestCase
|
|
from vbv_lernwelt.dashboard.person_export import export_persons
|
|
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.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_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_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):
|
|
export_data = io.BytesIO(
|
|
export_persons(user, course_session_ids, save_as_file=False)
|
|
)
|
|
return load_workbook(export_data)
|
|
|
|
def _make_header(self):
|
|
return [
|
|
"Vorname",
|
|
"Nachname",
|
|
"Email",
|
|
"Lehrvertragsnummer",
|
|
"Telefon",
|
|
"Rolle",
|
|
]
|
|
|
|
def test_export_persons(self):
|
|
wb = self._generate_workbook(self.test_trainer1, [self.course_session_be.id])
|
|
self.assertEqual(len(wb.sheetnames), 1)
|
|
self.assertEqual(wb.sheetnames[0], "Test Bern 2022 a")
|
|
wb.active = wb["Test Bern 2022 a"]
|
|
|
|
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, 4, 6)
|
|
|
|
wb = self._generate_workbook(self.test_trainer2, [self.course_session_zh.id])
|
|
self.assertEqual(len(wb.sheetnames), 1)
|
|
self.assertEqual(wb.sheetnames[0], "Test Zürich 2022 a")
|
|
wb.active = wb["Test Zürich 2022 a"]
|
|
|
|
data = self._generate_expected_data(
|
|
[self.test_student2_row, self.test_trainer2_row]
|
|
)
|
|
self._check_export(wb, data, 3, 6)
|
|
|
|
def test_cannot_export_other_session(self):
|
|
wb = self._generate_workbook(self.test_trainer1, [self.course_session_zh.id])
|
|
self.assertEqual(len(wb.sheetnames), 1)
|
|
self.assertEqual(wb.sheetnames[0], "Test Zürich 2022 a")
|
|
wb.active = wb["Test Zürich 2022 a"]
|
|
|
|
self._check_export(wb, [[None] * 6], 1, 6)
|
|
|
|
def test_export_in_fr(self):
|
|
activate("fr")
|
|
wb = self._generate_workbook(self.test_trainer1, [self.course_session_be.id])
|
|
self.assertEqual(len(wb.sheetnames), 1)
|
|
self.assertEqual(wb.sheetnames[0], "Test Bern 2022 a")
|
|
wb.active = wb["Test Bern 2022 a"]
|
|
|
|
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")
|
|
wb = self._generate_workbook(self.test_trainer1, [self.course_session_be.id])
|
|
self.assertEqual(len(wb.sheetnames), 1)
|
|
self.assertEqual(wb.sheetnames[0], "Test Bern 2022 a")
|
|
wb.active = wb["Test Bern 2022 a"]
|
|
|
|
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")
|