Skip to content
Snippets Groups Projects
Commit 0a980d4b authored by Quentin Mourier's avatar Quentin Mourier Committed by Thibault Delavallée
Browse files

[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
parent a4d170ad
Branches
Tags
No related merge requests found
......@@ -590,13 +590,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:
......@@ -607,7 +607,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
......
......@@ -55,20 +55,32 @@ class TestSequencing(slides_common.SlidesCase):
@users('user_publisher')
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):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment