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(() => { beforeEach(() => {
cy.manageCommand("cypress_reset"); cy.manageCommand("cypress_reset");
login("test-student1@example.com", "test"); login("test-student1@example.com", "test");
cy.visit("/course/test-lehrgang/learn/fahrzeug/feedback");
}); });
describe("Feedback UK", () => { describe("Feedback UK", () => {
@ -178,8 +177,7 @@ describe("feedbackStudent.cy.js", () => {
cy.url().should((url) => { cy.url().should((url) => {
expect(url).to.match(/\/reisen\/feedback(\?step=0)?$/); expect(url).to.match(/\/reisen\/feedback(\?step=0)?$/);
}); });
cy.get('[data-cy="introduction"]').should( cy.get('[data-cy="introduction"]').contains(
"contain",
"Wir bitten dich um dein Feedback. Es hilft uns, damit wir deine Lernerlebnisse verbessern können." "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) => { (ac) => {
expect(ac.submitted).to.be.false; expect(ac.submitted).to.be.false;
expect(ac.data.satisfaction).to.equal(4); 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(); cy.get('[data-cy="radio-3"]').click();
@ -262,7 +260,7 @@ describe("feedbackStudent.cy.js", () => {
// marked complete in circle // marked complete in circle
cy.url().should((url) => { cy.url().should((url) => {
expect(url).to.match(/\/reisen#lu-transfer?$/); expect(url).to.match(/\/reisen#lu-transfer-reflexion-feedback?$/);
}); });
cy.reload(); cy.reload();
cy.get( cy.get(
@ -279,13 +277,12 @@ describe("feedbackStudent.cy.js", () => {
expect(ac.submitted).to.be.true; expect(ac.submitted).to.be.true;
expect(ac.data).to.deep.equal({ expect(ac.data).to.deep.equal({
course_negative_feedback: "Ich bin unzufrieden mit einigen Sachen.", course_negative_feedback: "Ich bin unzufrieden mit einigen Sachen.",
course_positive_feedback: course_positive_feedback: "Der Circle ist eigentlich ganz nett.",
"Ich bin zufrieden mit den meisten Dingen.",
goal_attainment: 3, goal_attainment: 3,
preparation_task_clarity: false, preparation_task_clarity: false,
proficiency: 80, proficiency: 80,
satisfaction: 4, 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 ( from vbv_lernwelt.feedback.graphql.types import (
FeedbackResponseObjectType as FeedbackResponseType, 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.feedback.services import update_feedback_response
from vbv_lernwelt.iam.permissions import has_course_session_access from vbv_lernwelt.iam.permissions import has_course_session_access
from vbv_lernwelt.learnpath.models import ( from vbv_lernwelt.learnpath.models import (
@ -76,7 +79,17 @@ class SendFeedbackMutation(graphene.Mutation):
course_session_id=course_session_id, 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(): if not serializer.is_valid():
logger.error( logger.error(

View File

@ -13,7 +13,7 @@ class FeedbackIntegerField(serializers.IntegerField):
) )
class CourseFeedbackSerializer(serializers.Serializer): class CourseFeedbackSerializerUK(serializers.Serializer):
satisfaction = FeedbackIntegerField() satisfaction = FeedbackIntegerField()
goal_attainment = FeedbackIntegerField() goal_attainment = FeedbackIntegerField()
proficiency = serializers.IntegerField(required=False, allow_null=True) 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 CypressFeedbackResponseSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = FeedbackResponse model = FeedbackResponse

View File

@ -33,18 +33,7 @@ def update_feedback_response(
original_data = feedback_response.data original_data = feedback_response.data
updated_data = validated_data updated_data = validated_data
initial_data = { initial_data = initial_data_for_feedback_page(learning_content_feedback_page)
"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": "",
}
merged_data = initial_data | { merged_data = initial_data | {
key: updated_data[key] key: updated_data[key]
@ -78,3 +67,34 @@ def update_feedback_response(
) )
return 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 {}