When the user inserts a video with the `/video` command and provides a link of an unlisted vimeo video, the system generates a new url based on the options selected but omits the hash parameter granting access to the given video. As a result, the video can not be loaded and the vimeo `iframe` indicates that the video does not exist. To fix the issue, we will copy the hash parameter from the original link to the newly generated url. That way, the video will be loaded properly and the user will be able to embed unlisted vimeo videos. Steps to reproduce the issue: 1. Install the website app 2. Open the website builder 3. Drag and drop a text block 4. In the text block, type the `/video` command to insert a video 5. In the modal, paste the link of an unlisted video 6. The `iframe` indicates that the video does not exist => The system should extract the hash parameter from the provided url and set it on the generated url. The video should then be loaded properly. task-3697764 closes odoo/odoo#157279 X-original-commit: f72b873e58348374f3ce0e91ec5e87ed42215e55 Signed-off-by: Warnon Aurélien (awa) <awa@odoo.com> Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
131 lines
8.0 KiB
Python
131 lines
8.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import re
|
|
|
|
from odoo.tests import common, tagged
|
|
from odoo.addons.web_editor import tools
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestVideoUtils(common.BaseCase):
|
|
urls = {
|
|
'youtube': 'https://www.youtube.com/watch?v=xCvFZrrQq7k',
|
|
'vimeo': 'https://vimeo.com/395399735',
|
|
'vimeo_unlisted_video': 'https://vimeo.com/795669787/0763fdb816',
|
|
'vimeo_player': 'https://player.vimeo.com/video/395399735',
|
|
'vimeo_player_unlisted_video': 'https://player.vimeo.com/video/795669787?h=0763fdb816',
|
|
'dailymotion': 'https://www.dailymotion.com/video/x7svr6t',
|
|
'youku': 'https://v.youku.com/v_show/id_XMzY1MjY4.html?spm=a2hzp.8244740.0.0',
|
|
'instagram': 'https://www.instagram.com/p/B6dXGTxggTG/',
|
|
'dailymotion_hub_no_video': 'http://www.dailymotion.com/hub/x9q_Galatasaray',
|
|
'dailymotion_hub_#video': 'http://www.dailymotion.com/hub/x9q_Galatasaray#video=x2jvvep',
|
|
'dai.ly': 'https://dai.ly/x578has',
|
|
'dailymotion_embed': 'https://www.dailymotion.com/embed/video/x578has?autoplay=1',
|
|
'dailymotion_video_extra': 'https://www.dailymotion.com/video/x2jvvep_hakan-yukur-klip_sport',
|
|
'player_youku': 'https://player.youku.com/player.php/sid/XMTI5Mjg5NjE4MA==/v.swf',
|
|
'youku_embed': 'https://player.youku.com/embed/XNTIwMzE1MzUzNg',
|
|
}
|
|
|
|
def test_player_regexes(self):
|
|
#youtube
|
|
self.assertIsNotNone(re.search(tools.player_regexes['youtube'], TestVideoUtils.urls['youtube']))
|
|
#vimeo
|
|
self.assertIsNotNone(re.search(tools.player_regexes['vimeo'], TestVideoUtils.urls['vimeo']))
|
|
self.assertIsNotNone(re.search(tools.player_regexes['vimeo'], TestVideoUtils.urls['vimeo_unlisted_video']))
|
|
self.assertIsNotNone(re.search(tools.player_regexes['vimeo_player'], TestVideoUtils.urls['vimeo_player']))
|
|
self.assertIsNotNone(re.search(tools.player_regexes['vimeo_player'], TestVideoUtils.urls['vimeo_player_unlisted_video']))
|
|
#dailymotion
|
|
self.assertIsNotNone(re.search(tools.player_regexes['dailymotion'], TestVideoUtils.urls['dailymotion']))
|
|
#youku
|
|
self.assertIsNotNone(re.search(tools.player_regexes['youku'], TestVideoUtils.urls['youku']))
|
|
#instagram
|
|
self.assertIsNotNone(re.search(tools.player_regexes['instagram'], TestVideoUtils.urls['instagram']))
|
|
|
|
def test_get_video_source_data(self):
|
|
self.assertEqual(3, len(tools.get_video_source_data(TestVideoUtils.urls['youtube'])))
|
|
#youtube
|
|
self.assertEqual('youtube', tools.get_video_source_data(TestVideoUtils.urls['youtube'])[0])
|
|
self.assertEqual('xCvFZrrQq7k', tools.get_video_source_data(TestVideoUtils.urls['youtube'])[1])
|
|
#vimeo
|
|
self.assertEqual('vimeo', tools.get_video_source_data(TestVideoUtils.urls['vimeo'])[0])
|
|
self.assertEqual('395399735', tools.get_video_source_data(TestVideoUtils.urls['vimeo'])[1])
|
|
self.assertEqual('vimeo', tools.get_video_source_data(TestVideoUtils.urls['vimeo_unlisted_video'])[0])
|
|
self.assertEqual('795669787', tools.get_video_source_data(TestVideoUtils.urls['vimeo_unlisted_video'])[1])
|
|
self.assertEqual('vimeo', tools.get_video_source_data(TestVideoUtils.urls['vimeo_player'])[0])
|
|
self.assertEqual('395399735', tools.get_video_source_data(TestVideoUtils.urls['vimeo_player'])[1])
|
|
self.assertEqual('vimeo', tools.get_video_source_data(TestVideoUtils.urls['vimeo_player_unlisted_video'])[0])
|
|
self.assertEqual('795669787', tools.get_video_source_data(TestVideoUtils.urls['vimeo_player_unlisted_video'])[1])
|
|
#dailymotion
|
|
self.assertEqual('dailymotion', tools.get_video_source_data(TestVideoUtils.urls['dailymotion'])[0])
|
|
self.assertEqual('x7svr6t', tools.get_video_source_data(TestVideoUtils.urls['dailymotion'])[1])
|
|
self.assertEqual(None, tools.get_video_source_data(TestVideoUtils.urls['dailymotion_hub_no_video']))
|
|
self.assertEqual('dailymotion', tools.get_video_source_data(TestVideoUtils.urls['dailymotion_hub_#video'])[0])
|
|
self.assertEqual('x2jvvep', tools.get_video_source_data(TestVideoUtils.urls['dailymotion_hub_#video'])[1])
|
|
self.assertEqual('dailymotion', tools.get_video_source_data(TestVideoUtils.urls['dai.ly'])[0])
|
|
self.assertEqual('x578has', tools.get_video_source_data(TestVideoUtils.urls['dai.ly'])[1])
|
|
self.assertEqual('dailymotion', tools.get_video_source_data(TestVideoUtils.urls['dailymotion_embed'])[0])
|
|
self.assertEqual('x578has', tools.get_video_source_data(TestVideoUtils.urls['dailymotion_embed'])[1])
|
|
self.assertEqual('dailymotion', tools.get_video_source_data(TestVideoUtils.urls['dailymotion_video_extra'])[0])
|
|
self.assertEqual('x2jvvep', tools.get_video_source_data(TestVideoUtils.urls['dailymotion_video_extra'])[1])
|
|
#youku
|
|
self.assertEqual('youku', tools.get_video_source_data(TestVideoUtils.urls['youku'])[0])
|
|
self.assertEqual('XMzY1MjY4', tools.get_video_source_data(TestVideoUtils.urls['youku'])[1])
|
|
self.assertEqual('youku', tools.get_video_source_data(TestVideoUtils.urls['player_youku'])[0])
|
|
self.assertEqual('XMTI5Mjg5NjE4MA', tools.get_video_source_data(TestVideoUtils.urls['player_youku'])[1])
|
|
self.assertEqual('youku', tools.get_video_source_data(TestVideoUtils.urls['youku_embed'])[0])
|
|
self.assertEqual('XNTIwMzE1MzUzNg', tools.get_video_source_data(TestVideoUtils.urls['youku_embed'])[1])
|
|
#instagram
|
|
self.assertEqual('instagram', tools.get_video_source_data(TestVideoUtils.urls['instagram'])[0])
|
|
self.assertEqual('B6dXGTxggTG', tools.get_video_source_data(TestVideoUtils.urls['instagram'])[1])
|
|
|
|
def test_get_video_url_data(self):
|
|
self.assertEqual(4, len(tools.get_video_url_data(TestVideoUtils.urls['youtube'])))
|
|
#youtube
|
|
self.assertEqual('youtube', tools.get_video_url_data(TestVideoUtils.urls['youtube'])['platform'])
|
|
#vimeo
|
|
for key in ['vimeo', 'vimeo_player']:
|
|
self.assertEqual(tools.get_video_url_data(TestVideoUtils.urls[key]), {
|
|
'platform': 'vimeo',
|
|
'embed_url': '//player.vimeo.com/video/395399735?autoplay=0',
|
|
'video_id': '395399735',
|
|
'params': {
|
|
'autoplay': 0
|
|
}
|
|
})
|
|
for key in ['vimeo_unlisted_video', 'vimeo_player_unlisted_video']:
|
|
self.assertEqual(tools.get_video_url_data(TestVideoUtils.urls[key]), {
|
|
'platform': 'vimeo',
|
|
'embed_url': '//player.vimeo.com/video/795669787?autoplay=0&h=0763fdb816',
|
|
'video_id': '795669787',
|
|
'params': {
|
|
'autoplay': 0,
|
|
'h': '0763fdb816'
|
|
}
|
|
})
|
|
#dailymotion
|
|
self.assertEqual('dailymotion', tools.get_video_url_data(TestVideoUtils.urls['dailymotion'])['platform'])
|
|
#youku
|
|
self.assertEqual('youku', tools.get_video_url_data(TestVideoUtils.urls['youku'])['platform'])
|
|
#instagram
|
|
self.assertEqual('instagram', tools.get_video_url_data(TestVideoUtils.urls['instagram'])['platform'])
|
|
|
|
def test_valid_video_url(self):
|
|
self.assertIsNotNone(re.search(tools.valid_url_regex, TestVideoUtils.urls['youtube']))
|
|
|
|
|
|
@tagged('-standard', 'external')
|
|
class TestVideoUtilsExternal(common.BaseCase):
|
|
def test_get_video_thumbnail(self):
|
|
#youtube
|
|
self.assertIsInstance(tools.get_video_thumbnail(TestVideoUtils.urls['youtube']), bytes)
|
|
#vimeo
|
|
for key in ['vimeo', 'vimeo_unlisted_video', 'vimeo_player', 'vimeo_player_unlisted_video']:
|
|
self.assertIsInstance(tools.get_video_thumbnail(TestVideoUtils.urls[key]), bytes)
|
|
#dailymotion
|
|
self.assertIsInstance(tools.get_video_thumbnail(TestVideoUtils.urls['dailymotion']), bytes)
|
|
#instagram
|
|
self.assertIsInstance(tools.get_video_thumbnail(TestVideoUtils.urls['instagram']), bytes)
|
|
#default
|
|
self.assertIsInstance(tools.get_video_thumbnail(TestVideoUtils.urls['youku']), bytes)
|