From d2fd4e58663dfd41fca224a0050bda433747c000 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste <bleme@pm.me> Date: Wed, 10 Apr 2019 22:00:19 +0200 Subject: [PATCH] WIP --- djangoldp/serializers.py | 7 +++++-- djangoldp/tests/runner.py | 15 ++++++++------- djangoldp/tests/tests_save.py | 25 ++++++++++++++++++++++++- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py index 3faea42c..3b0f101f 100644 --- a/djangoldp/serializers.py +++ b/djangoldp/serializers.py @@ -391,8 +391,11 @@ class LDPSerializer(HyperlinkedModelSerializer): def internal_create(self, validated_data, model): nested_fields = [] - nested_fields_name = list(filter(lambda key: isinstance(validated_data[key], list), validated_data)) - for field_name in nested_fields_name: + nested_fk_fields_name = list(filter(lambda key: isinstance(validated_data[key], dict), validated_data)) + # TODO replace fk_fields_name by the instance in validated_data + + nested_list_fields_name = list(filter(lambda key: isinstance(validated_data[key], list), validated_data)) + for field_name in nested_list_fields_name: nested_fields.append((field_name, validated_data.pop(field_name))) instance = model.objects.create(**validated_data) diff --git a/djangoldp/tests/runner.py b/djangoldp/tests/runner.py index 92b701b7..dcb50a99 100644 --- a/djangoldp/tests/runner.py +++ b/djangoldp/tests/runner.py @@ -53,13 +53,14 @@ from django.test.runner import DiscoverRunner test_runner = DiscoverRunner(verbosity=1) failures = test_runner.run_tests([ - 'djangoldp.tests.tests_ldp_model', - 'djangoldp.tests.tests_save', - 'djangoldp.tests.tests_user_permissions', - 'djangoldp.tests.tests_anonymous_permissions', - 'djangoldp.tests.tests_update', - 'djangoldp.tests.tests_auto_author', - 'djangoldp.tests.tests_get', + # 'djangoldp.tests.tests_ldp_model', + # 'djangoldp.tests.tests_save', + # 'djangoldp.tests.tests_user_permissions', + # 'djangoldp.tests.tests_anonymous_permissions', + # 'djangoldp.tests.tests_update', + # 'djangoldp.tests.tests_auto_author', + 'djangoldp.tests.tests_temp' + # 'djangoldp.tests.tests_get' ]) if failures: sys.exit(failures) diff --git a/djangoldp/tests/tests_save.py b/djangoldp/tests/tests_save.py index 27630999..a0926a2c 100644 --- a/djangoldp/tests/tests_save.py +++ b/djangoldp/tests/tests_save.py @@ -1,7 +1,7 @@ from django.test import TestCase from djangoldp.serializers import LDPSerializer -from djangoldp.tests.models import Skill, JobOffer, Invoice +from djangoldp.tests.models import Skill, JobOffer, Invoice, Message class Save(TestCase): @@ -144,3 +144,26 @@ class Save(TestCase): self.assertIs(result.joboffer_set.count(), 1) self.assertEquals(result.joboffer_set.get(), job) self.assertIs(result.joboffer_set.get().skills.count(), 1) + + def test_save_fk_graph_with_nested(self): + skill1 = Skill.objects.create(title="skill1", obligatoire="obligatoire") + skill2 = Skill.objects.create(title="skill2", obligatoire="obligatoire") + + message = {"@graph": [ + {"text": "message test", + "thread": {"@id": "_.123"} + }, + {"@id": "_.123", "description": "thread"}, + ]} + + meta_args = {'model': Message, 'depth': 2, 'fields': ("@id", "text", "thread")} + + meta_class = type('Meta', (), meta_args) + serializer_class = type(LDPSerializer)('MessageSerializer', (LDPSerializer,), {'Meta': meta_class}) + serializer = serializer_class(data=message) + serializer.is_valid() + result = serializer.save() + + self.assertEquals(result.text, "message test") + self.assertIsNotNone(result.thread) + self.assertEquals(result.thread.description, "thread") -- GitLab