# -*- coding: utf-8 -*-
__title__ = 'vishap.tests'
__author__ = 'Artur Barseghyan'
__copyright__ = 'Copyright (c) 2013-2015 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('VishapTest',)
import unittest
import six
from six import print_
from vishap.conf import set_setting, get_setting, reset_to_defaults_settings
from vishap import defaults
from vishap import get_registered_plugin_uids, render_video
from vishap.base import BaseVideoPlugin, plugin_registry
PRINT_INFO = True
TRACK_TIME = False
def print_info(func):
"""
Prints some useful info.
"""
if not PRINT_INFO:
return func
def inner(self, *args, **kwargs):
if TRACK_TIME:
import simple_timer
timer = simple_timer.Timer() # Start timer
result = func(self, *args, **kwargs)
if TRACK_TIME:
timer.stop() # Stop timer
print_('\n{0}'.format(func.__name__))
print_('============================')
print_('""" {0} """'.format(func.__doc__.strip()))
print_('----------------------------')
if result is not None:
try:
print_(result)
except Exception as e:
print_(result.encode('utf8'))
if TRACK_TIME:
print_('done in {0} seconds'.format(timer.duration))
return result
return inner
def py2only(func):
"""
Skips the test on Python 3.
"""
if six.PY2:
return func
def dummy(self, *args, **kwargs):
pass
return dummy
[docs]class VishapTest(unittest.TestCase):
"""
Tests of ``vishap.utils.render_video``.
"""
[docs] def setUp(self):
self.vimeo_urls = (
'http://vimeo.com/45655450',
)
self.youtube_urls = (
'http://www.youtube.com/watch?v=LIPl7PtGXNI',
'https://www.youtube.com/watch?v=LIPl7PtGXNI',
)
self.rendered_vimeo_embed_codes = (
"""
<iframe src="//player.vimeo.com/video/45655450" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
""".strip(),
)
self.rendered_vimeo_embed_codes_responsive = (
"""
<iframe src="//player.vimeo.com/video/45655450" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
""".strip(),
)
self.rendered_youtube_embed_codes = (
"""
<iframe src="//www.youtube.com/embed/LIPl7PtGXNI" width="560" height="315" frameborder="0" allowfullscreen></iframe>
""".strip(),
"""
<iframe src="//www.youtube.com/embed/LIPl7PtGXNI" width="560" height="315" frameborder="0" allowfullscreen></iframe>
""".strip(),
)
self.rendered_youtube_responsive_embed_codes = (
"""
<iframe src="//www.youtube.com/embed/LIPl7PtGXNI" frameborder="0" allowfullscreen></iframe>
""".strip(),
"""
<iframe src="//www.youtube.com/embed/LIPl7PtGXNI" frameborder="0" allowfullscreen></iframe>
""".strip(),
)
#reset_to_defaults_settings()
@print_info
[docs] def test_01_get_available_plugin_uids(self):
"""
Test ``autodiscover`` and ``get_available_plugin_uids``.
"""
res = get_registered_plugin_uids()
res.sort()
c = ['vimeo', 'youtube']
c.sort()
self.assertEqual(res, c)
return res
def _test_render_video(self, video_url, rendered_video_embed_code, width, height):
"""
Test rendering of video.
"""
res = render_video(video_url, width, height).strip()
self.assertEqual(res, rendered_video_embed_code)
return res
def _test_render_video_responsive(self, video_url, rendered_video_embed_code_responsive):
"""
Test rendering of video.
"""
res = render_video(video_url).strip()
self.assertEqual(res, rendered_video_embed_code_responsive)
return res
@print_info
[docs] def test_02_render_vimeo(self):
"""
Test rendering of Vimeo.
"""
res = []
for counter, vimeo_url in enumerate(self.vimeo_urls):
res.append(self._test_render_video(vimeo_url, \
self.rendered_vimeo_embed_codes[counter],
500,
281))
return res
@print_info
[docs] def test_03_render_vimeo_responsive(self):
"""
Test rendering of Vimeo.
"""
res = []
for counter, vimeo_url in enumerate(self.vimeo_urls):
res.append(self._test_render_video_responsive(vimeo_url, \
self.rendered_vimeo_embed_codes_responsive[counter]))
return res
@print_info
[docs] def test_04_render_youtube(self):
"""
Test rendering of Youtube.
"""
res = []
for counter, youtube_url in enumerate(self.youtube_urls):
res.append(self._test_render_video(youtube_url, \
self.rendered_youtube_embed_codes[counter],
560,
315))
return res
@print_info
[docs] def test_05_render_youtube_responsive(self):
"""
Test rendering of Youtube responsive.
"""
res = []
for counter, youtube_url in enumerate(self.youtube_urls):
res.append(self._test_render_video_responsive(youtube_url, \
self.rendered_youtube_responsive_embed_codes[counter]))
return res
@print_info
[docs] def test_06_register_custom_plugin(self):
"""
Test registering of a custom plugin.
"""
class ExamplePlugin(BaseVideoPlugin):
"""
Example plugin.
"""
uid = "example"
name = "Example"
url_pattern = "^(?P<prefix>(http\:\/\/www\.youtube\.com\/watch\?v=)|(http\:\/\/www\.youtube\.com\/v\/)|(http\:\/\/youtu\.be\/))(?P<value>[A-Za-z0-9\-=_]{11})"
id_pattern = "^(?P<value>[A-Za-z0-9\-=_]{11})"
thumbnail_pattern = "//img.youtube.com/vi/{0}/{1}.jpg"
embed_code = """
<iframe src="//www.youtube.com/embed/{video_id}" {options} frameborder="0" allowfullscreen></iframe>
"""
plugin_registry.register(ExamplePlugin)
assert 'example' in get_registered_plugin_uids()
res = render_video(self.youtube_urls[0], plugin_uid='example').strip()
self.assertEqual(res, self.rendered_youtube_responsive_embed_codes[0])
return res
@print_info
[docs] def test_07_register_unregister(self):
"""
Testing register/unregister.
"""
from vishap.contrib.plugins.vimeo.vishap_plugin import VimeoPlugin
class Example2Plugin(BaseVideoPlugin):
"""
Example plugin.
"""
uid = "youtube"
name = "Example with youtube ``uid``"
url_pattern = "^(?P<prefix>(http\:\/\/www\.youtube\.com\/watch\?v=)|(http\:\/\/www\.youtube\.com\/v\/)|(http\:\/\/youtu\.be\/))(?P<value>[A-Za-z0-9\-=_]{11})"
id_pattern = "^(?P<value>[A-Za-z0-9\-=_]{11})"
thumbnail_pattern = "//img.youtube.com/vi/{0}/{1}.jpg"
embed_code = """
<iframe src="//www.youtube.com/embed/{video_id}" {options} frameborder="0" allowfullscreen></iframe>
"""
plugin_registry.register(Example2Plugin)
# Since key `ru` already exists in the registry it can't be replaced (without force-register).
res = plugin_registry.register(Example2Plugin)
self.assertTrue(not res)
# Now with force-register it can.
res = plugin_registry.register(Example2Plugin, force=True)
self.assertTrue(res)
# Once we have it there and it's forced, we can't register another.
res = plugin_registry.register(Example2Plugin, force=True)
self.assertTrue(not res)
# Unregister non-forced language pack.
res = plugin_registry.unregister(VimeoPlugin)
self.assertTrue(res and not VimeoPlugin.uid in get_registered_plugin_uids())
res = plugin_registry.unregister(Example2Plugin)
self.assertTrue(not res and Example2Plugin.uid in get_registered_plugin_uids())
@print_info
[docs] def test_08_override_settings(self):
"""
Testing settings override.
"""
def override_settings():
return get_setting('DEBUG')
self.assertEqual(defaults.DEBUG, override_settings())
set_setting('DEBUG', True)
self.assertEqual(True, override_settings())
return override_settings()
if __name__ == '__main__':
unittest.main()