diff --git a/server/vbv_lernwelt/dashboard/tests/test_views.py b/server/vbv_lernwelt/dashboard/tests/test_views.py index c98d5ae1..277bbf5b 100644 --- a/server/vbv_lernwelt/dashboard/tests/test_views.py +++ b/server/vbv_lernwelt/dashboard/tests/test_views.py @@ -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)], + ) diff --git a/server/vbv_lernwelt/dashboard/views.py b/server/vbv_lernwelt/dashboard/views.py index 33962032..1cdf533a 100644 --- a/server/vbv_lernwelt/dashboard/views.py +++ b/server/vbv_lernwelt/dashboard/views.py @@ -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