示例#1
0
    def test_pre_save(self, filename, is_existing_file, mock_validate_size,
                      mock_validate_type):
        """
        Ensure that image validation and resizing take place only when a new
        file is being stored.
        """
        # pylint: disable=too-many-function-args

        field_value = ResizingImageFieldFile(self.model_instance, self.field,
                                             filename)
        self.model_instance.resized_image = field_value
        self.field.attname = 'resized_image'
        self.field.name = 'resized_image'

        with mock.patch(PATCH_MODULE +
                        '.ResizingImageFieldFile.create_resized_copies'
                        ) as mock_resize:
            # actual file data is needed for this test to work
            with make_uploaded_file('image/jpeg', (1000, 1000)) as image_file:
                if filename:
                    field_value.file = image_file
                    field_value._committed = is_existing_file  # pylint: disable=protected-access
                self.field.pre_save(self.model_instance, False)

        expected_called = bool(filename) and not is_existing_file
        for actual_called in (mock_validate_size.called,
                              mock_validate_type.called, mock_resize.called):
            self.assertEqual(actual_called, expected_called)
示例#2
0
    def test_create_resized_copies(self):
        """
        Ensure the create_resized_copies function produces and stores copies
        with the correct sizes and data.
        """
        field_value = ResizingImageFieldFile(self.model_instance, self.field, 'test_name')
        with mock.patch.object(field_value, 'storage') as mock_storage:
            with make_image_file((300, 300)) as image_file:
                mock_storage.listdir = mock.Mock(return_value=([], []))
                field_value.file = image_file
                field_value.create_resized_copies()

        self.assertEqual(mock_storage.save.call_count, len(TEST_SIZES))
        actual_calls = dict((v[1] for v in mock_storage.save.mock_calls))
        for width, height in TEST_SIZES:
            expected_name = 'test_name__{}x{}.jpg'.format(width, height)
            actual_data = actual_calls[expected_name]
            image_object = Image.open(actual_data)
            self.assertEqual(image_object.size, (width, height))
示例#3
0
    def test_create_resized_copies(self):
        """
        Ensure the create_resized_copies function produces and stores copies
        with the correct sizes and data.
        """
        field_value = ResizingImageFieldFile(self.model_instance, self.field,
                                             'test_name')
        with mock.patch.object(field_value, 'storage') as mock_storage:
            with make_image_file((300, 300)) as image_file:
                mock_storage.listdir = mock.Mock(return_value=([], []))
                field_value.file = image_file
                field_value.create_resized_copies()

        self.assertEqual(mock_storage.save.call_count, len(TEST_SIZES))
        actual_calls = dict((v[1] for v in mock_storage.save.mock_calls))
        for width, height in TEST_SIZES:
            expected_name = 'test_name__{}x{}.jpg'.format(width, height)
            actual_data = actual_calls[expected_name]
            image_object = Image.open(actual_data)
            self.assertEqual(image_object.size, (width, height))
示例#4
0
    def test_pre_save(self, filename, is_existing_file, mock_validate_size, mock_validate_type):
        """
        Ensure that image validation and resizing take place only when a new
        file is being stored.
        """
        # pylint: disable=too-many-function-args

        field_value = ResizingImageFieldFile(self.model_instance, self.field, filename)
        self.model_instance.resized_image = field_value
        self.field.attname = 'resized_image'
        self.field.name = 'resized_image'

        with mock.patch(PATCH_MODULE + '.ResizingImageFieldFile.create_resized_copies') as mock_resize:
            # actual file data is needed for this test to work
            with make_uploaded_file('image/jpeg', (1000, 1000)) as image_file:
                if filename:
                    field_value.file = image_file
                    field_value._committed = is_existing_file  # pylint: disable=protected-access
                self.field.pre_save(self.model_instance, False)

        expected_called = bool(filename) and not is_existing_file
        for actual_called in (mock_validate_size.called, mock_validate_type.called, mock_resize.called):
            self.assertEqual(actual_called, expected_called)