Files
odoo_source/addons/website_slides/tests/test_slide_utils.py
T
Didier d761a73ad0 [IMP] website_slides: improve archive management
PURPOSE

Archiving a course should also archive its content, and unpublish it as it
should not be accessible from outside. Improve archive / publish management
between a course and its slides.

SPECIFICATIONS

Show the content of an archived course having archived slides. When slides and
course are archived its content should still be displayed. This is done using
an active test in context of field.

Propagate channel archive to content. Also unpublish archived slides.

LINKS

Continuity/IMP of task-2170708
Task-2225598

closes odoo/odoo#52233

Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
2020-08-12 10:26:55 +00:00

149 lines
6.8 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.website_slides.tests import common as slides_common
from odoo.tests.common import users
class TestSlidesManagement(slides_common.SlidesCase):
@users('user_officer')
def test_get_categorized_slides(self):
new_category = self.env['slide.slide'].create({
'name': 'Cooking Tips for Cooking Humans',
'channel_id': self.channel.id,
'is_category': True,
'sequence': 5,
})
order = self.env['slide.slide']._order_by_strategy['sequence']
categorized_slides = self.channel._get_categorized_slides([], order)
self.assertEqual(categorized_slides[0]['category'], False)
self.assertEqual(categorized_slides[1]['category'], self.category)
self.assertEqual(categorized_slides[1]['total_slides'], 2)
self.assertEqual(categorized_slides[2]['total_slides'], 0)
self.assertEqual(categorized_slides[2]['category'], new_category)
@users('user_manager')
def test_archive(self):
self.assertTrue(self.channel.active)
self.assertTrue(self.channel.is_published)
for slide in self.channel.slide_ids:
self.assertTrue(slide.active, "All slide should be archived when a channel is archived")
self.assertTrue(slide.is_published, "All slide should be unpublished when a channel is archived")
self.channel.toggle_active()
self.assertFalse(self.channel.active)
self.assertFalse(self.channel.is_published)
for slide in self.channel.slide_ids:
self.assertFalse(slide.active, "All slides should be archived when a channel is archived")
if not slide.is_category:
self.assertFalse(slide.is_published, "All slides should be unpublished when a channel is archived, except categories")
else:
self.assertTrue(slide.is_published, "All slides should be unpublished when a channel is archived, except categories")
class TestSequencing(slides_common.SlidesCase):
@users('user_officer')
def test_category_update(self):
self.assertEqual(self.channel.slide_category_ids, self.category)
self.assertEqual(self.channel.slide_content_ids, self.slide | self.slide_2 | self.slide_3)
self.assertEqual(self.slide.category_id, self.env['slide.slide'])
self.assertEqual(self.slide_2.category_id, self.category)
self.assertEqual(self.slide_3.category_id, self.category)
self.assertEqual([s.id for s in self.channel.slide_ids], [self.slide.id, self.category.id, self.slide_2.id, self.slide_3.id])
self.slide.write({'sequence': 0})
self.assertEqual([s.id for s in self.channel.slide_ids], [self.slide.id, self.category.id, self.slide_2.id, self.slide_3.id])
self.assertEqual(self.slide_2.category_id, self.category)
self.slide_2.write({'sequence': 1})
self.channel.invalidate_cache()
self.assertEqual([s.id for s in self.channel.slide_ids], [self.slide.id, self.slide_2.id, self.category.id, self.slide_3.id])
self.assertEqual(self.slide_2.category_id, self.env['slide.slide'])
channel_2 = self.env['slide.channel'].create({
'name': 'Test2'
})
new_category = self.env['slide.slide'].create({
'name': 'NewCategorySlide',
'channel_id': channel_2.id,
'is_category': True,
'sequence': 1,
})
new_category_2 = self.env['slide.slide'].create({
'name': 'NewCategorySlide2',
'channel_id': channel_2.id,
'is_category': True,
'sequence': 2,
})
new_slide = self.env['slide.slide'].create({
'name': 'NewTestSlide',
'channel_id': channel_2.id,
'sequence': 2,
})
self.assertEqual(new_slide.category_id, new_category_2)
(new_slide | self.slide_3).write({'sequence': 1})
self.assertEqual(new_slide.category_id, new_category)
self.assertEqual(self.slide_3.category_id, self.env['slide.slide'])
(new_slide | self.slide_3).write({'sequence': 0})
self.assertEqual(new_slide.category_id, self.env['slide.slide'])
self.assertEqual(self.slide_3.category_id, self.env['slide.slide'])
@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.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):
def test_youtube_urls(self):
urls = {
'W0JQcpGLSFw': [
'https://youtu.be/W0JQcpGLSFw',
'https://www.youtube.com/watch?v=W0JQcpGLSFw',
'https://www.youtube.com/watch?v=W0JQcpGLSFw&list=PL1-aSABtP6ACZuppkBqXFgzpNb2nVctZx',
],
'vmhB-pt7EfA': [ # id starts with v, it is important
'https://youtu.be/vmhB-pt7EfA',
'https://www.youtube.com/watch?feature=youtu.be&v=vmhB-pt7EfA',
'https://www.youtube.com/watch?v=vmhB-pt7EfA&list=PL1-aSABtP6ACZuppkBqXFgzpNb2nVctZx&index=7',
],
'hlhLv0GN1hA': [
'https://www.youtube.com/v/hlhLv0GN1hA',
'https://www.youtube.com/embed/hlhLv0GN1hA',
'https://m.youtube.com/watch?v=hlhLv0GN1hA'
],
}
for id, urls in urls.items():
for url in urls:
with self.subTest(url=url, id=id):
document = self.env['slide.slide']._find_document_data_from_url(url)
self.assertEqual(document[0], 'youtube')
self.assertEqual(document[1], id)