Fix unit tests

This commit is contained in:
Daniel Egger 2024-07-23 16:55:20 +02:00
parent 50709a34e8
commit 4f6b14efae
4 changed files with 47 additions and 44 deletions

View File

@ -132,11 +132,11 @@ def get_assignment_completion_metrics(
# calculate average points in percent # calculate average points in percent
evaluation_percent_results = [ evaluation_percent_results = [
(ac.evaluation_points_final / ac.evaluation_max_points) ((ac.evaluation_points_final or 0) / (ac.evaluation_max_points or 1))
for ac in assignment_completions for ac in assignment_completions
] ]
average_evaluation_percent = ( average_evaluation_percent = (
sum(evaluation_percent_results) / len(evaluation_percent_results) sum(evaluation_percent_results) / (len(evaluation_percent_results) or 1)
if evaluation_percent_results if evaluation_percent_results
else 0 else 0
) )

View File

@ -47,8 +47,8 @@ class MentorStatisticsTestCase(BaseMentorAssignmentTestCase, GraphQLTestCase):
) )
# THEN # THEN
# WHEN # WHEN
query = """query ($courseId: ID!) { query = """query ($courseId: ID!, $agentRole: String!) {
mentor_course_statistics(course_id: $courseId) { mentor_course_statistics(course_id: $courseId, agent_role: $agentRole) {
course_session_selection_ids course_session_selection_ids
user_selection_ids user_selection_ids
assignments { assignments {
@ -65,7 +65,7 @@ class MentorStatisticsTestCase(BaseMentorAssignmentTestCase, GraphQLTestCase):
}""" }"""
# THEN # THEN
variables = {"courseId": str(self.course.id)} variables = {"courseId": str(self.course.id), "agentRole": "LEARNING_MENTOR"}
self.client.force_login(self.mentor) self.client.force_login(self.mentor)
response = self.query(query, variables=variables) response = self.query(query, variables=variables)
self.assertResponseNoErrors(response) self.assertResponseNoErrors(response)

View File

@ -124,7 +124,7 @@ class GetDashboardConfig(TestCase):
course=self.course, title="Test Session" course=self.course, title="Test Session"
) )
def _test_config(self, user, role, is_uk, is_vv, is_mentor, has_preview, widgets): def _test_config(self, user, role, is_uk, is_vv, has_preview, widgets):
# WHEN # WHEN
sessions = get_course_sessions_with_roles_for_user(user) sessions = get_course_sessions_with_roles_for_user(user)
course_configs = get_course_config(sessions) course_configs = get_course_config(sessions)
@ -134,13 +134,12 @@ class GetDashboardConfig(TestCase):
self.assertEqual(course_configs[0].course_title, self.course.title) self.assertEqual(course_configs[0].course_title, self.course.title)
self.assertEqual(course_configs[0].is_uk, is_uk) self.assertEqual(course_configs[0].is_uk, is_uk)
self.assertEqual(course_configs[0].is_vv, is_vv) self.assertEqual(course_configs[0].is_vv, is_vv)
self.assertEqual(course_configs[0].is_mentor, is_mentor)
self.assertEqual(course_configs[0].has_preview, has_preview) self.assertEqual(course_configs[0].has_preview, has_preview)
self.assertEqual( self.assertEqual(
course_configs[0].session_to_continue_id, str(self.course_session.id) course_configs[0].session_to_continue_id, str(self.course_session.id)
) )
self.assertEqual(course_configs[0].role_key, role) self.assertEqual(course_configs[0].role_key, role)
self.assertEqual(course_configs[0].widgets, widgets) self.assertEqual(set(course_configs[0].widgets), set(widgets))
def test_participant_uk_get_config(self): def test_participant_uk_get_config(self):
participant = create_user("participant") participant = create_user("participant")
@ -157,7 +156,6 @@ class GetDashboardConfig(TestCase):
role="Member", role="Member",
is_uk=True, is_uk=True,
is_vv=False, is_vv=False,
is_mentor=False,
has_preview=False, has_preview=False,
widgets=[ widgets=[
"ProgressWidget", "ProgressWidget",
@ -181,7 +179,6 @@ class GetDashboardConfig(TestCase):
role="Member", role="Member",
is_uk=False, is_uk=False,
is_vv=True, is_vv=True,
is_mentor=False,
has_preview=False, has_preview=False,
widgets=["ProgressWidget", "CompetenceWidget"], widgets=["ProgressWidget", "CompetenceWidget"],
) )
@ -208,7 +205,6 @@ class GetDashboardConfig(TestCase):
role="MentorUK", role="MentorUK",
is_uk=True, is_uk=True,
is_vv=False, is_vv=False,
is_mentor=True,
has_preview=True, has_preview=True,
widgets=["MentorPersonWidget", "MentorCompetenceWidget"], widgets=["MentorPersonWidget", "MentorCompetenceWidget"],
) )
@ -234,7 +230,6 @@ class GetDashboardConfig(TestCase):
role="MentorVV", role="MentorVV",
is_uk=False, is_uk=False,
is_vv=True, is_vv=True,
is_mentor=True,
has_preview=True, has_preview=True,
widgets=["MentorPersonWidget", "MentorTasksWidget"], widgets=["MentorPersonWidget", "MentorTasksWidget"],
) )
@ -266,7 +261,6 @@ class GetDashboardConfig(TestCase):
role="Member", role="Member",
is_uk=False, is_uk=False,
is_vv=True, is_vv=True,
is_mentor=True,
has_preview=False, has_preview=False,
widgets=[ widgets=[
"ProgressWidget", "ProgressWidget",

View File

@ -68,6 +68,7 @@ class RoleKeyType(Enum):
SUPERVISOR = "Supervisor" SUPERVISOR = "Supervisor"
TRAINER = "Trainer" TRAINER = "Trainer"
BERUFSBILDNER = "Berufsbildner" BERUFSBILDNER = "Berufsbildner"
UNKNOWN_ROLE_KEY = "UnknownRoleKey"
@dataclass(frozen=True) @dataclass(frozen=True)
@ -365,55 +366,65 @@ def get_dashboard_due_dates(request):
def get_widgets_for_course( def get_widgets_for_course(
role_key: RoleKeyType, is_uk: bool, is_vv: bool course_sessions: List[CourseSessionWithRoles], is_uk: bool, is_vv: bool
) -> List[str]: ) -> List[str]:
relation_roles = set()
for cs in course_sessions:
relation_roles.update(cs.roles)
widgets = [] widgets = []
if role_key == RoleKeyType.MEMBER: if "MEMBER" in relation_roles:
widgets.append(WidgetType.PROGRESS_WIDGET.value) widgets.append(WidgetType.PROGRESS_WIDGET.value)
widgets.append(WidgetType.COMPETENCE_WIDGET.value) widgets.append(WidgetType.COMPETENCE_WIDGET.value)
if is_uk: if is_uk:
widgets.append(WidgetType.COMPETENCE_CERTIFICATE_WIDGET.value) widgets.append(WidgetType.COMPETENCE_CERTIFICATE_WIDGET.value)
if role_key in [RoleKeyType.SUPERVISOR, RoleKeyType.TRAINER] and is_uk: if "EXPERT" in relation_roles or "SUPERVISOR" in relation_roles:
widgets.append(WidgetType.UK_STATISTICS_WIDGET.value) widgets.append(WidgetType.MENTOR_TASKS_WIDGET.value)
if role_key in [RoleKeyType.MENTOR_UK, RoleKeyType.MENTOR_VV]:
widgets.append(WidgetType.MENTOR_PERSON_WIDGET.value) widgets.append(WidgetType.MENTOR_PERSON_WIDGET.value)
if is_uk: if is_uk:
widgets.append(WidgetType.MENTOR_COMPETENCE_WIDGET.value) widgets.append(WidgetType.MENTOR_COMPETENCE_WIDGET.value)
if is_vv:
if "LEARNING_MENTOR" in relation_roles:
widgets.append(WidgetType.MENTOR_PERSON_WIDGET.value)
if is_uk:
widgets.append(WidgetType.MENTOR_COMPETENCE_WIDGET.value)
elif is_vv:
widgets.append(WidgetType.MENTOR_TASKS_WIDGET.value) widgets.append(WidgetType.MENTOR_TASKS_WIDGET.value)
if role_key in [RoleKeyType.BERUFSBILDNER]: if "BERUFSBILDNER" in relation_roles:
widgets.append(WidgetType.UK_BERUFSBILDNER_STATISTICS_WIDGET.value) if is_uk:
widgets.append(WidgetType.UK_STATISTICS_WIDGET.value)
return widgets return widgets
def get_role_key_and_mentor( def get_relevant_role_key(
course_sessions: List[CourseSessionWithRoles], is_uk: bool, is_vv: bool course_sessions: List[CourseSessionWithRoles], is_uk: bool, is_vv: bool
) -> tuple[RoleKeyType, bool]: ) -> RoleKeyType:
roles = set() relation_roles = set()
role = None
for cs in course_sessions: for cs in course_sessions:
roles.update(cs.roles) relation_roles.update(cs.roles)
if "SUPERVISOR" in roles: if "SUPERVISOR" in relation_roles:
role = RoleKeyType.SUPERVISOR return RoleKeyType.SUPERVISOR
elif "EXPERT" in roles: elif "EXPERT" in relation_roles:
role = RoleKeyType.TRAINER return RoleKeyType.TRAINER
elif "MEMBER" in roles: elif "MEMBER" in relation_roles:
role = RoleKeyType.MEMBER return RoleKeyType.MEMBER
elif "LEARNING_MENTOR" in roles:
elif "LEARNING_MENTOR" in relation_roles:
if is_uk: if is_uk:
role = RoleKeyType.MENTOR_UK return RoleKeyType.MENTOR_UK
elif is_vv: elif is_vv:
role = RoleKeyType.MENTOR_VV return RoleKeyType.MENTOR_VV
elif "BERUFSBILDNER" in roles: elif "BERUFSBILDNER" in relation_roles:
role = RoleKeyType.BERUFSBILDNER if is_uk:
return RoleKeyType.BERUFSBILDNER
return role return RoleKeyType.UNKNOWN_ROLE_KEY
def collect_course_sessions_by_course( def collect_course_sessions_by_course(
@ -455,7 +466,7 @@ def get_course_config(
for _id, cs_in_course in cs_by_course.items(): for _id, cs_in_course in cs_by_course.items():
is_uk = cs_in_course[0].course.configuration.is_uk is_uk = cs_in_course[0].course.configuration.is_uk
is_vv = cs_in_course[0].course.configuration.is_vv is_vv = cs_in_course[0].course.configuration.is_vv
role_key = get_role_key_and_mentor(cs_in_course, is_uk, is_vv) role_key = get_relevant_role_key(cs_in_course, is_uk, is_vv)
session_to_continue = get_newest_cs(cs_in_course) session_to_continue = get_newest_cs(cs_in_course)
course_configs.append( course_configs.append(
CourseConfig( CourseConfig(
@ -465,7 +476,7 @@ def get_course_config(
role_key=role_key.value, role_key=role_key.value,
is_uk=is_uk, is_uk=is_uk,
is_vv=is_vv, is_vv=is_vv,
widgets=get_widgets_for_course(role_key, is_uk, is_vv), widgets=get_widgets_for_course(cs_in_course, is_uk, is_vv),
has_preview=has_preview(role_key), has_preview=has_preview(role_key),
session_to_continue_id=( session_to_continue_id=(
str(session_to_continue.id) if session_to_continue else None str(session_to_continue.id) if session_to_continue else None
@ -521,9 +532,7 @@ def get_mentor_open_tasks_count(request, course_id: str):
return Response( return Response(
status=200, status=200,
data={ data={
"open_task_count": _get_mentor_open_tasks_count( "open_task_count": _get_mentor_open_tasks_count(course_id, request.user) # noqa
course_id, request.user
) # noqa
}, },
) )
except PermissionDenied as e: except PermissionDenied as e: