def test_gm_options_crop_gravities(self, crop, expected):
     image = ImageModelFactory.create()
     thumbnail = Thumbnail(image.file.path, {
         'size': ['100', '50'],
         'crop': crop
     })
     assert thumbnail.get_gm_options().get('gravity', None) == expected
    def test_get_size(self):
        image = ImageModelFactory.create()
        thumbnail = Thumbnail(image.file.path, {'size': ['50', '50']})

        size = thumbnail.get_size()
        assert size.width == 25
        assert size.height == 50
 def test_gm_options_quality(self):
     image = ImageModelFactory.create()
     thumbnail = Thumbnail(image.file.path, {
         'size': ['100', '50'],
         'quality': 5
     })
     assert thumbnail.get_gm_options()['quality'] == 5
 def test_get_name(self):
     thumbnail = Thumbnail('test.jpg', {
         'size': ['100', '100'],
         'viewport': 'ignored'
     })
     assert thumbnail.get_name(
     ) == '821b6e68771352f0bc53acd8e8144972a56dd0ac/test.jpg'
    def test_get_size(self):
        image = ImageModelFactory.create()
        thumbnail = Thumbnail(image.file.path, {'size': ['50', '50']})

        size = thumbnail.get_size()
        assert size.width == 25
        assert size.height == 50
Beispiel #6
0
class TestThumbnailView:
    def setup(self):
        self.image = ImageModelFactory.create()
        self.thumbnail = Thumbnail(self.image.file.path, {'size': [50, 50]})

    def test_get(self, client, settings):
        settings.ULTIMATETHUMB_USE_X_ACCEL_REDIRECT = False
        response = client.get(self.thumbnail.url)

        assert response.status_code == 200
        assert 'Last-Modified' in response
        assert 'Content-Length' in response
        assert 'Content-Disposition' not in response
        assert 'X-Accel-Redirect' not in response

    def test_get_invalid(self, client):
        response = client.get(
            reverse(
                'thumbnail',
                kwargs={
                    'name':
                    'testtesttesttesttesttesttesttesttesttest/foobar.jpg'
                },
            ))
        assert response.status_code == 404

    def test_get_x_accel_redirect(self, client, settings):
        settings.ULTIMATETHUMB_USE_X_ACCEL_REDIRECT = True
        response = client.get(self.thumbnail.url)

        assert response.status_code == 200
        assert response['X-Accel-Redirect'] == self.thumbnail.get_storage_url()

    def test_get_x_accel_redirect_with_domain(self, client, settings):
        settings.ULTIMATETHUMB_USE_X_ACCEL_REDIRECT = True
        settings.ULTIMATETHUMB_DOMAIN = 'statichost'
        response = client.get(self.thumbnail.url)

        thumbnail_storage._setup()
        assert self.thumbnail.get_storage_url().startswith('//statichost')
        assert response.status_code == 200
        assert response['X-Accel-Redirect'].startswith('/{0}'.format(
            self.thumbnail.get_name()))

        settings.ULTIMATETHUMB_DOMAIN = ''
        thumbnail_storage._setup()

    def test_get_last_modified(self, client, settings):
        settings.ULTIMATETHUMB_USE_X_ACCEL_REDIRECT = True
        response = client.get(self.thumbnail.url)

        assert response.status_code == 200

        response2 = client.get(
            self.thumbnail.url,
            HTTP_IF_MODIFIED_SINCE=response['Last-Modified'])
        assert response2.status_code == 304
    def test_generate_pngquant_called(self, pngquant_mock):
        image = ImageModelFactory.create(file__filename='test.png')
        thumbnail = Thumbnail(image.file.path, {
            'size': ['50', '50'],
            'pngquant': '50'
        })

        assert thumbnail.generate() is True
        assert pngquant_mock.called is True
    def test_from_name(self):
        thumbnail = Thumbnail('test.jpg', {
            'size': ['100', '100'],
            'viewport': 'ignored'
        })
        thumbnail2 = Thumbnail.from_name(thumbnail.get_name())

        assert thumbnail.source == thumbnail2.source
        thumbnail.options.pop('viewport')
        assert thumbnail.options == thumbnail2.options
 def test_base64_content(self):
     image = ImageModelFactory.create()
     thumbnail = Thumbnail(image.file.path, {'size': ['2', '2']})
     assert thumbnail.get_base64_content() == (
         '/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAg'
         'MDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8'
         'XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQU'
         'FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAACAAEDAREAAhEBAxEB/'
         '8QAFAABAAAAAAAAAAAAAAAAAAAAB//EABQQAQAAAAAAAAAAAAAAAAAAAAD/xAAVAQ'
         'EBAAAAAAAAAAAAAAAAAAAICf/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhE'
         'DEQA/AHhPom3/2Q==')
