feat: rl dashboard competences test

This commit is contained in:
Reto Aebersold 2023-10-20 15:05:38 +02:00
parent c81a3ab8c7
commit be789d4fcb
3 changed files with 99 additions and 16 deletions

View File

@ -46,19 +46,19 @@ def competences(course_id: graphene.String(), user: User) -> Competences:
success_count=0, # noqa success_count=0, # noqa
fail_count=0, # noqa fail_count=0, # noqa
) )
if c.completion_status == CourseCompletionStatus.SUCCESS: if c.completion_status == CourseCompletionStatus.SUCCESS.value:
competence_performances[circle.id].success_count += 1 competence_performances[circle.id].success_count += 1
elif c.completion_status == CourseCompletionStatus.FAIL: elif c.completion_status == CourseCompletionStatus.FAIL.value:
competence_performances[circle.id].fail_count += 1 competence_performances[circle.id].fail_count += 1
return Competences( return Competences(
performances=competence_performances.values(), # noqa performances=competence_performances.values(), # noqa
summary=CompletionSummary( # noqa summary=CompletionSummary( # noqa
success_total=sum( # noqa success_total=sum( # noqa
[c.success_count for c in competence_performances.values()] [c.success_count for c in competence_performances.values()]
),
fail_total=sum( # noqa
[c.fail_count for c in competence_performances.values()]
),
), ),
) fail_total=sum( # noqa
[c.fail_count for c in competence_performances.values()]
),
),
)

View File

@ -1,11 +1,13 @@
from graphene_django.utils import GraphQLTestCase from graphene_django.utils import GraphQLTestCase
from vbv_lernwelt.course.models import CourseSessionUser from vbv_lernwelt.course.models import CourseSessionUser
from vbv_lernwelt.course.services import mark_course_completion
from vbv_lernwelt.dashboard.tests.graphql.utils import ( from vbv_lernwelt.dashboard.tests.graphql.utils import (
add_course_session_user, add_course_session_user,
create_circle, create_circle,
create_course, create_course,
create_course_session, create_course_session,
create_performance_criteria_page,
create_user, create_user,
) )
@ -26,15 +28,39 @@ class DashboardCompetenceTestCase(GraphQLTestCase):
role=CourseSessionUser.Role.SESSION_SUPERVISOR, role=CourseSessionUser.Role.SESSION_SUPERVISOR,
) )
member = create_user("member") member_one = create_user("member one")
add_course_session_user( add_course_session_user(
course_session=course_session, course_session=course_session,
user=member, user=member_one,
role=CourseSessionUser.Role.MEMBER, role=CourseSessionUser.Role.MEMBER,
) )
circle1, _ = create_circle(title="Test Circle 1", course_page=course_page) member_two = create_user("member two")
circle2, _ = create_circle(title="Test Circle 2", course_page=course_page) add_course_session_user(
course_session=course_session,
user=member_two,
role=CourseSessionUser.Role.MEMBER,
)
circle, _ = create_circle(title="Test Circle", course_page=course_page)
pc = create_performance_criteria_page(
course=course, course_page=course_page, circle=circle
)
mark_course_completion(
page=pc,
user=member_one,
course_session=course_session,
completion_status="SUCCESS",
)
mark_course_completion(
page=pc,
user=member_two,
course_session=course_session,
completion_status="FAIL",
)
self.client.force_login(supervisor) self.client.force_login(supervisor)
@ -64,3 +90,17 @@ class DashboardCompetenceTestCase(GraphQLTestCase):
# THEN # THEN
self.assertResponseNoErrors(response) self.assertResponseNoErrors(response)
competences = response.json()["data"]["course_dashboard"][0]["competences"]
performances = competences["performances"]
self.assertEqual(performances[0]["success_count"], 1)
self.assertEqual(performances[0]["fail_count"], 1)
self.assertEqual(performances[0]["circle_id"], str(circle.id))
self.assertEqual(performances[0]["course_session_id"], str(course_session.id))
self.assertEqual(performances[0]["generation"], "2023")
summary = competences["summary"]
self.assertEqual(summary["success_total"], 1)
self.assertEqual(summary["fail_total"], 1)

View File

@ -4,10 +4,18 @@ from typing import List, Tuple
from django.contrib.auth.hashers import make_password from django.contrib.auth.hashers import make_password
from django.utils import timezone from django.utils import timezone
from vbv_lernwelt.competence.factories import (
ActionCompetenceFactory,
ActionCompetenceListPageFactory,
CompetenceNaviPageFactory,
PerformanceCriteriaFactory,
)
from vbv_lernwelt.competence.models import PerformanceCriteria
from vbv_lernwelt.core.models import User from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.factories import CoursePageFactory from vbv_lernwelt.course.factories import CoursePageFactory
from vbv_lernwelt.course.models import ( from vbv_lernwelt.course.models import (
Course, Course,
CourseCategory,
CoursePage, CoursePage,
CourseSession, CourseSession,
CourseSessionUser, CourseSessionUser,
@ -20,6 +28,7 @@ from vbv_lernwelt.learnpath.tests.learning_path_factories import (
CircleFactory, CircleFactory,
LearningContentAttendanceCourseFactory, LearningContentAttendanceCourseFactory,
LearningPathFactory, LearningPathFactory,
LearningUnitFactory,
TopicFactory, TopicFactory,
) )
@ -105,3 +114,37 @@ def create_attendance_course(
end=due_date_end, end=due_date_end,
), ),
) )
def create_performance_criteria_page(
course: Course, course_page: CoursePage, circle: Circle
) -> PerformanceCriteria:
competence_navi_page = CompetenceNaviPageFactory(
title="Competence Navi",
parent=course_page,
)
competence_profile_page = ActionCompetenceListPageFactory(
title="Action Competence Page",
parent=competence_navi_page,
)
action_competence = ActionCompetenceFactory(
parent=competence_profile_page,
competence_id="X1",
title="Action Competence",
items=[("item", "Action Competence Item")],
)
cat, _ = CourseCategory.objects.get_or_create(
course=course, title="Course Category"
)
lu = LearningUnitFactory(title="Learning Unit", parent=circle, course_category=cat)
return PerformanceCriteriaFactory(
parent=action_competence,
competence_id="X1.1",
title="Performance Criteria",
learning_unit=lu,
)