vbv/server/vbv_lernwelt/dashboard/tests/graphql/test_feedback.py

120 lines
4.1 KiB
Python

from graphene_django.utils import GraphQLTestCase
from vbv_lernwelt.course.models import CourseSessionUser
from vbv_lernwelt.dashboard.tests.graphql.utils import (
add_course_session_user,
create_circle,
create_course,
create_course_session,
create_user,
)
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")
# TODO: Give this guy the right permissions, once we have them ;)
supervisor = create_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)
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 = f"""query($course_id: ID!) {{
course_statistics(course_id: $course_id) {{
course_id
feedback_responses {{
records {{
course_session_id
generation
circle_id
satisfaction_average
satisfaction_max
}}
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[0]["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")
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")
summary = feedback_responses["summary"]
self.assertEqual(summary["satisfaction_average"], 2.5)
self.assertEqual(summary["satisfaction_max"], 4)
self.assertEqual(summary["total_responses"], 4)