From 38b2977e9f2f7a7b5b945c6ae490beb81a044dd9 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 13 Feb 2015 13:50:35 +0000 Subject: [PATCH] Cast 'order' field to int so that it works with >10 items --- wagtail/wagtailadmin/blocks.py | 2 +- wagtail/wagtailadmin/tests/test_blocks.py | 33 +++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/wagtail/wagtailadmin/blocks.py b/wagtail/wagtailadmin/blocks.py index 6c27b4662..ef26655e5 100644 --- a/wagtail/wagtailadmin/blocks.py +++ b/wagtail/wagtailadmin/blocks.py @@ -780,7 +780,7 @@ class BaseStreamBlock(Block): values_with_indexes.append( ( - data['%s-%d-order' % (prefix, i)], + int(data['%s-%d-order' % (prefix, i)]), block_type_name, child_block.value_from_datadict(data, files, '%s-%d-value' % (prefix, i)), ) diff --git a/wagtail/wagtailadmin/tests/test_blocks.py b/wagtail/wagtailadmin/tests/test_blocks.py index 4a391808d..143106c0e 100644 --- a/wagtail/wagtailadmin/tests/test_blocks.py +++ b/wagtail/wagtailadmin/tests/test_blocks.py @@ -543,3 +543,36 @@ class TestStreamBlock(unittest.TestCase): self.assertIn('', html) self.assertIn('', html) + + def test_ordering_in_form_submission(self): + class ArticleBlock(blocks.StreamBlock): + heading = blocks.CharBlock() + paragraph = blocks.CharBlock() + + block = ArticleBlock() + + # check that items are ordered by the 'order' field, not the order they appear in the form + post_data = {'article-count': '3'} + for i in range(0, 3): + post_data.update({ + 'article-%d-deleted' % i: '', + 'article-%d-order' % i: str(2 - i), + 'article-%d-type' % i: 'heading', + 'article-%d-value' % i: "heading %d" % i + }) + + block_value = block.value_from_datadict(post_data, {}, 'article') + self.assertEqual(block_value[2].value, "heading 0") + + # check that items are ordered by 'order' numerically, not alphabetically + post_data = {'article-count': '12'} + for i in range(0, 12): + post_data.update({ + 'article-%d-deleted' % i: '', + 'article-%d-order' % i: str(i), + 'article-%d-type' % i: 'heading', + 'article-%d-value' % i: "heading %d" % i + }) + + block_value = block.value_from_datadict(post_data, {}, 'article') + self.assertEqual(block_value[2].value, "heading 2")