feat: Feedback member API to get/put lu feedback
This commit is contained in:
parent
d2352d6166
commit
16cd16212a
|
|
@ -78,9 +78,22 @@ class SelfEvaluationFeedbackAPI(APITestCase):
|
||||||
|
|
||||||
# WHEN
|
# WHEN
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
reverse("start_self_evaluation_feedback"),
|
reverse(
|
||||||
|
"start_self_evaluation_feedback",
|
||||||
|
args=[learning_unit.id],
|
||||||
|
),
|
||||||
|
{
|
||||||
|
"feedback_provider_user_id": self.mentor.id,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
# make sure re-starting is a no-op
|
||||||
|
self.client.post(
|
||||||
|
reverse(
|
||||||
|
"start_self_evaluation_feedback",
|
||||||
|
args=[learning_unit.id],
|
||||||
|
),
|
||||||
{
|
{
|
||||||
"learning_unit_id": learning_unit.id,
|
|
||||||
"feedback_provider_user_id": self.mentor.id,
|
"feedback_provider_user_id": self.mentor.id,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
@ -110,9 +123,8 @@ class SelfEvaluationFeedbackAPI(APITestCase):
|
||||||
|
|
||||||
# WHEN
|
# WHEN
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
reverse("start_self_evaluation_feedback"),
|
reverse("start_self_evaluation_feedback", args=[learning_unit.id]),
|
||||||
{
|
{
|
||||||
"learning_unit_id": learning_unit.id,
|
|
||||||
"feedback_provider_user_id": not_a_mentor.id,
|
"feedback_provider_user_id": not_a_mentor.id,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
@ -120,7 +132,102 @@ class SelfEvaluationFeedbackAPI(APITestCase):
|
||||||
# THEN
|
# THEN
|
||||||
self.assertEqual(response.status_code, 403)
|
self.assertEqual(response.status_code, 403)
|
||||||
|
|
||||||
def test_get_provider_self_evaluation_feedback(self):
|
def test_get_self_evaluation_feedback_as_requester(self):
|
||||||
|
"""Tests endpoint of feedback REQUESTER"""
|
||||||
|
|
||||||
|
# GIVEN
|
||||||
|
learning_unit = create_learning_unit(course=self.course, circle=self.circle)
|
||||||
|
|
||||||
|
performance_criteria_1 = create_performance_criteria_page(
|
||||||
|
course=self.course,
|
||||||
|
course_page=self.course_page,
|
||||||
|
circle=self.circle,
|
||||||
|
learning_unit=learning_unit,
|
||||||
|
)
|
||||||
|
|
||||||
|
create_performance_criteria_page(
|
||||||
|
course=self.course,
|
||||||
|
course_page=self.course_page,
|
||||||
|
circle=self.circle,
|
||||||
|
learning_unit=learning_unit,
|
||||||
|
)
|
||||||
|
|
||||||
|
completion = mark_course_completion(
|
||||||
|
page=performance_criteria_1,
|
||||||
|
user=self.member,
|
||||||
|
course_session=self.course_session,
|
||||||
|
completion_status=CourseCompletionStatus.SUCCESS.value,
|
||||||
|
)
|
||||||
|
|
||||||
|
self_evaluation_feedback = create_self_evaluation_feedback(
|
||||||
|
learning_unit=learning_unit,
|
||||||
|
feedback_requester_user=self.member,
|
||||||
|
feedback_provider_user=self.mentor,
|
||||||
|
)
|
||||||
|
|
||||||
|
CourseCompletionFeedback.objects.create(
|
||||||
|
feedback=self_evaluation_feedback,
|
||||||
|
course_completion=completion,
|
||||||
|
feedback_assessment=CourseCompletionStatus.FAIL.value,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.client.force_login(self.member)
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
response = self.client.get(
|
||||||
|
reverse(
|
||||||
|
"get_self_evaluation_feedback_as_requester",
|
||||||
|
args=[learning_unit.id],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
feedback = response.data
|
||||||
|
self.assertEqual(feedback["learning_unit_id"], learning_unit.id)
|
||||||
|
self.assertEqual(feedback["feedback_submitted"], False)
|
||||||
|
self.assertEqual(feedback["circle_name"], self.circle.title)
|
||||||
|
|
||||||
|
provider_user = feedback["feedback_provider_user"]
|
||||||
|
self.assertEqual(provider_user["id"], str(self.mentor.id)) # noqa
|
||||||
|
self.assertEqual(provider_user["first_name"], self.mentor.first_name)
|
||||||
|
self.assertEqual(provider_user["last_name"], self.mentor.last_name)
|
||||||
|
self.assertEqual(provider_user["avatar_url"], self.mentor.avatar_url)
|
||||||
|
|
||||||
|
requester_user = feedback["feedback_requester_user"]
|
||||||
|
self.assertEqual(requester_user["id"], str(self.member.id)) # noqa
|
||||||
|
self.assertEqual(requester_user["first_name"], self.member.first_name)
|
||||||
|
self.assertEqual(requester_user["last_name"], self.member.last_name)
|
||||||
|
self.assertEqual(requester_user["avatar_url"], self.member.avatar_url)
|
||||||
|
|
||||||
|
self.assertEqual(len(feedback["criteria"]), 2)
|
||||||
|
|
||||||
|
first_criteria = feedback["criteria"][0]
|
||||||
|
self.assertEqual(first_criteria["course_completion_id"], completion.id)
|
||||||
|
self.assertEqual(first_criteria["title"], performance_criteria_1.title)
|
||||||
|
self.assertEqual(
|
||||||
|
first_criteria["self_assessment"],
|
||||||
|
CourseCompletionStatus.SUCCESS.value,
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
first_criteria["feedback_assessment"], CourseCompletionStatus.FAIL.value
|
||||||
|
)
|
||||||
|
|
||||||
|
second_criteria = feedback["criteria"][1]
|
||||||
|
self.assertEqual(second_criteria["course_completion_id"], None)
|
||||||
|
self.assertEqual(second_criteria["title"], performance_criteria_1.title)
|
||||||
|
self.assertEqual(
|
||||||
|
second_criteria["self_assessment"], CourseCompletionStatus.UNKNOWN.value
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
second_criteria["feedback_assessment"],
|
||||||
|
CourseCompletionStatus.UNKNOWN.value,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_get_self_evaluation_feedback_as_provider(self):
|
||||||
|
"""Tests endpoint of feedback PROVIDER"""
|
||||||
|
|
||||||
# GIVEN
|
# GIVEN
|
||||||
learning_unit = create_learning_unit(course=self.course, circle=self.circle)
|
learning_unit = create_learning_unit(course=self.course, circle=self.circle)
|
||||||
|
|
||||||
|
|
@ -162,7 +269,7 @@ class SelfEvaluationFeedbackAPI(APITestCase):
|
||||||
# WHEN
|
# WHEN
|
||||||
response = self.client.get(
|
response = self.client.get(
|
||||||
reverse(
|
reverse(
|
||||||
"get_provider_self_evaluation_feedback",
|
"get_self_evaluation_feedback_as_provider",
|
||||||
args=[self_evaluation_feedback.id],
|
args=[self_evaluation_feedback.id],
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -2,17 +2,23 @@ from django.urls import path
|
||||||
|
|
||||||
from vbv_lernwelt.self_evaluation_feedback.views import (
|
from vbv_lernwelt.self_evaluation_feedback.views import (
|
||||||
add_provider_self_evaluation_feedback,
|
add_provider_self_evaluation_feedback,
|
||||||
get_provider_self_evaluation_feedback,
|
get_self_evaluation_feedback_as_provider,
|
||||||
|
get_self_evaluation_feedback_as_requester,
|
||||||
submit_provider_self_evaluation_feedback,
|
submit_provider_self_evaluation_feedback,
|
||||||
start_self_evaluation_feedback,
|
start_self_evaluation_feedback,
|
||||||
)
|
)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path(
|
path(
|
||||||
"requester/feedback/start",
|
"requester/<int:learning_unit_id>/feedback/start",
|
||||||
start_self_evaluation_feedback,
|
start_self_evaluation_feedback,
|
||||||
name="start_self_evaluation_feedback",
|
name="start_self_evaluation_feedback",
|
||||||
),
|
),
|
||||||
|
path(
|
||||||
|
"requester/<int:learning_unit_id>/feedback",
|
||||||
|
get_self_evaluation_feedback_as_requester,
|
||||||
|
name="get_self_evaluation_feedback_as_requester",
|
||||||
|
),
|
||||||
path(
|
path(
|
||||||
"provider/feedback/<int:feedback_id>/submit",
|
"provider/feedback/<int:feedback_id>/submit",
|
||||||
submit_provider_self_evaluation_feedback,
|
submit_provider_self_evaluation_feedback,
|
||||||
|
|
@ -25,7 +31,7 @@ urlpatterns = [
|
||||||
),
|
),
|
||||||
path(
|
path(
|
||||||
"provider/feedback/<int:feedback_id>",
|
"provider/feedback/<int:feedback_id>",
|
||||||
get_provider_self_evaluation_feedback,
|
get_self_evaluation_feedback_as_provider,
|
||||||
name="get_provider_self_evaluation_feedback",
|
name="get_self_evaluation_feedback_as_provider",
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,7 @@ from vbv_lernwelt.self_evaluation_feedback.serializers import (
|
||||||
|
|
||||||
@api_view(["POST"])
|
@api_view(["POST"])
|
||||||
@permission_classes([IsAuthenticated])
|
@permission_classes([IsAuthenticated])
|
||||||
def start_self_evaluation_feedback(request):
|
def start_self_evaluation_feedback(request, learning_unit_id):
|
||||||
learning_unit_id = request.data.get("learning_unit_id")
|
|
||||||
feedback_provider_user_id = request.data.get("feedback_provider_user_id")
|
feedback_provider_user_id = request.data.get("feedback_provider_user_id")
|
||||||
|
|
||||||
learning_unit = get_object_or_404(LearningUnit, id=learning_unit_id)
|
learning_unit = get_object_or_404(LearningUnit, id=learning_unit_id)
|
||||||
|
|
@ -33,13 +32,16 @@ def start_self_evaluation_feedback(request):
|
||||||
).exists():
|
).exists():
|
||||||
raise PermissionDenied()
|
raise PermissionDenied()
|
||||||
|
|
||||||
SelfEvaluationFeedback.objects.create(
|
# calling start multiple times shall be a no-op
|
||||||
|
_, created = SelfEvaluationFeedback.objects.get_or_create(
|
||||||
feedback_requester_user=request.user,
|
feedback_requester_user=request.user,
|
||||||
feedback_provider_user=feedback_provider_user,
|
feedback_provider_user=feedback_provider_user,
|
||||||
learning_unit=learning_unit,
|
learning_unit=learning_unit,
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO: Create notification for feedback_provider_user
|
if created:
|
||||||
|
# TODO: Create notification for feedback_provider_user
|
||||||
|
...
|
||||||
|
|
||||||
return Response({"success": True})
|
return Response({"success": True})
|
||||||
|
|
||||||
|
|
@ -59,7 +61,7 @@ def submit_provider_self_evaluation_feedback(request, feedback_id):
|
||||||
|
|
||||||
@api_view(["GET"])
|
@api_view(["GET"])
|
||||||
@permission_classes([IsAuthenticated])
|
@permission_classes([IsAuthenticated])
|
||||||
def get_provider_self_evaluation_feedback(request, feedback_id):
|
def get_self_evaluation_feedback_as_provider(request, feedback_id):
|
||||||
feedback = get_object_or_404(
|
feedback = get_object_or_404(
|
||||||
SelfEvaluationFeedback, id=feedback_id, feedback_provider_user=request.user
|
SelfEvaluationFeedback, id=feedback_id, feedback_provider_user=request.user
|
||||||
)
|
)
|
||||||
|
|
@ -67,6 +69,20 @@ def get_provider_self_evaluation_feedback(request, feedback_id):
|
||||||
return Response(SelfEvaluationFeedbackSerializer(feedback).data)
|
return Response(SelfEvaluationFeedbackSerializer(feedback).data)
|
||||||
|
|
||||||
|
|
||||||
|
@api_view(["GET"])
|
||||||
|
@permission_classes([IsAuthenticated])
|
||||||
|
def get_self_evaluation_feedback_as_requester(request, learning_unit_id):
|
||||||
|
learning_unit = get_object_or_404(LearningUnit, id=learning_unit_id)
|
||||||
|
|
||||||
|
feedback = get_object_or_404(
|
||||||
|
SelfEvaluationFeedback,
|
||||||
|
learning_unit=learning_unit,
|
||||||
|
feedback_requester_user=request.user,
|
||||||
|
)
|
||||||
|
|
||||||
|
return Response(SelfEvaluationFeedbackSerializer(feedback).data)
|
||||||
|
|
||||||
|
|
||||||
@api_view(["PUT"])
|
@api_view(["PUT"])
|
||||||
@permission_classes([IsAuthenticated])
|
@permission_classes([IsAuthenticated])
|
||||||
def add_provider_self_evaluation_feedback(request, feedback_id):
|
def add_provider_self_evaluation_feedback(request, feedback_id):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue