[image_pipeline] unify and simplify tests for setting loading

there was identical test for different setting keys. I unified it into
one unit test.

Fixes comments for tests, adds comments about intention of uppercase attrs.

Adds another test for user defined setting keys and uppercase attrs.
This commit is contained in:
Pawel Miech 2016-06-14 19:09:56 +02:00 committed by Paul Tremberth
parent c6277c9963
commit dec04d50fa
2 changed files with 39 additions and 41 deletions

View File

@ -37,6 +37,9 @@ class ImagesPipeline(FilesPipeline):
"""
MEDIA_NAME = 'image'
# Uppercase attributes kept for backward compatibility with code that subclasses
# ImagesPipeline. They may be overriden by settings.
MIN_WIDTH = 0
MIN_HEIGHT = 0
EXPIRES = 0

View File

@ -207,6 +207,7 @@ class ImagesPipelineTestCaseFields(unittest.TestCase):
class ImagesPipelineTestCaseCustomSettings(unittest.TestCase):
def setUp(self):
self.tempdir = mkdtemp()
self.pipeline = ImagesPipeline(self.tempdir)
@ -215,46 +216,27 @@ class ImagesPipelineTestCaseCustomSettings(unittest.TestCase):
def tearDown(self):
rmtree(self.tempdir)
def test_expires(self):
another_pipeline = ImagesPipeline.from_settings(Settings({'IMAGES_STORE': self.tempdir,
'IMAGES_EXPIRES': 42}))
self.assertEqual(self.pipeline.expires, self.default_settings.getint('IMAGES_EXPIRES'))
self.assertEqual(another_pipeline.expires, 42)
def test_images_urls_field(self):
another_pipeline = ImagesPipeline.from_settings(Settings({'IMAGES_STORE': self.tempdir,
'IMAGES_URLS_FIELD': 'funny_field'}))
default = self.pipeline.IMAGES_URLS_FIELD
self.assertEqual(self.pipeline.images_urls_field, self.default_settings.get('IMAGES_URLS_FIELD', default))
self.assertEqual(another_pipeline.images_urls_field, 'funny_field')
def test_images_result_field(self):
another_pipeline = ImagesPipeline.from_settings(Settings({'IMAGES_STORE': self.tempdir,
'IMAGES_RESULT_FIELD': 'funny_field'}))
default = self.pipeline.IMAGES_RESULT_FIELD
self.assertEqual(self.pipeline.images_result_field, self.default_settings.get('IMAGES_RESULT_FIELD', default))
self.assertEqual(another_pipeline.images_result_field, 'funny_field')
def test_min_width(self):
another_pipeline = ImagesPipeline.from_settings(Settings({'IMAGES_STORE': self.tempdir,
'IMAGES_MIN_WIDTH': 42}))
default = self.pipeline.MIN_WIDTH
self.assertEqual(self.pipeline.min_width, self.default_settings.getint('IMAGES_MIN_WIDTH', default))
self.assertEqual(another_pipeline.min_width, 42)
def test_min_height(self):
another_pipeline = ImagesPipeline.from_settings(Settings({'IMAGES_STORE': self.tempdir,
'IMAGES_MIN_HEIGHT': 42}))
self.assertEqual(self.pipeline.min_height, self.default_settings.getint('IMAGES_MIN_HEIGHT'))
self.assertEqual(another_pipeline.min_height, 42)
def test_thumbs(self):
custom_thumbs = {'small': (50, 50), 'big': (270, 270)}
another_pipeline = ImagesPipeline.from_settings(Settings({'IMAGES_STORE': self.tempdir,
'IMAGES_THUMBS': custom_thumbs}))
default = self.pipeline.THUMBS
self.assertEqual(self.pipeline.thumbs, self.default_settings.get('IMAGES_THUMBS', default))
self.assertEqual(another_pipeline.thumbs, custom_thumbs)
def test_different_settings_for_different_instances(self):
custom_settings = [
# Order is: key name in settings.py, value, name of pipeline attribute.
("IMAGES_EXPIRES", 42, "EXPIRES"),
("IMAGES_STORE", self.tempdir, "IMAGES_STORE"),
("IMAGES_RESULT_FIELD", "funny_field", "IMAGES_RESULT_FIELD"),
("IMAGES_URLS_FIELD", "other_field", "IMAGES_URLS_FIELD"),
("IMAGES_MIN_WIDTH", 99, "MIN_WIDTH"),
("IMAGES_MIN_HEIGHT", 112, "MIN_HEIGHT"),
("IMAGES_THUMBS", {'small': (50, 50), 'big': (270, 270)}, "THUMBS")
]
default_settings = Settings()
default_sts_pipe = ImagesPipeline(self.tempdir, settings=default_settings)
user_sts_pipe = ImagesPipeline.from_settings(Settings({k: v for k, v, _ in custom_settings}))
for key, custom_value, attr_name in custom_settings:
if attr_name == "IMAGES_STORE":
# this is not set as pipeline attribute
continue
expected_default_value = getattr(default_sts_pipe, attr_name)
self.assertEqual(getattr(default_sts_pipe, attr_name), expected_default_value, key)
self.assertEqual(getattr(user_sts_pipe, attr_name.lower()), custom_value, key)
def test_class_attrs_preserved(self):
@ -275,7 +257,7 @@ class ImagesPipelineTestCaseCustomSettings(unittest.TestCase):
"IMAGES_MIN_WIDTH": 90
}
# If image settings are defined they override class attributes.
# Class attributes for subclass of ImagePipeline override default setting keys.
pipeline = UserDefinedImagePipeline.from_settings(Settings(settings))
self.assertEqual(pipeline.min_width, 1000)
@ -293,6 +275,19 @@ class ImagesPipelineTestCaseCustomSettings(unittest.TestCase):
user_pipeline = UserDefinedPipeline.from_settings(Settings(settings))
self.assertEqual(user_pipeline.min_width, 1999)
def test_settings_multiple_pipelilines_and_class_attrs(self):
# Setting keys for user defined pipeline override class attributes.
class UserDefinedPipeline(ImagesPipeline):
MIN_WIDTH = 200
settings = {
"IMAGES_MIN_WIDTH": 10,
"USERDEFINEDPIPELINE_IMAGES_MIN_WIDTH": 1999,
"IMAGES_STORE": self.tempdir
}
user_pipeline = UserDefinedPipeline.from_settings(Settings(settings))
self.assertEqual(user_pipeline.min_width, 1999)
def _create_image(format, *a, **kw):
buf = TemporaryFile()