diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index 47a823b6702..214a2025f2c 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -621,13 +621,13 @@ class Channel(models.Model): }) return category_data - def _resequence_slides(self, slide): + def _resequence_slides(self, slide, force_category=False): ids_to_resequence = self.slide_ids.ids index_of_added_slide = ids_to_resequence.index(slide.id) - category_id = slide.category_id.id next_category_id = None if self.slide_category_ids: - index_of_category = self.slide_category_ids.ids.index(category_id) if category_id else None + force_category_id = force_category.id if force_category else slide.category_id.id + index_of_category = self.slide_category_ids.ids.index(force_category_id) if force_category_id else None if index_of_category is None: next_category_id = self.slide_category_ids.ids[0] elif index_of_category < len(self.slide_category_ids.ids) - 1: @@ -638,7 +638,7 @@ class Channel(models.Model): index_of_next_category = ids_to_resequence.index(next_category_id) ids_to_resequence.insert(index_of_next_category, added_slide_id) for i, record in enumerate(self.env['slide.slide'].browse(ids_to_resequence)): - record.write({'sequence': i}) + record.write({'sequence': i + 1}) # start at 1 to make people scream else: slide.write({ 'sequence': self.env['slide.slide'].browse(ids_to_resequence[-1]).sequence + 1 diff --git a/addons/website_slides/tests/test_slide_utils.py b/addons/website_slides/tests/test_slide_utils.py index 158d59e94a3..489f2de0d0f 100644 --- a/addons/website_slides/tests/test_slide_utils.py +++ b/addons/website_slides/tests/test_slide_utils.py @@ -55,20 +55,32 @@ class TestSequencing(slides_common.SlidesCase): @users('user_officer') def test_resequence(self): + self.assertEqual(self.slide.sequence, 1) self.category.write({'sequence': 4}) self.slide_2.write({'sequence': 8}) self.slide_3.write({'sequence': 3}) self.channel.invalidate_cache() self.assertEqual([s.id for s in self.channel.slide_ids], [self.slide.id, self.slide_3.id, self.category.id, self.slide_2.id]) - self.assertEqual(self.slide.sequence, 1) - # self.channel._resequence_slides(self.slide) - # self.channel.invalidate_cache() - # # self.assertEqual([s.id for s in self.channel.slide_ids], [self.slide.id, self.slide_3.id, self.category.id, self.slide_2.id]) - # self.assertEqual(self.slide_3.sequence, 2) - # self.assertEqual(self.category.sequence, 3) - # self.assertEqual(self.slide_2.sequence, 4) + + # insert a new category and check resequence_slides does as expected + new_category = self.env['slide.slide'].create({ + 'name': 'Sub-cooking Tips Category', + 'channel_id': self.channel.id, + 'is_category': True, + 'is_published': True, + 'sequence': 2, + }) + new_category.flush() + self.channel.invalidate_cache() + self.channel._resequence_slides(self.slide_3, force_category=new_category) + self.assertEqual(self.slide.sequence, 1) + self.assertEqual(new_category.sequence, 2) + self.assertEqual(self.slide_3.sequence, 3) + self.assertEqual(self.category.sequence, 4) + self.assertEqual(self.slide_2.sequence, 5) + self.assertEqual([s.id for s in self.channel.slide_ids], [self.slide.id, new_category.id, self.slide_3.id, self.category.id, self.slide_2.id]) class TestFromURL(slides_common.SlidesCase):