Add serializers for different Feedbacks

This commit is contained in:
Christian Cueni 2023-12-06 17:11:39 +01:00
parent fa31def0b5
commit b1ddedb52a
4 changed files with 68 additions and 23 deletions

View File

@ -5,7 +5,6 @@ describe("feedbackStudent.cy.js", () => {
beforeEach(() => {
cy.manageCommand("cypress_reset");
login("test-student1@example.com", "test");
cy.visit("/course/test-lehrgang/learn/fahrzeug/feedback");
});
describe("Feedback UK", () => {
@ -178,8 +177,7 @@ describe("feedbackStudent.cy.js", () => {
cy.url().should((url) => {
expect(url).to.match(/\/reisen\/feedback(\?step=0)?$/);
});
cy.get('[data-cy="introduction"]').should(
"contain",
cy.get('[data-cy="introduction"]').contains(
"Wir bitten dich um dein Feedback. Es hilft uns, damit wir deine Lernerlebnisse verbessern können."
);
@ -204,7 +202,7 @@ describe("feedbackStudent.cy.js", () => {
(ac) => {
expect(ac.submitted).to.be.false;
expect(ac.data.satisfaction).to.equal(4);
expect(ac.data.instructor_competence).to.equal(null);
expect(ac.data.course_positive_feedback).to.equal(null);
}
);
cy.get('[data-cy="radio-3"]').click();
@ -262,7 +260,7 @@ describe("feedbackStudent.cy.js", () => {
// marked complete in circle
cy.url().should((url) => {
expect(url).to.match(/\/reisen#lu-transfer?$/);
expect(url).to.match(/\/reisen#lu-transfer-reflexion-feedback?$/);
});
cy.reload();
cy.get(
@ -279,13 +277,12 @@ describe("feedbackStudent.cy.js", () => {
expect(ac.submitted).to.be.true;
expect(ac.data).to.deep.equal({
course_negative_feedback: "Ich bin unzufrieden mit einigen Sachen.",
course_positive_feedback:
"Ich bin zufrieden mit den meisten Dingen.",
course_positive_feedback: "Der Circle ist eigentlich ganz nett.",
goal_attainment: 3,
preparation_task_clarity: false,
proficiency: 80,
satisfaction: 4,
would_recommend: true,
would_recommend: false,
});
}
);

View File

@ -7,7 +7,10 @@ from vbv_lernwelt.course.models import CourseSession
from vbv_lernwelt.feedback.graphql.types import (
FeedbackResponseObjectType as FeedbackResponseType,
)
from vbv_lernwelt.feedback.serializers import CourseFeedbackSerializer
from vbv_lernwelt.feedback.serializers import (
CourseFeedbackSerializerUK,
CourseFeedbackSerializerVV,
)
from vbv_lernwelt.feedback.services import update_feedback_response
from vbv_lernwelt.iam.permissions import has_course_session_access
from vbv_lernwelt.learnpath.models import (
@ -76,7 +79,17 @@ class SendFeedbackMutation(graphene.Mutation):
course_session_id=course_session_id,
)
serializer = CourseFeedbackSerializer(data=data)
if learning_content_type == "learnpath.LearningContentFeedbackVV":
serializer = CourseFeedbackSerializerVV(data=data)
elif learning_content_type == "learnpath.LearningContentFeedbackUK":
serializer = CourseFeedbackSerializerUK(data=data)
else:
errors = [
ErrorType(
field="learningContentType", messages="Invalid learningContentType"
)
]
return SendFeedbackMutation(errors=errors)
if not serializer.is_valid():
logger.error(

View File

@ -13,7 +13,7 @@ class FeedbackIntegerField(serializers.IntegerField):
)
class CourseFeedbackSerializer(serializers.Serializer):
class CourseFeedbackSerializerUK(serializers.Serializer):
satisfaction = FeedbackIntegerField()
goal_attainment = FeedbackIntegerField()
proficiency = serializers.IntegerField(required=False, allow_null=True)
@ -33,6 +33,21 @@ class CourseFeedbackSerializer(serializers.Serializer):
)
class CourseFeedbackSerializerVV(serializers.Serializer):
satisfaction = FeedbackIntegerField()
goal_attainment = FeedbackIntegerField()
proficiency = serializers.IntegerField(required=False, allow_null=True)
preparation_task_clarity = serializers.BooleanField(required=False, allow_null=True)
materials_rating = FeedbackIntegerField()
would_recommend = serializers.BooleanField(required=False, allow_null=True)
course_positive_feedback = serializers.CharField(
required=False, allow_null=True, allow_blank=True
)
course_negative_feedback = serializers.CharField(
required=False, allow_null=True, allow_blank=True
)
class CypressFeedbackResponseSerializer(serializers.ModelSerializer):
class Meta:
model = FeedbackResponse

View File

@ -33,18 +33,7 @@ def update_feedback_response(
original_data = feedback_response.data
updated_data = validated_data
initial_data = {
"satisfaction": None,
"goal_attainment": None,
"proficiency": None,
"preparation_task_clarity": None,
"instructor_competence": None,
"instructor_respect": None,
"instructor_open_feedback": "",
"would_recommend": None,
"course_negative_feedback": "",
"course_positive_feedback": "",
}
initial_data = initial_data_for_feedback_page(learning_content_feedback_page)
merged_data = initial_data | {
key: updated_data[key]
@ -78,3 +67,34 @@ def update_feedback_response(
)
return feedback_response
def initial_data_for_feedback_page(
learning_content_feedback_page: Union[
LearningContentFeedbackUK, LearningContentFeedbackVV
]
):
if hasattr(learning_content_feedback_page, "learningcontentfeedbackuk"):
return {
"satisfaction": None,
"goal_attainment": None,
"proficiency": None,
"preparation_task_clarity": None,
"instructor_competence": None,
"instructor_respect": None,
"instructor_open_feedback": "",
"would_recommend": None,
"course_negative_feedback": "",
"course_positive_feedback": "",
}
if hasattr(learning_content_feedback_page, "learningcontentfeedbackvv"):
return {
"satisfaction": None,
"goal_attainment": None,
"proficiency": None,
"preparation_task_clarity": None,
"would_recommend": None,
"course_negative_feedback": "",
"course_positive_feedback": "",
}
return {}