Merged in feature/VBV-689-person-cs-error (pull request #341)

Fix course_sessoins list for person view

Approved-by: Daniel Egger
This commit is contained in:
Christian Cueni 2024-07-04 08:16:06 +00:00
commit 2fe182b3be
2 changed files with 88 additions and 3 deletions

View File

@ -1,4 +1,6 @@
from django.test import TestCase
from django.urls import reverse
from rest_framework.test import APITestCase
from vbv_lernwelt.assignment.models import (
Assignment,
@ -9,7 +11,11 @@ from vbv_lernwelt.core.constants import (
TEST_COURSE_SESSION_BERN_ID,
TEST_COURSE_SESSION_ZURICH_ID,
TEST_STUDENT1_USER_ID,
TEST_STUDENT2_USER_ID,
TEST_STUDENT3_USER_ID,
TEST_SUPERVISOR1_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
@ -541,3 +547,79 @@ class ExportXlsTestCase(TestCase):
[(TEST_COURSE_SESSION_ZURICH_ID, [circle_fahrzeug.id, circle_reisen.id])],
allowed_circles,
)
class PersonsTestCase(APITestCase):
def setUp(self):
create_default_users()
create_test_course(include_uk=True, include_vv=False, with_sessions=True)
self.student1 = User.objects.get(id=TEST_STUDENT1_USER_ID)
self.csu1_student1 = CourseSessionUser.objects.get(
user=self.student1, course_session__id=TEST_COURSE_SESSION_BERN_ID
)
self.student2 = User.objects.get(id=TEST_STUDENT2_USER_ID)
self.csu1_student2 = CourseSessionUser.objects.get(
user=self.student2, course_session__id=TEST_COURSE_SESSION_ZURICH_ID
)
def test_get_course_sessions_with_roles_for_trainer(self):
trainer = User.objects.get(id=TEST_TRAINER1_USER_ID)
self.client.force_login(trainer)
url = reverse(
"get_dashboard_persons",
)
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 4)
user_ids = [str(user["user_id"]) for user in response.data]
self.assertCountEqual(
user_ids,
[
TEST_TRAINER1_USER_ID,
TEST_STUDENT1_USER_ID,
TEST_STUDENT2_USER_ID,
TEST_STUDENT3_USER_ID,
],
)
user1_index = user_ids.index(TEST_STUDENT1_USER_ID)
self.assertEqual(
response.data[user1_index]["course_sessions"][0]["id"],
str(CourseSession.objects.get(id=TEST_COURSE_SESSION_BERN_ID).id),
)
def test_get_course_sessions_with_roles_for_supervisor(self):
supervisor = User.objects.get(id=TEST_SUPERVISOR1_USER_ID)
self.client.force_login(supervisor)
url = reverse(
"get_dashboard_persons",
)
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 5)
user_ids = [str(user["user_id"]) for user in response.data]
self.assertCountEqual(
user_ids,
[
TEST_TRAINER1_USER_ID,
TEST_STUDENT1_USER_ID,
TEST_STUDENT2_USER_ID,
TEST_STUDENT3_USER_ID,
TEST_TRAINER2_USER_ID,
],
)
user2_index = user_ids.index(TEST_STUDENT2_USER_ID)
user2_cs = response.data[user2_index]["course_sessions"]
self.assertEqual(len(user2_cs), 2)
user2_cs_ids = [cs["id"] for cs in user2_cs]
self.assertCountEqual(
user2_cs_ids,
[str(TEST_COURSE_SESSION_ZURICH_ID), str(TEST_COURSE_SESSION_BERN_ID)],
)

View File

@ -173,6 +173,7 @@ def _create_person_list_with_roles(user):
"email": user_object.email,
"avatar_url_small": user_object.avatar_url_small,
"avatar_url": user_object.avatar_url,
"course_sessions": [],
}
course_sessions = get_course_sessions_with_roles_for_user(user)
@ -185,10 +186,12 @@ def _create_person_list_with_roles(user):
)
my_role = user_role(cs.roles)
for csu in course_session_users:
person_data = create_user_dict(csu.user)
person_data["course_sessions"] = [
person_data = result_persons.get(
csu.user.id, create_user_dict(csu.user)
)
person_data["course_sessions"].append(
_create_course_session_dict(cs, my_role, csu.role)
]
)
result_persons[csu.user.id] = person_data
# add persons where request.user is mentor