vbv/server/vbv_lernwelt/feedback/tests/test_feedback_api.py

118 lines
4.7 KiB
Python

from rest_framework.test import APITestCase
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.consts import COURSE_TEST_ID
from vbv_lernwelt.course.creators.test_course import create_test_course
from vbv_lernwelt.course.models import CourseSession, CourseSessionUser
from vbv_lernwelt.feedback.factories import FeedbackFactory
from vbv_lernwelt.learnpath.models import Circle
class FeedbackApiTestCase(APITestCase):
def setUp(self) -> None:
create_default_users()
create_test_course()
self.user = User.objects.get(username="student")
self.expert = User.objects.get(
username="patrizia.huggel@eiger-versicherungen.ch"
)
self.course_session = CourseSession.objects.create(
course_id=COURSE_TEST_ID,
title="Test Lehrgang Session",
)
csu = CourseSessionUser.objects.create(
course_session=self.course_session,
user=User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
csu.expert.add(Circle.objects.get(slug="test-lehrgang-lp-circle-analyse"))
_csu = CourseSessionUser.objects.create(
course_session=self.course_session,
user=self.user,
role=CourseSessionUser.Role.MEMBER,
)
self.test_data = {
"file_name": "test.pdf",
"file_type": "application/pdf",
"name": "Test",
"course_session": self.course_session.id,
}
self.client.login(
username="patrizia.huggel@eiger-versicherungen.ch", password="myvbv1234"
)
def test_can_get_feedback_summary_for_circles(self):
number_basis_feedback = 5
number_analyse_feedback = 10
csu = CourseSessionUser.objects.get(
course_session=self.course_session,
user=User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
analyse_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-analyse")
basis_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-basis")
csu.expert.add(basis_circle)
for i in range(number_basis_feedback):
FeedbackFactory(circle=basis_circle, course_session=csu.course_session).save()
for i in range(number_analyse_feedback):
FeedbackFactory(circle=analyse_circle, course_session=csu.course_session).save()
response = self.client.get(f"/api/core/feedback/summary/{csu.course_session.course.id}/")
self.assertEqual(response.status_code, 200)
expected = {
analyse_circle.id: {"circle_id": analyse_circle.id, "count": number_analyse_feedback},
basis_circle.id: {"circle_id": basis_circle.id, "count": number_basis_feedback},
}
self.assertEqual(response.data, expected)
def test_can_only_see_feedback_from_own_circle(self):
number_basis_feedback = 5
number_analyse_feedback = 10
csu = CourseSessionUser.objects.get(
course_session=self.course_session,
user=User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
analyse_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-analyse")
basis_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-basis")
for i in range(number_basis_feedback):
FeedbackFactory(circle=basis_circle, course_session=csu.course_session).save()
for i in range(number_analyse_feedback):
FeedbackFactory(circle=analyse_circle, course_session=csu.course_session).save()
response = self.client.get(f"/api/core/feedback/summary/{csu.course_session.course.id}/")
self.assertEqual(response.status_code, 200)
expected = {
analyse_circle.id: {"circle_id": analyse_circle.id, "count": number_analyse_feedback},
}
self.assertEqual(response.data, expected)
def test_student_does_not_see_feedback(self):
self.client.login(username="student", password="test")
csu = CourseSessionUser.objects.get(
course_session=self.course_session,
user=self.user,
)
analyse_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-analyse")
FeedbackFactory(circle=analyse_circle, course_session=csu.course_session).save()
response = self.client.get(f"/api/core/feedback/summary/{csu.course_session.course.id}/")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data, {})