From cb2a8f1348aa72bfb1c8870ed4c0b929802a01d8 Mon Sep 17 00:00:00 2001
From: Erwan Rouchet <rouchet@teklia.com>
Date: Wed, 4 Sep 2024 12:08:12 +0200
Subject: [PATCH] Fix max orderings in CreateElementChildren

---
 arkindex/documents/serializers/elements.py     |  1 +
 arkindex/documents/tests/test_bulk_children.py | 12 +++++++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/arkindex/documents/serializers/elements.py b/arkindex/documents/serializers/elements.py
index bd9ef10be0..2125a6b089 100644
--- a/arkindex/documents/serializers/elements.py
+++ b/arkindex/documents/serializers/elements.py
@@ -1006,6 +1006,7 @@ class ElementChildrenCreateSerializer(serializers.Serializer):
                 ElementPath.objects
                 .using("default")
                 .filter(path__in=new_parent_paths)
+                .values("path")
                 .annotate(max_ordering=Max("ordering") + 1)
                 .values_list("path", "max_ordering")
             )
diff --git a/arkindex/documents/tests/test_bulk_children.py b/arkindex/documents/tests/test_bulk_children.py
index ea4cc6ab81..4850b33add 100644
--- a/arkindex/documents/tests/test_bulk_children.py
+++ b/arkindex/documents/tests/test_bulk_children.py
@@ -149,6 +149,8 @@ class TestElementChildrenCreate(FixtureAPITestCase):
         other_parent = self.corpus.elements.create(type=self.volume2.type, name="Other parent")
         self.page2.add_parent(other_parent)
         self.page3.add_parent(other_parent)
+        page4 = self.corpus.elements.create(type=self.page3.type, name="Page 4")
+        page4.add_parent(self.volume2)
 
         self.assertQuerySetEqual(
             self.volume2.paths.values_list("path", flat=True),
@@ -170,6 +172,10 @@ class TestElementChildrenCreate(FixtureAPITestCase):
                 ([self.volume1.id, self.volume2.id], 2),
             ],
         )
+        self.assertQuerySetEqual(
+            page4.paths.values_list("path", "ordering"),
+            [([self.volume1.id, self.volume2.id], 3)],
+        )
 
         with force_constraints_immediate(), self.assertNumQueries(10):
             response = self.client.post(
@@ -187,7 +193,7 @@ class TestElementChildrenCreate(FixtureAPITestCase):
         self.assertQuerySetEqual(
             self.page1.paths.values_list("path", "ordering"),
             # The top-level path is removed, and the page is back in the volume, in last position
-            [([self.volume1.id, self.volume2.id], 5)],
+            [([self.volume1.id, self.volume2.id], 6)],
         )
         self.assertQuerySetEqual(
             self.page2.paths.values_list("path", "ordering").order_by("ordering"),
@@ -195,7 +201,7 @@ class TestElementChildrenCreate(FixtureAPITestCase):
                 # The path to the other parent is left untouched
                 ([other_parent.id], 0),
                 # The page is back in the volume, in second position
-                ([self.volume1.id, self.volume2.id], 4),
+                ([self.volume1.id, self.volume2.id], 5),
             ],
         )
         self.assertQuerySetEqual(
@@ -204,6 +210,6 @@ class TestElementChildrenCreate(FixtureAPITestCase):
                 # The path to the other parent is left untouched
                 ([other_parent.id], 1),
                 # The last page got reordered
-                ([self.volume1.id, self.volume2.id], 3),
+                ([self.volume1.id, self.volume2.id], 4),
             ],
         )
-- 
GitLab