264 lines
9.3 KiB
Python
264 lines
9.3 KiB
Python
from graphene_django.utils import GraphQLTestCase
|
|
|
|
from vbv_lernwelt.course.creators.test_utils import (
|
|
add_course_session_group_supervisor,
|
|
add_course_session_user,
|
|
create_circle,
|
|
create_circle_expert,
|
|
create_course,
|
|
create_course_session,
|
|
create_course_session_group,
|
|
create_user,
|
|
)
|
|
from vbv_lernwelt.course.models import CourseSessionUser
|
|
from vbv_lernwelt.feedback.models import FeedbackResponse
|
|
|
|
|
|
class DashboardFeedbackTestCase(GraphQLTestCase):
|
|
GRAPHQL_URL = "/server/graphql/"
|
|
|
|
def test_feedback(self):
|
|
# GIVEN
|
|
course, course_page = create_course("Test Course")
|
|
course_session = create_course_session(course=course, title="Test Bern 2022 a")
|
|
|
|
supervisor = create_user("supervisor")
|
|
|
|
group = create_course_session_group(course_session=course_session)
|
|
add_course_session_group_supervisor(group=group, user=supervisor)
|
|
|
|
member = create_user("member")
|
|
add_course_session_user(
|
|
course_session=course_session,
|
|
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)
|
|
|
|
create_circle_expert(
|
|
course_session=course_session, circle=circle1, username="Expert 1"
|
|
)
|
|
create_circle_expert(
|
|
course_session=course_session, circle=circle1, username="Expert 2"
|
|
)
|
|
|
|
FeedbackResponse.objects.create(
|
|
feedback_user=member,
|
|
data={"satisfaction": 3},
|
|
circle=circle1,
|
|
course_session=course_session,
|
|
submitted=True,
|
|
)
|
|
FeedbackResponse.objects.create(
|
|
feedback_user=member,
|
|
data={"satisfaction": 4},
|
|
circle=circle1,
|
|
course_session=course_session,
|
|
submitted=True,
|
|
)
|
|
|
|
# Create Feedbacks for circle2
|
|
FeedbackResponse.objects.create(
|
|
feedback_user=member,
|
|
data={"satisfaction": 1},
|
|
circle=circle2,
|
|
course_session=course_session,
|
|
submitted=True,
|
|
)
|
|
FeedbackResponse.objects.create(
|
|
feedback_user=member,
|
|
data={"satisfaction": 2},
|
|
circle=circle2,
|
|
course_session=course_session,
|
|
submitted=True,
|
|
)
|
|
|
|
self.client.force_login(supervisor)
|
|
|
|
query = """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), 2)
|
|
|
|
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_session.id))
|
|
self.assertEqual(circle1_record["generation"], "2023")
|
|
self.assertEqual(
|
|
circle1_record["details_url"],
|
|
f"/course/{course.slug}/cockpit/feedback/{circle1.id}?courseSessionId={course_session.id}",
|
|
)
|
|
self.assertEqual(circle1_record["experts"], "Test Expert 1, Test Expert 2")
|
|
|
|
circle2_record = next(
|
|
(r for r in records if r["circle_id"] == str(circle2.id)), None
|
|
)
|
|
self.assertEqual(circle2_record["satisfaction_average"], 1.5)
|
|
self.assertEqual(circle2_record["course_session_id"], str(course_session.id))
|
|
self.assertEqual(circle2_record["generation"], "2023")
|
|
self.assertEqual(
|
|
circle2_record["details_url"],
|
|
f"/course/{course.slug}/cockpit/feedback/{circle2.id}?courseSessionId={course_session.id}",
|
|
)
|
|
self.assertEqual(circle2_record["experts"], "")
|
|
|
|
summary = feedback_responses["summary"]
|
|
self.assertEqual(summary["satisfaction_average"], 2.5)
|
|
self.assertEqual(summary["satisfaction_max"], 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 = """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)
|