From 32a34057c412a65a7fa4faf53969c27c67d7e4d2 Mon Sep 17 00:00:00 2001
From: Jean-Baptiste <bleme@pm.me>
Date: Wed, 6 Mar 2019 13:07:34 +0100
Subject: [PATCH] update: add test reproducing the #94 error

---
 djangoldp/tests/models.py     | 17 ++++++++++++++
 djangoldp/tests/tests_save.py | 42 +++++++++++++++++++++++++++++++----
 2 files changed, 55 insertions(+), 4 deletions(-)

diff --git a/djangoldp/tests/models.py b/djangoldp/tests/models.py
index a68a803c..0b880a1a 100644
--- a/djangoldp/tests/models.py
+++ b/djangoldp/tests/models.py
@@ -32,3 +32,20 @@ class Dummy(models.Model):
 class LDPDummy(Model):
     some = models.CharField(max_length=255, blank=True, null=True)
 
+
+class Invoice(Model):
+    title = models.CharField(max_length=255, blank=True, null=True)
+
+
+class Batch(Model):
+    invoice = models.ForeignKey(Invoice, on_delete=models.CASCADE, related_name='batches')
+    title = models.CharField(max_length=255, blank=True, null=True)
+
+
+class Task(models.Model):
+    batch = models.ForeignKey(Batch, on_delete=models.CASCADE, related_name='tasks')
+    title = models.CharField(max_length=255)
+
+
+Batch._meta.serializer_fields = ['@id', 'title', 'invoice', 'tasks']
+Task._meta.serializer_fields = ['@id', 'title', 'batch']
diff --git a/djangoldp/tests/tests_save.py b/djangoldp/tests/tests_save.py
index 36f724bb..d3424d1f 100644
--- a/djangoldp/tests/tests_save.py
+++ b/djangoldp/tests/tests_save.py
@@ -1,11 +1,45 @@
 from django.test import TestCase
 
 from djangoldp.serializers import LDPSerializer
-from djangoldp.tests.models import Skill, JobOffer
+from djangoldp.tests.models import Skill, JobOffer, Invoice
 
 
 class Save(TestCase):
 
+    def test_save_m2m_graph_with_many_nested(self):
+        invoice = {
+            "@graph": [
+                {
+                    "@id": "./",
+                    "batches": {"@id": "_:b381"},
+                    "title": "Nouvelle facture",
+                },
+                {
+                    "@id": "_:b381",
+                    "tasks": {"@id": "_:b382"},
+                    "title": "Batch 1"
+                },
+                {
+                    "@id": "_:b382",
+                    "title": "Tache 1"
+                }
+            ]
+        }
+
+        meta_args = {'model': Invoice, 'depth': 1, 'fields': ("@id", "title", "batches")}
+
+        meta_class = type('Meta', (), meta_args)
+        serializer_class = type(LDPSerializer)('InvoiceSerializer', (LDPSerializer,), {'Meta': meta_class})
+        serializer = serializer_class(data=invoice)
+        serializer.is_valid()
+        result = serializer.save()
+
+        self.assertEquals(result.title, "Nouvelle facture")
+        self.assertIs(result.batches.count(), 1)
+        self.assertEquals(result.batches.all()[0].title, "Batch 1")
+        self.assertIs(result.batches.all()[0].tasks.count(), 1)
+        #self.assertEquals(result.batches.all()[0].tasks.all()[0].title, "Tache 1")
+
     def test_save_m2m(self):
         skill1 = Skill.objects.create(title="skill1", obligatoire="obligatoire")
         skill2 = Skill.objects.create(title="skill2", obligatoire="obligatoire")
@@ -35,9 +69,9 @@ class Save(TestCase):
 
     def test_save_m2m_graph_simple(self):
         job = {"@graph": [
-                   {"title": "job test",
-                    },
-               ]}
+            {"title": "job test",
+             },
+        ]}
 
         meta_args = {'model': JobOffer, 'depth': 1, 'fields': ("@id", "title", "skills")}
 
-- 
GitLab