class TestThumbnailView:
    def setup(self):
        self.image = ImageModelFactory.create()
        self.thumbnail = Thumbnail(self.image.file.path, {'size': [50, 50]})

    def test_get(self, client, settings):
        settings.ULTIMATETHUMB_USE_X_ACCEL_REDIRECT = False
        response = client.get(self.thumbnail.url)

        assert response.status_code == 200
        assert 'Last-Modified' in response
        assert 'Content-Length' in response
        assert 'Content-Disposition' not in response
        assert 'X-Accel-Redirect' not in response

    def test_get_invalid(self, client):
        response = client.get(reverse('thumbnail', kwargs={
            'name': 'testtesttesttesttesttesttesttesttesttest/foobar.jpg'
        }))
        assert response.status_code == 404

    def test_get_x_accel_redirect(self, client, settings):
        settings.ULTIMATETHUMB_USE_X_ACCEL_REDIRECT = True
        response = client.get(self.thumbnail.url)

        assert response.status_code == 200
        assert response['X-Accel-Redirect'] == self.thumbnail.get_storage_url()

    def test_get_x_accel_redirect_with_domain(self, client, settings):
        settings.ULTIMATETHUMB_USE_X_ACCEL_REDIRECT = True
        settings.ULTIMATETHUMB_DOMAIN = 'statichost'
        response = client.get(self.thumbnail.url)

        thumbnail_storage._setup()
        assert self.thumbnail.get_storage_url().startswith('//statichost')
        assert response.status_code == 200
        assert response['X-Accel-Redirect'].startswith(
            '/{0}'.format(self.thumbnail.get_name()))

        settings.ULTIMATETHUMB_DOMAIN = ''
        thumbnail_storage._setup()

    def test_get_last_modified(self, client, settings):
        settings.ULTIMATETHUMB_USE_X_ACCEL_REDIRECT = True
        response = client.get(self.thumbnail.url)

        assert response.status_code == 200

        response2 = client.get(
            self.thumbnail.url,
            HTTP_IF_MODIFIED_SINCE=response['Last-Modified']
        )
        assert response2.status_code == 304
    def test_gm_options_crop(self):
        image = ImageModelFactory.create()
        thumbnail = Thumbnail(image.file.path, {'size': ['100', '50'], 'crop': False})
        assert 'gravity' not in thumbnail.get_gm_options()
        assert 'crop' not in thumbnail.get_gm_options()

        thumbnail = Thumbnail(image.file.path, {'size': ['100', '50'], 'crop': True})
        assert list(thumbnail.get_gm_options().items()) == [
            ('+profile', '"*"'),
            ('resize', '50x25^'),
            ('gravity', 'Center'),
            ('crop', '50x25+0+0')
        ]
    def test_estimated_size(self, input_size, thumb_size, upscale, crop, expected):
        image = ImageModelFactory.create(
            file__width=input_size[0], file__height=input_size[1])

        instance = Thumbnail(image.file.path, {
            'size': (str(thumb_size[0]), str(thumb_size[1])),
            'upscale': upscale,
            'crop': crop
        })
        assert instance.get_estimated_size() == Size(*expected), (
            '{0} -> {1} (upscale: {3} crop: {2})'.format(
                input_size,
                thumb_size,
                crop,
                upscale
            ))
    def test_estimated_size(self, input_size, thumb_size, upscale, crop,
                            expected):
        image = ImageModelFactory.create(file__width=input_size[0],
                                         file__height=input_size[1])

        instance = Thumbnail(
            image.file.path,
            {
                'size': (str(thumb_size[0]), str(thumb_size[1])),
                'upscale': upscale,
                'crop': crop,
            },
        )
        assert instance.get_estimated_size() == Size(
            *expected), '{0} -> {1} (upscale: {3} crop: {2})'.format(
                input_size, thumb_size, crop, upscale)
 def test_repr(self):
     thumbnail = Thumbnail('test.jpg', {
         'size': ['100', '100'],
         'upscale': False
     })
     assert repr(thumbnail) == (
         "<Thumbnail: test.jpg crop=False factor2x=True pngquant=None"
         " quality=90 size=['100', '100'] upscale=False>")
    def test_gm_options_sizes(self, input_size, thumb_size, upscale, crop, expected):
        image = ImageModelFactory.create(
            file__width=input_size[0], file__height=input_size[1])

        instance = Thumbnail(image.file.path, {
            'size': (str(thumb_size[0]), str(thumb_size[1])),
            'upscale': upscale,
            'crop': crop
        })

        assert_error = '{0} -> {1} (upscale: {3} crop: {2})'.format(
            input_size,
            thumb_size,
            crop,
            upscale
        )

        options = instance.get_gm_options()
        assert options.get('resize', None) == expected[0], assert_error
        assert options.get('crop', None) == expected[1], assert_error
    def test_gm_options_sizes(self, input_size, thumb_size, upscale, crop,
                              expected):
        image = ImageModelFactory.create(file__width=input_size[0],
                                         file__height=input_size[1])

        instance = Thumbnail(
            image.file.path,
            {
                'size': (str(thumb_size[0]), str(thumb_size[1])),
                'upscale': upscale,
                'crop': crop,
            },
        )

        assert_error = '{0} -> {1} (upscale: {3} crop: {2})'.format(
            input_size, thumb_size, crop, upscale)

        options = instance.get_gm_options()
        assert options.get('resize', None) == expected[0], assert_error
        assert options.get('crop', None) == expected[1], assert_error
    def test_viewport(self, input_size, thumb_size, viewport, expected):
        image = ImageModelFactory.create(file__width=input_size[0],
                                         file__height=input_size[1])

        instance = Thumbnail(
            image.file.path,
            {
                'size': (str(thumb_size[0]), str(thumb_size[1])),
                'viewport':
                (str(viewport[0]), str(viewport[1])) if viewport else None,
            },
        )

        assert_error = '{0} -> {1} / {2}'.format(
            input_size,
            thumb_size,
            viewport,
        )

        viewport_size = instance.viewport
        assert viewport_size.width == expected[0], assert_error
        assert viewport_size.height == expected[1], assert_error
    def test_gm_options_crop(self):
        image = ImageModelFactory.create()
        thumbnail = Thumbnail(image.file.path, {
            'size': ['100', '50'],
            'crop': False
        })
        assert 'gravity' not in thumbnail.get_gm_options()
        assert 'crop' not in thumbnail.get_gm_options()

        thumbnail = Thumbnail(image.file.path, {
            'size': ['100', '50'],
            'crop': True
        })
        assert list(thumbnail.get_gm_options().items()) == [
            ('+profile', '"*"'),
            ('resize', '50x25^'),
            ('gravity', 'Center'),
            ('crop', '50x25+0+0'),
            ('quality', 90),
        ]
 def test_storage_name_override_suffix(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['100', '50']})
     assert thumbnail.get_storage_name(suffix='foo') == (
         '3cfbc9962355c42f448931e11442cb2c7341ec76/test.foo')
 def test_storage_name_factored(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['100', '50']})
     assert thumbnail.get_storage_name(2) == os.path.join(
         '2x', thumbnail.get_name())
 def test_storage_name(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['100', '50']})
     assert thumbnail.get_storage_name() == thumbnail.get_name()
 def test_storage_name_factored(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['100', '50']})
     assert thumbnail.get_storage_name(2) == os.path.join('2x', thumbnail.get_name())
 def setup(self):
     self.image = ImageModelFactory.create()
     self.thumbnail = Thumbnail(self.image.file.path, {'size': [50, 50]})
