Add expert dashboard test
This commit is contained in:
parent
b99e86c556
commit
8b6a623f07
|
|
@ -121,3 +121,143 @@ class DashboardAttendanceTestCase(GraphQLTestCase):
|
||||||
summary = attendance_day_presences["summary"]
|
summary = attendance_day_presences["summary"]
|
||||||
self.assertEqual(summary["days_completed"], 1)
|
self.assertEqual(summary["days_completed"], 1)
|
||||||
self.assertEqual(summary["participants_present"], 34)
|
self.assertEqual(summary["participants_present"], 34)
|
||||||
|
|
||||||
|
|
||||||
|
class DashboardExpertAttendanceTestCase(GraphQLTestCase):
|
||||||
|
GRAPHQL_URL = "/server/graphql/"
|
||||||
|
|
||||||
|
def test_attendance_day_presences(self):
|
||||||
|
# GIVEN
|
||||||
|
course, course_page = create_course("Test Course")
|
||||||
|
course_session1 = create_course_session(course=course, title="Test Bern 2022 a")
|
||||||
|
course_session2 = create_course_session(course=course, title="Test Bern 2022 b")
|
||||||
|
circle1, _ = create_circle(title="Circle", course_page=course_page)
|
||||||
|
circle2, _ = create_circle(title="Other Circle", course_page=course_page)
|
||||||
|
|
||||||
|
m1 = create_user("member_1")
|
||||||
|
add_course_session_user(
|
||||||
|
course_session=course_session1,
|
||||||
|
user=m1,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
m2 = create_user("member_2")
|
||||||
|
add_course_session_user(
|
||||||
|
course_session=course_session1,
|
||||||
|
user=m2,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
m3 = create_user("member_3")
|
||||||
|
add_course_session_user(
|
||||||
|
course_session=course_session1,
|
||||||
|
user=m3,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
m4 = create_user("member_4")
|
||||||
|
add_course_session_user(
|
||||||
|
course_session=course_session2,
|
||||||
|
user=m4,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
m5 = create_user("member_5")
|
||||||
|
add_course_session_user(
|
||||||
|
course_session=course_session2,
|
||||||
|
user=m5,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
e1 = create_user("expert_1")
|
||||||
|
csu = add_course_session_user(
|
||||||
|
course_session=course_session1,
|
||||||
|
user=e1,
|
||||||
|
role=CourseSessionUser.Role.EXPERT,
|
||||||
|
)
|
||||||
|
csu.expert.add(circle1)
|
||||||
|
|
||||||
|
# expert1 circle
|
||||||
|
attendance_user_list = [
|
||||||
|
{"user_id": str(m1.id), "status": AttendanceUserStatus.PRESENT.value},
|
||||||
|
{"user_id": str(m2.id), "status": AttendanceUserStatus.ABSENT.value},
|
||||||
|
]
|
||||||
|
|
||||||
|
due_date_end = timezone.now() - timedelta(hours=2)
|
||||||
|
attendance_course1 = create_attendance_course(
|
||||||
|
course_session=course_session1,
|
||||||
|
circle=circle1,
|
||||||
|
attendance_user_list=attendance_user_list,
|
||||||
|
due_date_end=due_date_end,
|
||||||
|
)
|
||||||
|
|
||||||
|
# other circle
|
||||||
|
due_date_end = timezone.now() - timedelta(hours=2)
|
||||||
|
attendance_course2 = create_attendance_course(
|
||||||
|
course_session=course_session1,
|
||||||
|
circle=circle2,
|
||||||
|
attendance_user_list=attendance_user_list,
|
||||||
|
due_date_end=due_date_end,
|
||||||
|
)
|
||||||
|
|
||||||
|
# other course session
|
||||||
|
attendance_user_list2 = [
|
||||||
|
{"user_id": str(m4.id), "status": AttendanceUserStatus.PRESENT.value},
|
||||||
|
{"user_id": str(m5.id), "status": AttendanceUserStatus.ABSENT.value},
|
||||||
|
]
|
||||||
|
due_date_end = timezone.now() - timedelta(hours=2)
|
||||||
|
attendance_course3 = create_attendance_course(
|
||||||
|
course_session=course_session2,
|
||||||
|
circle=circle1,
|
||||||
|
attendance_user_list=attendance_user_list2,
|
||||||
|
due_date_end=due_date_end,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.client.force_login(e1)
|
||||||
|
|
||||||
|
query = f"""
|
||||||
|
query($course_id: ID!) {{
|
||||||
|
course_statistics(course_id: $course_id) {{
|
||||||
|
attendance_day_presences{{
|
||||||
|
summary{{
|
||||||
|
days_completed
|
||||||
|
participants_present
|
||||||
|
}}
|
||||||
|
records{{
|
||||||
|
course_session_id
|
||||||
|
generation
|
||||||
|
circle_id
|
||||||
|
due_date
|
||||||
|
participants_present
|
||||||
|
participants_total
|
||||||
|
details_url
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
"""
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
response = self.query(query, variables={"course_id": str(course.id)})
|
||||||
|
|
||||||
|
self.assertResponseNoErrors(response)
|
||||||
|
|
||||||
|
data = response.json()["data"]
|
||||||
|
|
||||||
|
attendance_day_presences = data["course_statistics"]["attendance_day_presences"]
|
||||||
|
|
||||||
|
record = attendance_day_presences["records"][0]
|
||||||
|
|
||||||
|
self.assertEqual(record["course_session_id"], str(course_session1.id))
|
||||||
|
self.assertEqual(record["generation"], "2023")
|
||||||
|
self.assertEqual(record["participants_present"], 1)
|
||||||
|
self.assertEqual(record["participants_total"], 3)
|
||||||
|
self.assertEqual(
|
||||||
|
record["details_url"],
|
||||||
|
f"/course/test-lehrgang/cockpit/attendance?id={attendance_course1.learning_content.id}"
|
||||||
|
f"&courseSessionId={course_session1.id}",
|
||||||
|
)
|
||||||
|
|
||||||
|
summary = attendance_day_presences["summary"]
|
||||||
|
self.assertEqual(summary["days_completed"], 1)
|
||||||
|
self.assertEqual(summary["participants_present"], 34)
|
||||||
|
|
|
||||||
|
|
@ -107,3 +107,130 @@ class DashboardCompetenceTestCase(GraphQLTestCase):
|
||||||
summary = competences["summary"]
|
summary = competences["summary"]
|
||||||
self.assertEqual(summary["success_total"], 1)
|
self.assertEqual(summary["success_total"], 1)
|
||||||
self.assertEqual(summary["fail_total"], 1)
|
self.assertEqual(summary["fail_total"], 1)
|
||||||
|
|
||||||
|
|
||||||
|
class DashboardExpertCompetenceTestCase(GraphQLTestCase):
|
||||||
|
GRAPHQL_URL = "/server/graphql/"
|
||||||
|
|
||||||
|
def test_competence(self):
|
||||||
|
# GIVEN
|
||||||
|
course, course_page = create_course("Test Course")
|
||||||
|
course_session1 = create_course_session(course=course, title="Test Bern 2022 a")
|
||||||
|
course_session2 = create_course_session(course=course, title="Test Bern 2022 b")
|
||||||
|
circle1, _ = create_circle(title="Circle", course_page=course_page)
|
||||||
|
circle2, _ = create_circle(title="Other Circle", course_page=course_page)
|
||||||
|
|
||||||
|
member_one = create_user("member one")
|
||||||
|
add_course_session_user(
|
||||||
|
course_session=course_session1,
|
||||||
|
user=member_one,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
member_two = create_user("member two")
|
||||||
|
add_course_session_user(
|
||||||
|
course_session=course_session1,
|
||||||
|
user=member_two,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
add_course_session_user(
|
||||||
|
course_session=course_session2,
|
||||||
|
user=member_two,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
circle1, _ = create_circle(title="Test Circle", course_page=course_page)
|
||||||
|
circle2, _ = create_circle(title="Test Circle2", course_page=course_page)
|
||||||
|
|
||||||
|
e1 = create_user("expert_1")
|
||||||
|
csu = add_course_session_user(
|
||||||
|
course_session=course_session1,
|
||||||
|
user=e1,
|
||||||
|
role=CourseSessionUser.Role.EXPERT,
|
||||||
|
)
|
||||||
|
csu.expert.add(circle1)
|
||||||
|
|
||||||
|
pc1 = create_performance_criteria_page(
|
||||||
|
course=course, course_page=course_page, circle=circle1
|
||||||
|
)
|
||||||
|
|
||||||
|
pc2 = create_performance_criteria_page(
|
||||||
|
course=course, course_page=course_page, circle=circle2
|
||||||
|
)
|
||||||
|
|
||||||
|
mark_course_completion(
|
||||||
|
page=pc1,
|
||||||
|
user=member_one,
|
||||||
|
course_session=course_session1,
|
||||||
|
completion_status="SUCCESS",
|
||||||
|
)
|
||||||
|
|
||||||
|
mark_course_completion(
|
||||||
|
page=pc1,
|
||||||
|
user=member_two,
|
||||||
|
course_session=course_session1,
|
||||||
|
completion_status="FAIL",
|
||||||
|
)
|
||||||
|
|
||||||
|
# not in experts domain (circle or course session)
|
||||||
|
mark_course_completion(
|
||||||
|
page=pc2,
|
||||||
|
user=member_one,
|
||||||
|
course_session=course_session1,
|
||||||
|
completion_status="SUCCESS",
|
||||||
|
)
|
||||||
|
|
||||||
|
mark_course_completion(
|
||||||
|
page=pc1,
|
||||||
|
user=member_two,
|
||||||
|
course_session=course_session2,
|
||||||
|
completion_status="FAIL",
|
||||||
|
)
|
||||||
|
|
||||||
|
self.client.force_login(e1)
|
||||||
|
|
||||||
|
query = f"""query($course_id: ID!) {{
|
||||||
|
course_statistics(course_id: $course_id) {{
|
||||||
|
competences {{
|
||||||
|
records {{
|
||||||
|
title
|
||||||
|
course_session_id
|
||||||
|
generation
|
||||||
|
circle_id
|
||||||
|
success_count
|
||||||
|
fail_count
|
||||||
|
details_url
|
||||||
|
}}
|
||||||
|
summary {{
|
||||||
|
success_total
|
||||||
|
fail_total
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
"""
|
||||||
|
variables = {"course_id": str(course.id)}
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
response = self.query(query, variables=variables)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertResponseNoErrors(response)
|
||||||
|
|
||||||
|
competences = response.json()["data"]["course_statistics"]["competences"]
|
||||||
|
records = competences["records"]
|
||||||
|
|
||||||
|
self.assertEqual(records[0]["title"], "Learning Unit")
|
||||||
|
self.assertEqual(records[0]["success_count"], 1)
|
||||||
|
self.assertEqual(records[0]["fail_count"], 1)
|
||||||
|
self.assertEqual(records[0]["circle_id"], str(circle1.id))
|
||||||
|
self.assertEqual(records[0]["course_session_id"], str(course_session1.id))
|
||||||
|
self.assertEqual(records[0]["generation"], "2023")
|
||||||
|
self.assertEqual(
|
||||||
|
records[0]["details_url"],
|
||||||
|
f"/course/{course.slug}/cockpit?courseSessionId={course_session1.id}",
|
||||||
|
)
|
||||||
|
|
||||||
|
summary = competences["summary"]
|
||||||
|
self.assertEqual(summary["success_total"], 1)
|
||||||
|
self.assertEqual(summary["fail_total"], 1)
|
||||||
|
|
|
||||||
|
|
@ -140,3 +140,124 @@ class DashboardFeedbackTestCase(GraphQLTestCase):
|
||||||
self.assertEqual(summary["satisfaction_average"], 2.5)
|
self.assertEqual(summary["satisfaction_average"], 2.5)
|
||||||
self.assertEqual(summary["satisfaction_max"], 4)
|
self.assertEqual(summary["satisfaction_max"], 4)
|
||||||
self.assertEqual(summary["total_responses"], 4)
|
self.assertEqual(summary["total_responses"], 4)
|
||||||
|
|
||||||
|
|
||||||
|
class DashboardExpertFeedbackTestCase(GraphQLTestCase):
|
||||||
|
GRAPHQL_URL = "/server/graphql/"
|
||||||
|
|
||||||
|
def test_feedback(self):
|
||||||
|
# GIVEN
|
||||||
|
course, course_page = create_course("Test Course")
|
||||||
|
course_session1 = create_course_session(course=course, title="Test Bern 2022 a")
|
||||||
|
course_session2 = create_course_session(course=course, title="Test Bern 2022 b")
|
||||||
|
|
||||||
|
member = create_user("member")
|
||||||
|
add_course_session_user(
|
||||||
|
course_session=course_session1,
|
||||||
|
user=member,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
circle1, _ = create_circle(title="Test Circle 1", course_page=course_page)
|
||||||
|
circle2, _ = create_circle(title="Test Circle 2", course_page=course_page)
|
||||||
|
|
||||||
|
expert1 = create_circle_expert(
|
||||||
|
course_session=course_session1, circle=circle1, username="Expert 1"
|
||||||
|
)
|
||||||
|
create_circle_expert(
|
||||||
|
course_session=course_session1, circle=circle1, username="Expert 2"
|
||||||
|
)
|
||||||
|
|
||||||
|
FeedbackResponse.objects.create(
|
||||||
|
feedback_user=member,
|
||||||
|
data={"satisfaction": 3},
|
||||||
|
circle=circle1,
|
||||||
|
course_session=course_session1,
|
||||||
|
submitted=True,
|
||||||
|
)
|
||||||
|
FeedbackResponse.objects.create(
|
||||||
|
feedback_user=member,
|
||||||
|
data={"satisfaction": 4},
|
||||||
|
circle=circle1,
|
||||||
|
course_session=course_session1,
|
||||||
|
submitted=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create Feedbacks for circle2
|
||||||
|
FeedbackResponse.objects.create(
|
||||||
|
feedback_user=member,
|
||||||
|
data={"satisfaction": 1},
|
||||||
|
circle=circle2,
|
||||||
|
course_session=course_session1,
|
||||||
|
submitted=True,
|
||||||
|
)
|
||||||
|
FeedbackResponse.objects.create(
|
||||||
|
feedback_user=member,
|
||||||
|
data={"satisfaction": 2},
|
||||||
|
circle=circle2,
|
||||||
|
course_session=course_session1,
|
||||||
|
submitted=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create Feedbacks for course_session2
|
||||||
|
FeedbackResponse.objects.create(
|
||||||
|
feedback_user=member,
|
||||||
|
data={"satisfaction": 3},
|
||||||
|
circle=circle1,
|
||||||
|
course_session=course_session2,
|
||||||
|
submitted=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.client.force_login(expert1.user)
|
||||||
|
|
||||||
|
query = f"""query($course_id: ID!) {{
|
||||||
|
course_statistics(course_id: $course_id) {{
|
||||||
|
feedback_responses {{
|
||||||
|
records {{
|
||||||
|
course_session_id
|
||||||
|
generation
|
||||||
|
circle_id
|
||||||
|
satisfaction_average
|
||||||
|
satisfaction_max
|
||||||
|
details_url
|
||||||
|
experts
|
||||||
|
}}
|
||||||
|
summary {{
|
||||||
|
satisfaction_average
|
||||||
|
satisfaction_max
|
||||||
|
total_responses
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
"""
|
||||||
|
variables = {"course_id": str(course.id)}
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
response = self.query(query, variables=variables)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertResponseNoErrors(response)
|
||||||
|
|
||||||
|
course_statistics = response.json()["data"]["course_statistics"]
|
||||||
|
feedback_responses = course_statistics["feedback_responses"]
|
||||||
|
|
||||||
|
records = feedback_responses["records"]
|
||||||
|
self.assertEqual(len(records), 1)
|
||||||
|
|
||||||
|
circle1_record = next(
|
||||||
|
(r for r in records if r["circle_id"] == str(circle1.id)), None
|
||||||
|
)
|
||||||
|
self.assertEqual(circle1_record["satisfaction_average"], 3.5)
|
||||||
|
self.assertEqual(circle1_record["course_session_id"], str(course_session1.id))
|
||||||
|
self.assertEqual(circle1_record["generation"], "2023")
|
||||||
|
self.assertEqual(
|
||||||
|
circle1_record["details_url"],
|
||||||
|
f"/course/{course.slug}/cockpit/feedback/{circle1.id}?courseSessionId={course_session1.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(circle1_record["experts"], "Test Expert 1, Test Expert 2")
|
||||||
|
|
||||||
|
summary = feedback_responses["summary"]
|
||||||
|
self.assertEqual(summary["satisfaction_average"], 3.5)
|
||||||
|
self.assertEqual(summary["satisfaction_max"], 4)
|
||||||
|
self.assertEqual(summary["total_responses"], 2)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue