Mercurial > public > sg101
diff core/tests/images/test_upload.py @ 1230:f2977a75bf6e modernize
Add unit test for local upload of images.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sun, 20 Apr 2025 17:49:44 -0500 |
parents | |
children | bbabbbb80d60 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/tests/images/test_upload.py Sun Apr 20 17:49:44 2025 -0500 @@ -0,0 +1,67 @@ +import unittest + +from mock import patch, call, mock_open, Mock +from core.images.upload import process_upload + +class ProcessUploadTestCase(unittest.TestCase): + + @patch('core.images.upload.Site.objects.get_current') + @patch('core.images.upload.os.chmod') + @patch('core.images.upload.uuid') + @patch('core.images.upload.shutil') + @patch('core.images.upload.BytesIO') + @patch('core.images.upload.orient_image') + @patch('core.images.upload.Image') + @patch('core.images.upload.settings.SITE_SCHEME', new='https') + @patch('core.images.upload.settings.USER_PHOTOS_LOCAL_UPLOAD', new=True) + @patch('core.images.upload.settings.MEDIA_ROOT', new='/media') + @patch('core.images.upload.settings.USER_PHOTOS_LOCAL_UPLOAD_DIR', new='user_upload') + def test_local_upload(self, image_mock, orient_mock, bytes_mock, + shutil_mock, uuid_mock, chmod_mock, current_mock): + filename = 'image.jpg' + orient_mock.return_value = (True, image_mock.open) + + image = Mock() + image.size = (2000, 2000) + image_mock.open.return_value = image + + uuid_mock.uuid4().hex = 'deadbeef' + + site_mock = Mock() + site_mock.configure_mock(name='Site', domain='site.com') + current_mock.return_value = site_mock + + open_mock = mock_open() + with patch('__builtin__.open', open_mock): + result = process_upload(None, filename) + + self.assertEqual(image_mock.open.mock_calls, [ + call(filename), + call.save(filename), + call(filename), + call().thumbnail((660, 720), image_mock.ANTIALIAS), + call().save(filename), + call(filename), + call().thumbnail((120, 120), image_mock.ANTIALIAS), + call().save(bytes_mock(), format=image.format), + ]) + orient_mock.assert_called_with(image_mock.open()) + + expected_path = '/media/user_upload/deadbeef.jpg' + expected_thumb_path = '/media/user_upload/deadbeeft.jpg' + shutil_mock.copy.assert_called_once_with(filename, expected_path) + self.assertEqual(chmod_mock.mock_calls, [ + call(expected_path, 0644), + call(expected_thumb_path, 0644), + ]) + + bytes_mock().seek.assert_called_once_with(0) + self.assertEqual(open_mock.mock_calls, [ + call(expected_thumb_path, 'wb'), + call().__enter__(), + call().write(bytes_mock().getvalue()), + call().__exit__(None, None, None), + ]) + self.assertEqual(result, + ('https://site.com/media/user_upload/deadbeef.jpg', + 'https://site.com/media/user_upload/deadbeeft.jpg'))