summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Mourier <qmo@odoo.com>2020-03-26 08:00:06 +0000
committerThibault Delavallée <tde@odoo.com>2020-03-26 15:57:43 +0000
commit843caa270c7d13e6c81ef8f077e469bd9746a2cf (patch)
treee2df5b36ae10a97155d44e004917615082ac64c9
parent37d281681c864f36c09de6f3895f9ef09a9dcdff (diff)
[FIX] website_slides: fix resequencing based on category
When new slides are added through frontend a resequencing of slides and categories sequence is done by calling _resequence_slides on the channel. However this method is not working as expected, and resequencing should take a category in order to better know where to start its resequencing. Otherwise it simply reorder slides in the same order as before, or in an unpredicted or prodicted but fasly order if new slide category has just been created. Task ID 2090927 X-original-commit: f038946ae2e3f174bee086281a541c6bc770e354
-rw-r--r--addons/website_slides/models/slide_channel.py8
-rw-r--r--addons/website_slides/tests/test_slide_utils.py24
2 files changed, 22 insertions, 10 deletions
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)
+ # 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.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)
+ 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):