Fix unittests

This commit is contained in:
Elia Bieri 2024-10-01 15:38:55 +02:00 committed by Christian Cueni
parent b98b4f8792
commit 0f134b8a76
5 changed files with 129 additions and 27 deletions

View File

@ -8,7 +8,7 @@ import {
exportPersons, exportPersons,
} from "@/services/dashboard"; } from "@/services/dashboard";
import { useUserStore } from "@/stores/user"; import { useUserStore } from "@/stores/user";
import type { DashboardPersonsPageMode, XlsPersonExportRequestData } from "@/types"; import type { DashboardPersonsPageMode } from "@/types";
import { openDataAsXls } from "@/utils/export"; import { openDataAsXls } from "@/utils/export";
import { useRouteQuery } from "@vueuse/router"; import { useRouteQuery } from "@vueuse/router";
import dayjs from "dayjs"; import dayjs from "dayjs";
@ -317,13 +317,13 @@ function personRoleDisplayValue(personCourseSession: DashboardPersonCourseSessio
} }
async function exportData() { async function exportData() {
const requestData: XlsPersonExportRequestData = filteredPersons.value.reduce( const requestData = filteredPersons.value.reduce(
(acc, person) => { (acc, person) => {
acc.courseSessionUserIds.push(person.csu_id); acc.courseSessionUserIds.push(person.csu_id);
return acc; return acc;
}, },
{ {
courseSessionUserIds: [], courseSessionUserIds: [] as string[],
} }
); );
const data = await exportPersons(requestData, userStore.language); const data = await exportPersons(requestData, userStore.language);

View File

@ -35,6 +35,7 @@ from vbv_lernwelt.competence.factories import (
) )
from vbv_lernwelt.competence.models import ActionCompetence from vbv_lernwelt.competence.models import ActionCompetence
from vbv_lernwelt.core.constants import ( from vbv_lernwelt.core.constants import (
TEST_AUSBILDUNGSVERANTWORTLICHER1_USER_ID,
TEST_BERUFSBILDNER1_USER_ID, TEST_BERUFSBILDNER1_USER_ID,
TEST_COURSE_SESSION_BERN_ID, TEST_COURSE_SESSION_BERN_ID,
TEST_COURSE_SESSION_ZURICH_ID, TEST_COURSE_SESSION_ZURICH_ID,
@ -385,6 +386,31 @@ def create_test_course(
), ),
role="BERUFSBILDNER", role="BERUFSBILDNER",
) )
# Add Ausbildungsverantwortlicher
AgentParticipantRelation.objects.create(
agent=User.objects.get(id=TEST_AUSBILDUNGSVERANTWORTLICHER1_USER_ID),
participant=CourseSessionUser.objects.get(
user__id=TEST_STUDENT1_USER_ID,
course_session=cs_bern,
),
role="LEARNING_MENTOR",
)
AgentParticipantRelation.objects.create(
agent=User.objects.get(id=TEST_AUSBILDUNGSVERANTWORTLICHER1_USER_ID),
participant=CourseSessionUser.objects.get(
user__id=TEST_STUDENT2_USER_ID,
course_session=cs_zurich,
),
role="LEARNING_MENTOR",
)
AgentParticipantRelation.objects.create(
agent=User.objects.get(id=TEST_AUSBILDUNGSVERANTWORTLICHER1_USER_ID),
participant=CourseSessionUser.objects.get(
user__id=TEST_STUDENT3_USER_ID,
course_session=cs_bern,
),
role="LEARNING_MENTOR",
)
return course return course

View File

