Skip to content

Commit

Permalink
[#12] Fix post form
Browse files Browse the repository at this point in the history
  • Loading branch information
wayangalihpratama committed Sep 5, 2023
1 parent b998772 commit b3f86b9
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 18 deletions.
5 changes: 2 additions & 3 deletions backend/akvo/core_forms/serializers/form.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ class AddFormSerializer(serializers.Serializer):
version = CustomIntegerField(
required=False, allow_null=True, default=1)
translations = CustomListField(required=False, allow_null=True)
question_group = AddQuestionGroupSerializer(many=True)
question_group = AddQuestionGroupSerializer(many=True, required=False)

def __init__(self, *args, **kwargs):
# Get the value
Expand All @@ -99,14 +99,13 @@ def create(self, validated_data):
question_groups_data = validated_data.pop("question_group", [])
form = Forms.objects.create(**validated_data)
for qg in question_groups_data:
qg["form"] = form
serializer = AddQuestionGroupSerializer(data=qg)
if not serializer.is_valid():
raise serializers.ValidationError({
"message": validate_serializers_message(serializer.errors),
"details": serializer.errors,
})
serializer.save()
serializer.save(form=form)
return object
return form

Expand Down
3 changes: 1 addition & 2 deletions backend/akvo/core_forms/serializers/question.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,10 +177,9 @@ def validate_option(self, value):
return value

def create(self, validated_data):
validated_data.pop("form", None)
options_data = validated_data.pop("option", [])
qtype = validated_data.pop("type", None)
validated_data["type"] = getattr(QuestionTypes, qtype)
options_data = validated_data.pop("option", [])
q = Questions.objects.create(**validated_data)
for opt in options_data:
opt["question"] = q
Expand Down
13 changes: 8 additions & 5 deletions backend/akvo/core_forms/serializers/question_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,13 @@ class AddQuestionGroupSerializer(serializers.Serializer):
translations = CustomListField(required=False, allow_null=True)
question = AddQuestionSerializer(many=True)

def __init__(self, **kwargs):
super().__init__(**kwargs)
def __init__(self, *args, **kwargs):
# Get the value
form = kwargs.pop('form', None)
super(AddQuestionGroupSerializer, self).__init__(*args, **kwargs)
# Set the value
if form:
self.fields['form'].initial = form

def validate_question(self, value):
serializer = AddQuestionSerializer(data=value, many=True)
Expand All @@ -66,15 +71,13 @@ def create(self, validated_data):
questions_data = validated_data.pop("question", [])
qg = QuestionGroups.objects.create(**validated_data)
for q in questions_data:
q["form"] = validated_data.get("form")
q["question_group"] = qg
serializer = AddQuestionSerializer(data=q)
if not serializer.is_valid():
raise serializers.ValidationError({
"message": validate_serializers_message(serializer.errors),
"details": serializer.errors,
})
serializer.save()
serializer.save(form=qg.form, question_group=qg)
return object
return qg

Expand Down
4 changes: 3 additions & 1 deletion backend/akvo/core_forms/tests/test_form_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ def test_endpoint_post_form(self):
data = self.client.post(
"/api/form",
data=expected_payload,
content_type="application/json"
)
self.assertEqual(data.status_code, 200)
result = data.json()
Expand All @@ -55,4 +56,5 @@ def test_endpoint_post_form(self):
)
self.assertEqual(data.status_code, 200)
result = data.json()
print(json.dumps(result, indent=2))
self.assertEqual(result, {})
# print(json.dumps(result, indent=2))
7 changes: 0 additions & 7 deletions backend/akvo/core_forms/tests/test_form_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
ListFormSerializer,
AddFormSerializer
)
from akvo.core_forms.constants import QuestionTypes


class TestFormSerializers(TestCase):
Expand Down Expand Up @@ -54,10 +53,4 @@ def test_add_form_serializer_valid(self):
with open('./source/static/example_form_payload.json', 'r') as f:
expected_payload = json.load(f)
serializer = AddFormSerializer(data=expected_payload)
if not serializer.is_valid():
print('[ ERROR ]', serializer.errors)
print([
(key, value) for key, value
in QuestionTypes.FieldStr.items()
])
self.assertTrue(serializer.is_valid())

0 comments on commit b3f86b9

Please sign in to comment.