import io 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, "MEMBER", ] self.test_student2_row = [ self.test_student2.first_name, self.test_student2.last_name, self.test_student2.email, None, None, "MEMBER", ] self.test_student3_row = [ self.test_student3.first_name, self.test_student3.last_name, self.test_student3.email, None, None, "MEMBER", ] self.test_trainer1_row = [ self.test_trainer1.first_name, self.test_trainer1.last_name, self.test_trainer1.email, None, None, "EXPERT", ] self.test_trainer2_row = [ self.test_trainer2.first_name, self.test_trainer2.last_name, self.test_trainer2.email, None, None, "EXPERT", ] 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)