Add count tests

This commit is contained in:
Christian Cueni 2024-04-10 15:39:17 +02:00
parent 84f803ebf1
commit 373703813c
2 changed files with 318 additions and 38 deletions

View File

@ -1,5 +1,10 @@
from django.test import TestCase
from vbv_lernwelt.assignment.models import (
AssignmentCompletion,
AssignmentCompletionStatus,
)
from vbv_lernwelt.assignment.tests.assignment_factories import AssignmentFactory
from vbv_lernwelt.course.creators.test_utils import (
add_course_session_group_supervisor,
add_course_session_user,
@ -8,9 +13,21 @@ from vbv_lernwelt.course.creators.test_utils import (
create_course_session_group,
create_user,
)
from vbv_lernwelt.course.models import CourseSessionUser
from vbv_lernwelt.dashboard.views import get_course_sessions_with_roles_for_user, get_course_config
from vbv_lernwelt.course.models import CourseCategory, CoursePage, CourseSessionUser
from vbv_lernwelt.dashboard.views import (
_get_mentee_count,
_get_mentor_open_tasks_count,
get_course_config,
get_course_sessions_with_roles_for_user,
)
from vbv_lernwelt.learning_mentor.models import LearningMentor
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
CircleFactory,
LearningPathFactory,
LearningSequenceFactory,
LearningUnitFactory,
)
from vbv_lernwelt.self_evaluation_feedback.models import SelfEvaluationFeedback
class GetCourseSessionsForUserTestCase(TestCase):
@ -105,7 +122,9 @@ class GetDashboardConfig(TestCase):
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].session_to_continue_id, str(self.course_session.id))
self.assertEqual(
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].widgets, widgets)
@ -119,8 +138,19 @@ class GetDashboardConfig(TestCase):
self.course.configuration.is_uk = True
self.course.configuration.save()
self._test_config(user=participant, role="Member", is_uk=True, is_vv=False, is_mentor=False, has_preview=False,
widgets=['ProgressWidget', 'CompetenceWidget', 'CompetenceCertificateWidget'])
self._test_config(
user=participant,
role="Member",
is_uk=True,
is_vv=False,
is_mentor=False,
has_preview=False,
widgets=[
"ProgressWidget",
"CompetenceWidget",
"CompetenceCertificateWidget",
],
)
def test_participant_vv_get_config(self):
participant = create_user("participant")
@ -132,8 +162,15 @@ class GetDashboardConfig(TestCase):
self.course.configuration.is_vv = True
self.course.configuration.save()
self._test_config(user=participant, role="Member", is_uk=False, is_vv=True, is_mentor=False, has_preview=False,
widgets=['ProgressWidget', 'CompetenceWidget'])
self._test_config(
user=participant,
role="Member",
is_uk=False,
is_vv=True,
is_mentor=False,
has_preview=False,
widgets=["ProgressWidget", "CompetenceWidget"],
)
def test_mentor_uk_get_config(self):
# GIVEN
@ -143,8 +180,15 @@ class GetDashboardConfig(TestCase):
self.course.configuration.is_uk = True
self.course.configuration.save()
self._test_config(user=mentor, role="MentorUK", is_uk=True, is_vv=False, is_mentor=True, has_preview=True,
widgets=['MentorPersonWidget', 'MentorCompetenceWidget'])
self._test_config(
user=mentor,
role="MentorUK",
is_uk=True,
is_vv=False,
is_mentor=True,
has_preview=True,
widgets=["MentorPersonWidget", "MentorCompetenceWidget"],
)
def test_mentor_vv_get_config(self):
# GIVEN
@ -154,8 +198,15 @@ class GetDashboardConfig(TestCase):
self.course.configuration.is_vv = True
self.course.configuration.save()
self._test_config(user=mentor, role="MentorVV", is_uk=False, is_vv=True, is_mentor=True, has_preview=True,
widgets=['MentorPersonWidget', 'MentorTasksWidget'])
self._test_config(
user=mentor,
role="MentorVV",
is_uk=False,
is_vv=True,
is_mentor=True,
has_preview=True,
widgets=["MentorPersonWidget", "MentorTasksWidget"],
)
def test_participant_as_mentor_vv_get_config(self):
# GIVEN
@ -170,5 +221,226 @@ class GetDashboardConfig(TestCase):
self.course.configuration.is_vv = True
self.course.configuration.save()
self._test_config(user=mentor, role="Member", is_uk=False, is_vv=True, is_mentor=True, has_preview=False,
widgets=['ProgressWidget', 'CompetenceWidget', 'MentorPersonWidget', 'MentorTasksWidget'])
self._test_config(
user=mentor,
role="Member",
is_uk=False,
is_vv=True,
is_mentor=True,
has_preview=False,
widgets=[
"ProgressWidget",
"CompetenceWidget",
"MentorPersonWidget",
"MentorTasksWidget",
],
)
class GetMenteeCountTestCase(TestCase):
def setUp(self):
self.course, _ = create_course("Test Course")
self.course_session = create_course_session(
course=self.course, title="Test Session"
)
def test_get_mentee_count(self):
participants_with_mentor = [create_user(f"participant{i}") for i in range(2)]
participant = create_user("participant")
mentor = create_user("mentor")
lm = LearningMentor.objects.create(
mentor=mentor, course_session=self.course_session
)
for p in participants_with_mentor:
csu = add_course_session_user(
self.course_session,
p,
role=CourseSessionUser.Role.MEMBER,
)
lm.participants.add(csu)
add_course_session_user(
self.course_session,
participant,
role=CourseSessionUser.Role.MEMBER,
)
count = _get_mentee_count(str(self.course.id), mentor)
self.assertEqual(count, 2)
class GetMentorOpenTasksTestCase(TestCase):
def setUp(self):
self.course, _ = create_course("Test Course")
self.course_session = create_course_session(
course=self.course, title="Test Session"
)
course_page = CoursePage.objects.get(course_id=self.course.id)
CourseCategory.objects.get_or_create(
course=self.course, title="Allgemein", general=True
)
lp = LearningPathFactory(
title="Lernpfad",
parent=course_page,
)
circle = CircleFactory(
title="Kickoff",
parent=lp,
description="bla".strip(),
goals="A goal",
)
LearningSequenceFactory(
title="Vorbereitung", parent=circle, icon="it-icon-ls-start"
)
self.lu = LearningUnitFactory(
title="Vorbereitung", title_hidden=True, parent=circle
)
self.course.configuration.is_vv = True
self.course.configuration.save()
self.assignment = AssignmentFactory(parent=course_page)
self.mentor = create_user("mentor")
self.lm = LearningMentor.objects.create(
mentor=self.mentor, course_session=self.course_session
)
self.participants = [create_user(f"participant{i}") for i in range(2)]
def create_and_test_count(
self, assignment_user, evaluation_user, mentor, completion_status, count
):
AssignmentCompletion.objects.create(
course_session=self.course_session,
assignment_user=assignment_user,
assignment=self.assignment,
completion_status=completion_status,
evaluation_user=evaluation_user,
)
self.assertEqual(
_get_mentor_open_tasks_count(str(self.course.id), mentor), count
)
def test_get_uk_count(self):
self.course.configuration.is_uk = True
self.course.configuration.save()
count = _get_mentor_open_tasks_count(str(self.course.id), self.mentor)
self.assertEqual(count, 0)
def test_get_vv_count_when_assignment_evaluated(self):
csu = add_course_session_user(
self.course_session,
self.participants[0],
role=CourseSessionUser.Role.MEMBER,
)
self.lm.participants.add(csu)
add_course_session_user(
self.course_session,
self.participants[1],
role=CourseSessionUser.Role.MEMBER,
)
AssignmentCompletion.objects.create(
course_session=self.course_session,
assignment_user=self.participants[0],
evaluation_user=self.participants[0],
assignment=self.assignment,
completion_status=AssignmentCompletionStatus.SUBMITTED.value,
)
self.create_and_test_count(
assignment_user=self.participants[0],
mentor=self.mentor,
evaluation_user=self.mentor,
completion_status=AssignmentCompletionStatus.EVALUATION_SUBMITTED.value,
count=0,
)
def test_get_vv_count_when_assignment_submitted(self):
csu = add_course_session_user(
self.course_session,
self.participants[0],
role=CourseSessionUser.Role.MEMBER,
)
self.lm.participants.add(csu)
add_course_session_user(
self.course_session,
self.participants[1],
role=CourseSessionUser.Role.MEMBER,
)
self.create_and_test_count(
assignment_user=self.participants[0],
mentor=self.mentor,
evaluation_user=self.mentor,
completion_status=AssignmentCompletionStatus.SUBMITTED.value,
count=1,
)
def test_get_vv_count_with_feedback_not_submitted(self):
csu = add_course_session_user(
self.course_session,
self.participants[0],
role=CourseSessionUser.Role.MEMBER,
)
self.lm.participants.add(csu)
SelfEvaluationFeedback.objects.create(
feedback_submitted=False,
feedback_requester_user=self.participants[0],
feedback_provider_user=self.mentor,
learning_unit=self.lu,
)
self.create_and_test_count(
assignment_user=self.participants[0],
mentor=self.mentor,
evaluation_user=self.mentor,
completion_status=AssignmentCompletionStatus.SUBMITTED.value,
count=2,
)
def test_get_vv_count_with_feedback_submitted(self):
csu = add_course_session_user(
self.course_session,
self.participants[0],
role=CourseSessionUser.Role.MEMBER,
)
self.lm.participants.add(csu)
SelfEvaluationFeedback.objects.create(
feedback_submitted=True,
feedback_requester_user=self.participants[0],
feedback_provider_user=self.mentor,
learning_unit=self.lu,
)
self.create_and_test_count(
assignment_user=self.participants[0],
mentor=self.mentor,
evaluation_user=self.mentor,
completion_status=AssignmentCompletionStatus.SUBMITTED.value,
count=1,
)
def test_get_vv_count_without_lm(self):
csu = add_course_session_user(
self.course_session,
self.participants[0],
role=CourseSessionUser.Role.MEMBER,
)
SelfEvaluationFeedback.objects.create(
feedback_submitted=False,
feedback_requester_user=self.participants[0],
feedback_provider_user=self.mentor,
learning_unit=self.lu,
)
self.create_and_test_count(
assignment_user=self.participants[0],
mentor=self.mentor,
evaluation_user=self.mentor,
completion_status=AssignmentCompletionStatus.SUBMITTED.value,
count=0,
)

