class ThumbnailerFieldTest(BaseTest): def setUp(self): BaseTest.setUp(self) self.storage = TemporaryStorage() # Save a test image. data = StringIO() Image.new('RGB', (800, 600)).save(data, 'JPEG') data.seek(0) image_file = ContentFile(data.read()) self.storage.save('avatars/avatar.jpg', image_file) # Set the test model to use the current temporary storage. TestModel._meta.get_field('avatar').storage = self.storage TestModel._meta.get_field('avatar').thumbnail_storage = self.storage def tearDown(self): self.storage.delete_temporary_storage() BaseTest.tearDown(self) def test_generate_thumbnail(self): instance = TestModel(avatar='avatars/avatar.jpg') thumb = instance.avatar.generate_thumbnail({'size': (300, 300)}) self.assertEqual((thumb.width, thumb.height), (300, 225)) def test_delete(self): instance = TestModel(avatar='avatars/avatar.jpg') thumb = instance.avatar.get_thumbnail({'size': (300, 300)}) self.assertEqual((thumb.width, thumb.height), (300, 225)) instance.avatar.delete(save=False) self.assertEqual(self.storage.listdir('avatars')[1], []) def test_get_thumbnails(self): instance = TestModel(avatar='avatars/avatar.jpg') instance.avatar.get_thumbnail({'size': (300, 300)}) instance.avatar.get_thumbnail({'size': (200, 200)}) self.assertEqual(len(list(instance.avatar.get_thumbnails())), 2)
def setUp(self): BaseTest.setUp(self) self.storage = TemporaryStorage() # Save a test image. self.create_image(self.storage, 'avatars/avatar.jpg') # Set the test model to use the current temporary storage. TestModel._meta.get_field('avatar').storage = self.storage TestModel._meta.get_field('avatar').thumbnail_storage = self.storage
def setUp(self): BaseTest.setUp(self) self.storage = TemporaryStorage() # Save a test image. self.filename = self.create_image(self.storage, 'test.jpg') # Required so that IOError's get wrapped as TemplateSyntaxError settings.TEMPLATE_DEBUG = True
def setUp(self): BaseTest.setUp(self) self.storage = TemporaryStorage() # Save a test image. data = StringIO() Image.new('RGB', (800, 600)).save(data, 'JPEG') data.seek(0) image_file = ContentFile(data.read()) self.storage.save(self.RELATIVE_PIC_NAME, image_file)
def setUp(self): BaseTest.setUp(self) self.storage = TemporaryStorage() # Save a test image. data = StringIO() Image.new('RGB', (800, 600)).save(data, 'JPEG') data.seek(0) image_file = ContentFile(data.read()) self.storage.save(self.RELATIVE_PIC_NAME, image_file) # Required so that IOError's get wrapped as TemplateSyntaxError settings.TEMPLATE_DEBUG = True
def setUp(self): BaseTest.setUp(self) self.storage = TemporaryStorage() # Save a test image. data = StringIO() Image.new('RGB', (800, 600)).save(data, 'JPEG') data.seek(0) image_file = ContentFile(data.read()) self.storage.save('avatars/avatar.jpg', image_file) # Set the test model to use the current temporary storage. TestModel._meta.get_field('avatar').storage = self.storage TestModel._meta.get_field('avatar').thumbnail_storage = self.storage
class ThumbnailTagTest(BaseTest): RELATIVE_PIC_NAME = 'test.jpg' restore_settings = ['THUMBNAIL_DEBUG'] def setUp(self): BaseTest.setUp(self) self.storage = TemporaryStorage() # Save a test image. data = StringIO() Image.new('RGB', (800, 600)).save(data, 'JPEG') data.seek(0) image_file = ContentFile(data.read()) self.storage.save(self.RELATIVE_PIC_NAME, image_file) def tearDown(self): self.storage.delete_temporary_storage() BaseTest.tearDown(self) def render_template(self, source): source_image = get_thumbnailer(self.storage, self.RELATIVE_PIC_NAME) source_image.thumbnail_storage = self.storage context = Context({ 'source': source_image, 'invalid_source': 'not%s' % self.RELATIVE_PIC_NAME, 'size': (90, 100), 'invalid_size': (90, 'fish'), 'strsize': '80x90', 'invalid_strsize': ('1notasize2'), 'invalid_q': 'notanumber'}) source = '{% load thumbnail %}' + source return Template(source).render(context) def verify_thumbnail(self, expected_size, expected_filename): # Verify that the thumbnail file exists self.assert_(self.storage.exists(expected_filename), 'Thumbnail file %r not found' % expected_filename) # Verify the thumbnail has the expected dimensions image = Image.open(self.storage.open(expected_filename)) self.assertEqual(image.size, expected_size) def testTagInvalid(self): # No args, or wrong number of args src = '{% thumbnail %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) src = '{% thumbnail source %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) src = '{% thumbnail source 80x80 as variable crop %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid option src = '{% thumbnail source 240x200 invalid %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) # Old comma separated options format can only have an = for quality src = '{% thumbnail source 80x80 crop=1,quality=1 %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid quality src_invalid = '{% thumbnail source 240x200 quality=invalid_q %}' src_missing = '{% thumbnail source 240x200 quality=missing_q %}' # ...with THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src_invalid), '') self.assertEqual(self.render_template(src_missing), '') # ...and with THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src_invalid) self.assertRaises(TemplateSyntaxError, self.render_template, src_missing) # Invalid source src = '{% thumbnail invalid_source 80x80 %}' src_on_context = '{% thumbnail invalid_source 80x80 as thumb %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and with THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) self.assertRaises(TemplateSyntaxError, self.render_template, src_on_context) # Non-existant source src = '{% thumbnail non_existant_source 80x80 %}' src_on_context = '{% thumbnail non_existant_source 80x80 as thumb %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and with THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid size as a tuple: src = '{% thumbnail source invalid_size %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid size as a string: src = '{% thumbnail source invalid_strsize %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) # Non-existant size src = '{% thumbnail source non_existant_size %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) def testTag(self): # Set THUMBNAIL_DEBUG = True to make it easier to trace any failures settings.THUMBNAIL_DEBUG = True # Basic output = self.render_template('src="' '{% thumbnail source 240x240 %}"') expected = '%s.240x240_q85.jpg' % self.RELATIVE_PIC_NAME self.verify_thumbnail((240, 180), expected) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # Size from context variable # as a tuple: output = self.render_template('src="' '{% thumbnail source size %}"') expected = '%s.90x100_q85.jpg' % self.RELATIVE_PIC_NAME self.verify_thumbnail((90, 67), expected) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # as a string: output = self.render_template('src="' '{% thumbnail source strsize %}"') expected = '%s.80x90_q85.jpg' % self.RELATIVE_PIC_NAME self.verify_thumbnail((80, 60), expected) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # On context output = self.render_template('height:' '{% thumbnail source 240x240 as thumb %}{{ thumb.height }}') self.assertEqual(output, 'height:180') # With options and quality output = self.render_template('src="' '{% thumbnail source 240x240 sharpen crop quality=95 %}"') # Note that the opts are sorted to ensure a consistent filename. expected = '%s.240x240_q95_crop_sharpen.jpg' % self.RELATIVE_PIC_NAME self.verify_thumbnail((240, 240), expected) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # With option and quality on context (also using its unicode method to # display the url) output = self.render_template( '{% thumbnail source 240x240 sharpen crop quality=95 as thumb %}' 'width:{{ thumb.width }}, url:{{ thumb.url }}') self.assertEqual(output, 'width:240, url:%s' % expected_url)
class ThumbnailTagTest(BaseTest): RELATIVE_PIC_NAME = 'test.jpg' restore_settings = ['THUMBNAIL_DEBUG', 'TEMPLATE_DEBUG'] def setUp(self): BaseTest.setUp(self) self.storage = TemporaryStorage() # Save a test image. data = StringIO() Image.new('RGB', (800, 600)).save(data, 'JPEG') data.seek(0) image_file = ContentFile(data.read()) self.storage.save(self.RELATIVE_PIC_NAME, image_file) # Required so that IOError's get wrapped as TemplateSyntaxError settings.TEMPLATE_DEBUG = True def tearDown(self): self.storage.delete_temporary_storage() BaseTest.tearDown(self) def render_template(self, source): source_image = get_thumbnailer(self.storage, self.RELATIVE_PIC_NAME) source_image.thumbnail_storage = self.storage context = Context({ 'source': source_image, 'invalid_source': 'not%s' % self.RELATIVE_PIC_NAME, 'size': (90, 100), 'invalid_size': (90, 'fish'), 'strsize': '80x90', 'invalid_strsize': ('1notasize2'), 'invalid_q': 'notanumber'}) source = '{% load thumbnail %}' + source return Template(source).render(context) def verify_thumbnail(self, expected_size, expected_filename): # Verify that the thumbnail file exists self.assert_(self.storage.exists(expected_filename), 'Thumbnail file %r not found' % expected_filename) # Verify the thumbnail has the expected dimensions image = Image.open(self.storage.open(expected_filename)) self.assertEqual(image.size, expected_size) def testTagInvalid(self): # No args, or wrong number of args src = '{% thumbnail %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) src = '{% thumbnail source %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) src = '{% thumbnail source 80x80 as variable crop %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid option src = '{% thumbnail source 240x200 invalid %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) # Old comma separated options format can only have an = for quality src = '{% thumbnail source 80x80 crop=1,quality=1 %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid quality src_invalid = '{% thumbnail source 240x200 quality=invalid_q %}' src_missing = '{% thumbnail source 240x200 quality=missing_q %}' # ...with THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src_invalid), '') self.assertEqual(self.render_template(src_missing), '') # ...and with THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src_invalid) self.assertRaises(TemplateSyntaxError, self.render_template, src_missing) # Invalid source src = '{% thumbnail invalid_source 80x80 %}' src_on_context = '{% thumbnail invalid_source 80x80 as thumb %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and with THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) self.assertRaises(TemplateSyntaxError, self.render_template, src_on_context) # Non-existant source src = '{% thumbnail non_existant_source 80x80 %}' src_on_context = '{% thumbnail non_existant_source 80x80 as thumb %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and with THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid size as a tuple: src = '{% thumbnail source invalid_size %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid size as a string: src = '{% thumbnail source invalid_strsize %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) # Non-existant size src = '{% thumbnail source non_existant_size %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) def testTag(self): # Set THUMBNAIL_DEBUG = True to make it easier to trace any failures settings.THUMBNAIL_DEBUG = True # Basic output = self.render_template('src="' '{% thumbnail source 240x240 %}"') expected = '%s.240x240_q85.jpg' % self.RELATIVE_PIC_NAME self.verify_thumbnail((240, 180), expected) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # Size from context variable # as a tuple: output = self.render_template('src="' '{% thumbnail source size %}"') expected = '%s.90x100_q85.jpg' % self.RELATIVE_PIC_NAME self.verify_thumbnail((90, 68), expected) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # as a string: output = self.render_template('src="' '{% thumbnail source strsize %}"') expected = '%s.80x90_q85.jpg' % self.RELATIVE_PIC_NAME self.verify_thumbnail((80, 60), expected) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # On context output = self.render_template('height:' '{% thumbnail source 240x240 as thumb %}{{ thumb.height }}') self.assertEqual(output, 'height:180') # With options and quality output = self.render_template('src="' '{% thumbnail source 240x240 sharpen crop quality=95 %}"') # Note that the opts are sorted to ensure a consistent filename. expected = '%s.240x240_q95_crop_sharpen.jpg' % self.RELATIVE_PIC_NAME self.verify_thumbnail((240, 240), expected) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # With option and quality on context (also using its unicode method to # display the url) output = self.render_template( '{% thumbnail source 240x240 sharpen crop quality=95 as thumb %}' 'width:{{ thumb.width }}, url:{{ thumb.url }}') self.assertEqual(output, 'width:240, url:%s' % expected_url) # One dimensional resize output = self.render_template('src="{% thumbnail source 100x0 %}"') expected = '%s.100x0_q85.jpg' % self.RELATIVE_PIC_NAME self.verify_thumbnail((100, 75), expected) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url)
class ThumbnailTagTest(BaseTest): restore_settings = ['THUMBNAIL_DEBUG', 'TEMPLATE_DEBUG'] def setUp(self): BaseTest.setUp(self) self.storage = TemporaryStorage() # Save a test image. self.filename = self.create_image(self.storage, 'test.jpg') # Required so that IOError's get wrapped as TemplateSyntaxError settings.TEMPLATE_DEBUG = True def tearDown(self): self.storage.delete_temporary_storage() BaseTest.tearDown(self) def render_template(self, source): source_image = get_thumbnailer(self.storage, self.filename) source_image.thumbnail_storage = self.storage context = Context({ 'source': source_image, 'invalid_source': 'not%s' % self.filename, 'size': (90, 100), 'invalid_size': (90, 'fish'), 'strsize': '80x90', 'invalid_strsize': ('1notasize2'), 'invalid_q': 'notanumber'}) source = '{% load thumbnail %}' + source return Template(source).render(context) def verify_thumbnail(self, expected_size, options, source_filename=None, transparent=False): if source_filename is None: source_filename = self.filename self.assert_(isinstance(options, dict)) # Verify that the thumbnail file exists expected_filename = get_thumbnailer(self.storage, source_filename)\ .get_thumbnail_name(options, transparent=transparent) self.assert_(self.storage.exists(expected_filename), 'Thumbnail file %r not found' % expected_filename) # Verify the thumbnail has the expected dimensions image = Image.open(self.storage.open(expected_filename)) self.assertEqual(image.size, expected_size) return expected_filename def testTagInvalid(self): # No args, or wrong number of args src = '{% thumbnail %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) src = '{% thumbnail source %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) src = '{% thumbnail source 80x80 as variable crop %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid option src = '{% thumbnail source 240x200 invalid %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) # Old comma separated options format can only have an = for quality src = '{% thumbnail source 80x80 crop=1,quality=1 %}' self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid quality src_invalid = '{% thumbnail source 240x200 quality=invalid_q %}' src_missing = '{% thumbnail source 240x200 quality=missing_q %}' # ...with THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src_invalid), '') self.assertEqual(self.render_template(src_missing), '') # ...and with THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src_invalid) self.assertRaises(TemplateSyntaxError, self.render_template, src_missing) # Invalid source src = '{% thumbnail invalid_source 80x80 %}' src_on_context = '{% thumbnail invalid_source 80x80 as thumb %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and with THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) self.assertRaises(TemplateSyntaxError, self.render_template, src_on_context) # Non-existant source src = '{% thumbnail non_existant_source 80x80 %}' src_on_context = '{% thumbnail non_existant_source 80x80 as thumb %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and with THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid size as a tuple: src = '{% thumbnail source invalid_size %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) # Invalid size as a string: src = '{% thumbnail source invalid_strsize %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) # Non-existant size src = '{% thumbnail source non_existant_size %}' # ...with THUMBNAIL_DEBUG = False settings.THUMBNAIL_DEBUG = False self.assertEqual(self.render_template(src), '') # ...and THUMBNAIL_DEBUG = True settings.THUMBNAIL_DEBUG = True self.assertRaises(TemplateSyntaxError, self.render_template, src) def testTag(self): # Set THUMBNAIL_DEBUG = True to make it easier to trace any failures settings.THUMBNAIL_DEBUG = True # Basic output = self.render_template('src="' '{% thumbnail source 240x240 %}"') expected = self.verify_thumbnail((240, 180), {'size': (240, 240)}) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # Size from context variable # as a tuple: output = self.render_template('src="' '{% thumbnail source size %}"') expected = self.verify_thumbnail((90, 68), {'size': (90, 100)}) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # as a string: output = self.render_template('src="' '{% thumbnail source strsize %}"') expected = self.verify_thumbnail((80, 60), {'size': (80, 90)}) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # On context output = self.render_template('height:' '{% thumbnail source 240x240 as thumb %}{{ thumb.height }}') self.assertEqual(output, 'height:180') # With options and quality output = self.render_template('src="' '{% thumbnail source 240x240 sharpen crop quality=95 %}"') # Note that the opts are sorted to ensure a consistent filename. expected = self.verify_thumbnail((240, 240), {'size': (240, 240), 'crop': True, 'sharpen': True, 'quality': 95}) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url) # With option and quality on context (also using its unicode method to # display the url) output = self.render_template( '{% thumbnail source 240x240 sharpen crop quality=95 as thumb %}' 'width:{{ thumb.width }}, url:{{ thumb.url }}') self.assertEqual(output, 'width:240, url:%s' % expected_url) # One dimensional resize output = self.render_template('src="{% thumbnail source 100x0 %}"') expected = self.verify_thumbnail((100, 75), {'size': (100, 0)}) expected_url = ''.join((settings.MEDIA_URL, expected)) self.assertEqual(output, 'src="%s"' % expected_url)
class ThumbnailerFieldTest(BaseTest): def setUp(self): BaseTest.setUp(self) self.storage = TemporaryStorage() # Save a test image. data = StringIO() Image.new('RGB', (800, 600)).save(data, 'JPEG') data.seek(0) image_file = ContentFile(data.read()) self.storage.save('avatars/avatar.jpg', image_file) # Set the test model to use the current temporary storage. TestModel._meta.get_field('avatar').storage = self.storage TestModel._meta.get_field('avatar').thumbnail_storage = self.storage def tearDown(self): self.storage.delete_temporary_storage() BaseTest.tearDown(self) def test_generate_thumbnail(self): instance = TestModel(avatar='avatars/avatar.jpg') thumb = instance.avatar.generate_thumbnail({'size': (300, 300)}) self.assertEqual((thumb.width, thumb.height), (300, 225)) def test_generate_thumbnail_type_error(self): text_file = ContentFile("Lorem ipsum dolor sit amet. Not an image.") self.storage.save('avatars/invalid.jpg', text_file) instance = TestModel(avatar='avatars/invalid.jpg') generate = lambda: instance.avatar.generate_thumbnail( {'size': (300, 300)}) self.assertRaises(InvalidImageFormatError, generate) def test_delete(self): instance = TestModel(avatar='avatars/avatar.jpg') source_path = instance.avatar.path thumb_paths = ( instance.avatar.get_thumbnail({'size': (300, 300)}).path, instance.avatar.get_thumbnail({'size': (200, 200)}).path, instance.avatar.get_thumbnail({'size': (100, 100)}).path, ) self.assert_(os.path.exists(source_path)) for path in thumb_paths: self.assert_(os.path.exists(path)) instance.avatar.delete(save=False) self.assertFalse(os.path.exists(source_path)) for path in thumb_paths: self.assertFalse(os.path.exists(path)) def test_delete_thumbnails(self): instance = TestModel(avatar='avatars/avatar.jpg') source_path = instance.avatar.path thumb_paths = ( instance.avatar.get_thumbnail({'size': (300, 300)}).path, instance.avatar.get_thumbnail({'size': (200, 200)}).path, instance.avatar.get_thumbnail({'size': (100, 100)}).path, ) self.assert_(os.path.exists(source_path)) for path in thumb_paths: self.assert_(os.path.exists(path)) instance.avatar.delete_thumbnails() self.assert_(os.path.exists(source_path)) for path in thumb_paths: self.assertFalse(os.path.exists(path)) def test_get_thumbnails(self): instance = TestModel(avatar='avatars/avatar.jpg') instance.avatar.get_thumbnail({'size': (300, 300)}) instance.avatar.get_thumbnail({'size': (200, 200)}) self.assertEqual(len(list(instance.avatar.get_thumbnails())), 2)
class ThumbnailerFieldTest(BaseTest): def setUp(self): BaseTest.setUp(self) self.storage = TemporaryStorage() # Save a test image. data = StringIO() Image.new('RGB', (800, 600)).save(data, 'JPEG') data.seek(0) image_file = ContentFile(data.read()) self.storage.save('avatars/avatar.jpg', image_file) # Set the test model to use the current temporary storage. TestModel._meta.get_field('avatar').storage = self.storage TestModel._meta.get_field('avatar').thumbnail_storage = self.storage def tearDown(self): self.storage.delete_temporary_storage() BaseTest.tearDown(self) def test_generate_thumbnail(self): instance = TestModel(avatar='avatars/avatar.jpg') thumb = instance.avatar.generate_thumbnail({'size': (300, 300)}) self.assertEqual((thumb.width, thumb.height), (300, 225)) def test_generate_thumbnail_type_error(self): text_file = ContentFile("Lorem ipsum dolor sit amet. Not an image.") self.storage.save('avatars/invalid.jpg', text_file) instance = TestModel(avatar='avatars/invalid.jpg') generate = lambda: instance.avatar.generate_thumbnail( {'size': (300, 300)}) self.assertRaises(InvalidImageFormatError, generate) def test_delete(self): instance = TestModel(avatar='avatars/avatar.jpg') source_path = instance.avatar.path thumb_paths = ( instance.avatar.get_thumbnail({ 'size': (300, 300) }).path, instance.avatar.get_thumbnail({ 'size': (200, 200) }).path, instance.avatar.get_thumbnail({ 'size': (100, 100) }).path, ) self.assert_(os.path.exists(source_path)) for path in thumb_paths: self.assert_(os.path.exists(path)) instance.avatar.delete(save=False) self.assertFalse(os.path.exists(source_path)) for path in thumb_paths: self.assertFalse(os.path.exists(path)) def test_delete_thumbnails(self): instance = TestModel(avatar='avatars/avatar.jpg') source_path = instance.avatar.path thumb_paths = ( instance.avatar.get_thumbnail({ 'size': (300, 300) }).path, instance.avatar.get_thumbnail({ 'size': (200, 200) }).path, instance.avatar.get_thumbnail({ 'size': (100, 100) }).path, ) self.assert_(os.path.exists(source_path)) for path in thumb_paths: self.assert_(os.path.exists(path)) instance.avatar.delete_thumbnails() self.assert_(os.path.exists(source_path)) for path in thumb_paths: self.assertFalse(os.path.exists(path)) def test_get_thumbnails(self): instance = TestModel(avatar='avatars/avatar.jpg') instance.avatar.get_thumbnail({'size': (300, 300)}) instance.avatar.get_thumbnail({'size': (200, 200)}) self.assertEqual(len(list(instance.avatar.get_thumbnails())), 2)