@ -14,6 +14,13 @@ from vbv_lernwelt.course_session.services.export_attendance import export_attend
class ExportBaseTestCase(TestCase): class ExportBaseTestCase(TestCase):
def _check_export(self, wb, expected_data, max_row, max_col): def _check_export(self, wb, expected_data, max_row, max_col):
debug_data = []
for row in wb.active.iter_rows(max_col=max_col, max_row=max_row):
row_data = []
for cell in row:
row_data.append(cell.value)
debug_data.append(row_data)
for row in wb.active.iter_rows(max_col=max_col, max_row=max_row): for row in wb.active.iter_rows(max_col=max_col, max_row=max_row):
for cell in row: for cell in row:
self.assertEqual( self.assertEqual(

View File

@ -30,6 +30,7 @@ def export_persons(
csu_data = [ csu_data = [
create_csu_dict(csu, include_private_data=True) for csu in course_session_users create_csu_dict(csu, include_private_data=True) for csu in course_session_users
] ]
csu_data.sort(key=lambda x: x["last_name"])
_create_sheet( _create_sheet(
wb, wb,
csu_data, csu_data,

View File

@ -4,6 +4,7 @@ from django.utils.translation import activate
from openpyxl import load_workbook from openpyxl import load_workbook
from vbv_lernwelt.core.constants import ( from vbv_lernwelt.core.constants import (
TEST_AUSBILDUNGSVERANTWORTLICHER1_USER_ID,
TEST_STUDENT1_USER_ID, TEST_STUDENT1_USER_ID,
TEST_STUDENT2_USER_ID, TEST_STUDENT2_USER_ID,
TEST_STUDENT3_USER_ID, TEST_STUDENT3_USER_ID,
@ -13,9 +14,9 @@ from vbv_lernwelt.core.constants import (
from vbv_lernwelt.core.create_default_users import create_default_users from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.models import User from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.creators.test_course import create_test_course from vbv_lernwelt.course.creators.test_course import create_test_course
from vbv_lernwelt.course.models import CourseSession from vbv_lernwelt.course.models import CourseSession, CourseSessionUser
from vbv_lernwelt.course_session.tests.test_attendance_export import ExportBaseTestCase from vbv_lernwelt.course_session.tests.test_attendance_export import ExportBaseTestCase
from vbv_lernwelt.dashboard.person_export import export_persons from vbv_lernwelt.dashboard.views import _export_persons_as_xls_data
from vbv_lernwelt.learnpath.models import Circle from vbv_lernwelt.learnpath.models import Circle
@ -26,6 +27,8 @@ class PersonsExportTestCase(ExportBaseTestCase):
create_default_users() create_default_users()
create_test_course(include_vv=False, with_sessions=True) 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_be = CourseSession.objects.get(title="Test Bern 2022 a")
self.course_session_zh = CourseSession.objects.get(title="Test Zürich 2022 a") self.course_session_zh = CourseSession.objects.get(title="Test Zürich 2022 a")
@ -36,10 +39,32 @@ class PersonsExportTestCase(ExportBaseTestCase):
self.test_trainer1 = User.objects.get(id=TEST_TRAINER1_USER_ID) self.test_trainer1 = User.objects.get(id=TEST_TRAINER1_USER_ID)
self.test_trainer2 = User.objects.get(id=TEST_TRAINER2_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_student1 = User.objects.get(id=TEST_STUDENT1_USER_ID)
self.test_student2 = User.objects.get(id=TEST_STUDENT2_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_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_row = [
self.test_student1.first_name, self.test_student1.first_name,
self.test_student1.last_name, self.test_student1.last_name,
@ -91,9 +116,9 @@ class PersonsExportTestCase(ExportBaseTestCase):
return expected_data return expected_data
def _generate_workbook(self, user, course_session_ids): def _generate_workbook(self, user, course_session_ids):
export_data = io.BytesIO( data = _export_persons_as_xls_data(user, course_session_ids)
export_persons(user, course_session_ids, save_as_file=False) self.assertIsNotNone(data)
) export_data = io.BytesIO(data) # type: ignore
return load_workbook(export_data) return load_workbook(export_data)
def _make_header(self): def _make_header(self):
@ -107,10 +132,16 @@ class PersonsExportTestCase(ExportBaseTestCase):
] ]
def test_export_persons(self): def test_export_persons(self):
wb = self._generate_workbook(self.test_trainer1, [self.course_session_be.id]) 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(len(wb.sheetnames), 1)
self.assertEqual(wb.sheetnames[0], "Test Bern 2022 a") self.assertEqual(wb.sheetnames[0], self.default_sheet_name)
wb.active = wb["Test Bern 2022 a"] wb.active = wb[self.default_sheet_name]
data = self._generate_expected_data( data = self._generate_expected_data(
[ [
@ -120,33 +151,64 @@ class PersonsExportTestCase(ExportBaseTestCase):
self.test_trainer1_row, self.test_trainer1_row,
] ]
) )
self._check_export(wb, data, 5, 6)
self._check_export(wb, data, 4, 6) export_course_session_user_ids = [
self.test_student2_csu_zh.id,
wb = self._generate_workbook(self.test_trainer2, [self.course_session_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(len(wb.sheetnames), 1)
self.assertEqual(wb.sheetnames[0], "Test Zürich 2022 a") self.assertEqual(wb.sheetnames[0], self.default_sheet_name)
wb.active = wb["Test Zürich 2022 a"] wb.active = wb[self.default_sheet_name]
data = self._generate_expected_data( data = self._generate_expected_data(
[self.test_student2_row, self.test_trainer2_row] [self.test_student2_row, self.test_trainer2_row]
) )
self._check_export(wb, data, 3, 6) self._check_export(wb, data, 3, 6)
def test_cannot_export_other_session(self): def test_can_only_export_with_role(self):
wb = self._generate_workbook(self.test_trainer1, [self.course_session_zh.id]) 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(len(wb.sheetnames), 1)
self.assertEqual(wb.sheetnames[0], "Test Zürich 2022 a") self.assertEqual(wb.sheetnames[0], self.default_sheet_name)
wb.active = wb["Test Zürich 2022 a"] wb.active = wb[self.default_sheet_name]
self._check_export(wb, [[None] * 6], 1, 6) 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): def test_export_in_fr(self):
activate("fr") activate("fr")
wb = self._generate_workbook(self.test_trainer1, [self.course_session_be.id]) 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(len(wb.sheetnames), 1)
self.assertEqual(wb.sheetnames[0], "Test Bern 2022 a") self.assertEqual(wb.sheetnames[0], self.default_sheet_name)
wb.active = wb["Test Bern 2022 a"] wb.active = wb[self.default_sheet_name]
header = [ header = [
"Prénom", "Prénom",
@ -165,10 +227,16 @@ class PersonsExportTestCase(ExportBaseTestCase):
def test_export_in_it(self): def test_export_in_it(self):
activate("it") activate("it")
wb = self._generate_workbook(self.test_trainer1, [self.course_session_be.id]) 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(len(wb.sheetnames), 1)
self.assertEqual(wb.sheetnames[0], "Test Bern 2022 a") self.assertEqual(wb.sheetnames[0], self.default_sheet_name)
wb.active = wb["Test Bern 2022 a"] wb.active = wb[self.default_sheet_name]
header = [ header = [
"Nome", "Nome",