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