from __future__ import print_function
import os
import unittest
from . import obtain_image
from .helpers import project_dir
__title__ = 'eximagination.tests'
__author__ = 'Artur Barseghyan <artur.barseghyan@gmail.com>'
__copyright__ = '2013-2017 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
LOG_INFO = True
[docs]def log_info(func):
"""Log some useful info."""
if not LOG_INFO:
return func
def inner(self, *args, **kwargs):
result = func(self, *args, **kwargs)
print('\n\n%s' % func.__name__)
print('============================')
if func.__doc__:
print('""" %s """' % func.__doc__.strip())
print('----------------------------')
if result is not None:
print(result)
print('\n++++++++++++++++++++++++++++')
return result
return inner
[docs]class EximaginationUtilsTest(unittest.TestCase):
"""Tests of ``eximagination.utils.obtain_image`` function."""
[docs] def setUp(self):
"""Set up."""
self.image_url = 'http://www.google.com/intl/en/images/logo.gif'
self.force_update = False
# Where eximagination cached images will be stored
self.media_root = project_dir('tmp')
self.media_url = '/tmp/' # Media URL for stored images
self.media_relative_root = 'tmp/' # Relative root for images
# After 30 days we re-fetch the file anyway.
self.expiration_interval = 2592000
self.debug = True
try:
os.stat(self.media_root)
except:
os.mkdir(self.media_root)
@log_info
[docs] def test_01_obtain_image(self):
"""Test obtain image."""
file_data = obtain_image(
image_source=self.image_url,
save_to=self.media_root,
media_url=self.media_relative_root,
force_update=self.force_update,
expiration_interval=self.expiration_interval,
debug=self.debug
)
try:
filename = file_data[0]
ei_width = file_data[1] # Original width of the obtained image
ei_height = file_data[2] # Original height of the obtained image
except Exception as err:
print(file_data)
print(err)
filename = None
ei_width = None
ei_height = None
res = {
'filename': filename,
'ei_width': ei_width,
'ei_height': ei_height
}
self.assertTrue(filename is not None)
self.assertTrue(ei_width is not None)
self.assertTrue(ei_height is not None)
return res
# Skipping from non-Django tests.
if os.environ.get("DJANGO_SETTINGS_MODULE", None):
from django.conf import settings
from django.test import LiveServerTestCase
from django.core.management import call_command
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
class EximaginationTemplatetagsTest(LiveServerTestCase):
"""Tests of ``exinagination.templatetags.eximaginate`` module."""
@classmethod
def setUpClass(cls):
"""Set up."""
firefox_bin_path = getattr(settings, 'FIREFOX_BIN_PATH', None)
phantom_js_executable_path = getattr(
settings, 'PHANTOM_JS_EXECUTABLE_PATH', None
)
if phantom_js_executable_path is not None:
if phantom_js_executable_path:
cls.selenium = webdriver.PhantomJS(
executable_path=phantom_js_executable_path
)
else:
cls.selenium = webdriver.PhantomJS()
elif firefox_bin_path:
binary = FirefoxBinary(firefox_bin_path)
cls.selenium = webdriver.Firefox(firefox_binary=binary)
else:
cls.selenium = webdriver.Firefox()
super(EximaginationTemplatetagsTest, cls).setUpClass()
@classmethod
def tearDownClass(cls):
"""Tear down."""
try:
cls.selenium.quit()
except Exception as err:
print(err)
super(EximaginationTemplatetagsTest, cls).tearDownClass()
call_command('flush', verbosity=0, interactive=False,
reset_sequences=False,
allow_cascade=False,
inhibit_post_migrate=False)
@log_info
def test_templatetags(self):
"""Test template tags."""
workflow = []
self.selenium.get(self.live_server_url)
img1 = self.selenium.find_element_by_id("image1")
self.assertTrue(img1.get_attribute('src').endswith('gif'))
workflow.append(img1.get_attribute('src'))
img2 = self.selenium.find_element_by_id("image2")
self.assertTrue(img2.get_attribute('src').endswith('gif'))
workflow.append(img2.get_attribute('src'))
return workflow
if __name__ == "__main__":
# Tests
unittest.main()