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, {})