diff --git a/djangoldp/tests/models.py b/djangoldp/tests/models.py index a68a803c1f26baa1bdb47ddd2c22706666b4c07f..0b880a1a57466db04f11984d60b1eddc49e26c43 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 36f724bb19de040e21eac8d4204fc5a0ea39b5c7..d3424d1f2b622430866de371ecd7b42efc630096 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")}