diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py index eb6d415f096..681ed449f14 100644 --- a/addons/website_slides/models/slide_slide.py +++ b/addons/website_slides/models/slide_slide.py @@ -667,6 +667,15 @@ class Slide(models.Model): values['is_preview'] = True values['is_published'] = True + # if the slide type is changed, remove incompatible url or html_content + # done here to satisfy the SQL constraint + # using a stored-computed field in place does not work + if 'slide_category' in values: + if values['slide_category'] == 'article': + values = {'url': False, **values} + elif values['slide_category'] != 'article': + values = {'html_content': False, **values} + res = super(Slide, self).write(values) if values.get('is_published'): self.date_published = datetime.datetime.now() diff --git a/addons/website_slides/tests/test_slide_slide.py b/addons/website_slides/tests/test_slide_slide.py index efc6a6fc463..df9b855f4e3 100644 --- a/addons/website_slides/tests/test_slide_slide.py +++ b/addons/website_slides/tests/test_slide_slide.py @@ -81,6 +81,23 @@ class TestSlideInternals(slides_common.SlidesCase): slide.user_has_completed = True self.assertTrue(category_slides[0].user_has_completed_category) + def test_change_content_type(self): + """ To prevent constraint violation when changing type from video to article and vice-versa """ + slide = self.env['slide.slide'].with_context(website_slides_skip_fetch_metadata=True).create({ + 'name': 'dummy', + 'channel_id': self.channel.id, + 'slide_category': 'video', + 'is_published': True, + 'url': 'https://youtu.be/W0JQcpGLSFw', + }) + + slide.write({'slide_category': 'article', 'html_content': '

Hello

'}) + self.assertTrue(slide.html_content) + self.assertFalse(slide.url) + + slide.slide_category = 'document' + self.assertFalse(slide.html_content) + class TestVideoFromURL(slides_common.SlidesCase): def test_video_youtube(self): youtube_urls = {