View File

@ -356,13 +356,9 @@ def get_dashboard_config(request):
@api_view(["GET"])
def get_mentee_count(request, course_id: str):
try:
count = CourseSessionUser.objects.filter(
participants__mentor=request.user, course_session__course__id=course_id
).count()
return Response(
status=200,
data={"mentee_count": count},
data={"mentee_count": _get_mentee_count(course_id, request.user)}, # noqa
)
except PermissionDenied as e:
raise e
@ -371,34 +367,46 @@ def get_mentee_count(request, course_id: str):
return Response({"error": str(e)}, status=404)
def _get_mentee_count(course_id: str, mentor: User) -> int:
return CourseSessionUser.objects.filter(
participants__mentor=mentor, course_session__course__id=course_id
).count()
@api_view(["GET"])
def get_mentor_open_tasks_count(request, course_id: str):
try:
open_assigment_count = 0
open_feedback_count = 0
course_configuration = CourseConfiguration.objects.get(course_id=course_id)
if course_configuration.is_vv:
open_assigment_count = AssignmentCompletion.objects.filter(
course_session__course__id=course_id,
completion_status=AssignmentCompletionStatus.SUBMITTED.value,
evaluation_user=request.user, # noqa
assignment_user__coursesessionuser__participants__mentor=request.user,
).count()
open_feedback_count = SelfEvaluationFeedback.objects.filter(
feedback_provider_user=request.user, # noqa
feedback_requester_user__coursesessionuser__participants__mentor=request.user,
feedback_submitted=False,
).count()
return Response(
status=200,
data={"open_task_count": open_assigment_count + open_feedback_count},
data={
"open_task_count": _get_mentor_open_tasks_count(course_id, request.user)
}, # noqa
)
except PermissionDenied as e:
raise e
except Exception as e:
logger.error(e, exc_info=True)
return Response({"error": str(e)}, status=404)
def _get_mentor_open_tasks_count(course_id: str, mentor: User) -> int:
open_assigment_count = 0
open_feedback_count = 0
course_configuration = CourseConfiguration.objects.get(course_id=course_id)
if course_configuration.is_vv:
open_assigment_count = AssignmentCompletion.objects.filter(
course_session__course__id=course_id,
completion_status=AssignmentCompletionStatus.SUBMITTED.value,
evaluation_user=mentor, # noqa
assignment_user__coursesessionuser__participants__mentor=mentor,
).count()
open_feedback_count = SelfEvaluationFeedback.objects.filter(
feedback_provider_user=mentor, # noqa
feedback_requester_user__coursesessionuser__participants__mentor=mentor,
feedback_submitted=False,
).count()
return open_assigment_count + open_feedback_count