Beispiel #24
0
 def setup(self):
     self.image = ImageModelFactory.create()
     self.thumbnail = Thumbnail(self.image.file.path, {'size': [50, 50]})
 def test_mimetype(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['100', '100']})
     assert thumbnail.get_mimetype() == 'image/jpeg'
 def test_storage_name(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['100', '50']})
     assert thumbnail.get_storage_name() == thumbnail.get_name()
 def test_get_name(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['100', '100']})
     assert thumbnail.get_name() == '48382ea502faf93772a5b07f7d8a590f01d0f15b/test.jpg'
 def test_storage_path(self):
     image = ImageModelFactory.create()
     thumbnail = Thumbnail(image.file.path, {'size': ['50', '50']})
     assert thumbnail.get_storage_path() == os.path.join(
         thumbnail_storage.location, thumbnail.get_name())
 def test_storage_url(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['50', '50']})
     assert thumbnail.get_storage_url() == os.path.join(
         thumbnail_storage.base_url, thumbnail.get_name())
 def test_exists(self):
     image = ImageModelFactory.create()
     thumbnail = Thumbnail(image.file.path, {'size': ['50', '50']})
     assert thumbnail.exists() is False
     thumbnail.generate()
     assert thumbnail.exists() is True
    def test_exists_dont_generate(self, generate_mock):
        image = ImageModelFactory.create()
        thumbnail = Thumbnail(image.file.path, {'size': ['50', '50']})

        assert thumbnail.exists() is False
        assert generate_mock.called is False
 def test_gm_options_quality(self):
     image = ImageModelFactory.create()
     thumbnail = Thumbnail(image.file.path, {'size': ['100', '50'], 'quality': 5})
     assert thumbnail.get_gm_options()['quality'] == 5
 def test_storage_url(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['50', '50']})
     assert thumbnail.get_storage_url() == os.path.join(
         thumbnail_storage.base_url, thumbnail.get_name())
    def test_invalid_opts(self):
        with pytest.raises(ValueError) as exc:
            Thumbnail('test.jpg', {})

        assert '`size` is required' in str(exc.value)
 def test_storage_path(self):
     image = ImageModelFactory.create()
     thumbnail = Thumbnail(image.file.path, {'size': ['50', '50']})
     assert thumbnail.get_storage_path() == os.path.join(
         thumbnail_storage.location, thumbnail.get_name())
    def test_generate_pngquant_no_png(self, pngquant_mock):
        image = ImageModelFactory.create()
        thumbnail = Thumbnail(image.file.path, {'size': ['50', '50'], 'pngquant': '50'})

        assert thumbnail.generate() is True
        assert pngquant_mock.called is False
    def test_from_name(self):
        thumbnail = Thumbnail('test.jpg', {'size': ['100', '100']})
        thumbnail2 = Thumbnail.from_name(thumbnail.get_name())

        assert thumbnail.source == thumbnail2.source
        assert thumbnail.options == thumbnail2.options
 def test_requested_size(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['100', '50']})
     assert thumbnail.requested_size.width == '100'
     assert thumbnail.requested_size.height == '50'
 def test_exists(self):
     image = ImageModelFactory.create()
     thumbnail = Thumbnail(image.file.path, {'size': ['50', '50']})
     assert thumbnail.exists() is False
     thumbnail.generate()
     assert thumbnail.exists() is True
 def test_base64_path(self):
     image = ImageModelFactory.create()
     thumbnail = Thumbnail(image.file.path, {'size': ['50', '50']})
     assert thumbnail.get_base64_path().endswith('.base64')
    def test_exists_dont_generate(self, generate_mock):
        image = ImageModelFactory.create()
        thumbnail = Thumbnail(image.file.path, {'size': ['50', '50']})

        assert thumbnail.exists() is False
        assert generate_mock.called is False
 def test_mimetype_unknown(self):
     thumbnail = Thumbnail('test.foo', {'size': ['100', '100']})
     assert thumbnail.get_mimetype() == 'application/octet-stream'
    def test_generate_pngquant_disabled(self, pngquant_mock):
        image = ImageModelFactory.create()
        thumbnail = Thumbnail(image.file.path, {'size': ['50', '50']})

        assert thumbnail.generate() is True
        assert pngquant_mock.called is False
 def test_url_2x(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['100', '100']})
     assert thumbnail.url_2x == (
         '/2x/821b6e68771352f0bc53acd8e8144972a56dd0ac/test.jpg')
 def test_get_name(self):
     thumbnail = Thumbnail('test.jpg', {'size': ['100', '100']})
     assert thumbnail.get_name() == '821b6e68771352f0bc53acd8e8144972a56dd0ac/test.jpg'