diff --git a/news/757.bugfix b/news/757.bugfix new file mode 100644 index 0000000000..deb88df219 --- /dev/null +++ b/news/757.bugfix @@ -0,0 +1,2 @@ +Use scales from registry for tests. +[agitator] \ No newline at end of file diff --git a/src/plone/restapi/tests/image.gif b/src/plone/restapi/tests/image.gif new file mode 100644 index 0000000000..af36d793f7 Binary files /dev/null and b/src/plone/restapi/tests/image.gif differ diff --git a/src/plone/restapi/tests/image.png b/src/plone/restapi/tests/image.png index 4c109bab8d..6b74cf8edf 100644 Binary files a/src/plone/restapi/tests/image.png and b/src/plone/restapi/tests/image.png differ diff --git a/src/plone/restapi/tests/test_atfield_serializer.py b/src/plone/restapi/tests/test_atfield_serializer.py index 6f7693196a..abcca030f1 100644 --- a/src/plone/restapi/tests/test_atfield_serializer.py +++ b/src/plone/restapi/tests/test_atfield_serializer.py @@ -4,6 +4,7 @@ from plone.app.testing import setRoles from plone.app.testing import TEST_USER_ID from plone.restapi.interfaces import IFieldSerializer +from plone.restapi.imaging import get_scale_infos from plone.restapi.testing import HAS_AT from plone.restapi.testing import PLONE_RESTAPI_AT_INTEGRATION_TESTING from plone.restapi.testing import PLONE_VERSION @@ -112,13 +113,13 @@ def test_text_field_serialization_returns_dict(self): ) def test_image_field_serialization_returns_dict(self): - image_file = os.path.join(os.path.dirname(__file__), u"1024x768.gif") + image_file = os.path.join(os.path.dirname(__file__), u"image.gif") with open(image_file, "rb") as f: image_data = f.read() fn = "testImageField" with patch.object(storage, "uuid4", return_value="uuid_1"): value = self.serialize( - fn, image_data, filename="1024x768.gif", mimetype="image/gif" + fn, image_data, filename="image.gif", mimetype="image/gif" ) self.assertTrue(isinstance(value, dict), "Not a ") @@ -128,28 +129,29 @@ def test_image_field_serialization_returns_dict(self): download_url = u"{}/@@images/{}.{}".format( obj_url, scale_url_uuid, GIF_SCALE_FORMAT ) - scales = { - u"listing": {u"download": download_url, u"width": 16, u"height": 12}, - u"icon": {u"download": download_url, u"width": 32, u"height": 24}, - u"tile": {u"download": download_url, u"width": 64, u"height": 48}, - u"thumb": {u"download": download_url, u"width": 80, u"height": 60}, - u"mini": {u"download": download_url, u"width": 200, u"height": 150}, - u"preview": {u"download": download_url, u"width": 400, u"height": 300}, - u"large": {u"download": download_url, u"width": 768, u"height": 576}, - } + allowed_sizes = get_scale_infos() + + scales = value["scales"] + del value["scales"] + self.assertEqual( { - u"filename": u"1024x768.gif", + u"filename": u"image.gif", u"content-type": u"image/gif", - u"size": 1514, + u"size": 3223, u"download": download_url, - u"width": 1024, - u"height": 768, - u"scales": scales, + u"width": 2000, + u"height": 1500, }, value, ) + for allowed_size in allowed_sizes: + name, width, height = allowed_size + self.assertIn(name, scales) + self.assertEqual(width, scales[name]["width"]) + self.assertEqual(download_url, scales[name]["download"]) + def test_blob_field_serialization_returns_dict(self): value = self.serialize( "testBlobField", "spam and eggs", filename="spam.txt", mimetype="text/plain" @@ -187,13 +189,13 @@ def test_blobfile_field_serialization_returns_dict(self): ) def test_blobimage_field_serialization_returns_dict(self): - image_file = os.path.join(os.path.dirname(__file__), u"1024x768.gif") + image_file = os.path.join(os.path.dirname(__file__), u"image.gif") with open(image_file, "rb") as f: image_data = f.read() fn = "testBlobImageField" with patch.object(storage, "uuid4", return_value="uuid_1"): value = self.serialize( - fn, image_data, filename="1024x768.gif", mimetype="image/gif" + fn, image_data, filename="image.gif", mimetype="image/gif" ) self.assertTrue(isinstance(value, dict), "Not a ") scale_url_uuid = "uuid_1" @@ -201,28 +203,29 @@ def test_blobimage_field_serialization_returns_dict(self): download_url = u"{}/@@images/{}.{}".format( obj_url, scale_url_uuid, GIF_SCALE_FORMAT ) - scales = { - u"listing": {u"download": download_url, u"width": 16, u"height": 12}, - u"icon": {u"download": download_url, u"width": 32, u"height": 24}, - u"tile": {u"download": download_url, u"width": 64, u"height": 48}, - u"thumb": {u"download": download_url, u"width": 128, u"height": 96}, - u"mini": {u"download": download_url, u"width": 200, u"height": 150}, - u"preview": {u"download": download_url, u"width": 400, u"height": 300}, - u"large": {u"download": download_url, u"width": 768, u"height": 576}, - } + allowed_sizes = get_scale_infos() + + scales = value["scales"] + del value["scales"] + self.assertEqual( { - u"filename": u"1024x768.gif", + u"filename": u"image.gif", u"content-type": u"image/gif", - u"size": 1514, + u"size": 3223, u"download": download_url, - u"width": 1024, - u"height": 768, - u"scales": scales, + u"width": 2000, + u"height": 1500, }, value, ) + for allowed_size in allowed_sizes: + name, width, height = allowed_size + self.assertIn(name, scales) + self.assertEqual(width, scales[name]["width"]) + self.assertEqual(download_url, scales[name]["download"]) + def test_query_field_serialization_returns_list(self): query_data = [ { diff --git a/src/plone/restapi/tests/test_dxfield_serializer.py b/src/plone/restapi/tests/test_dxfield_serializer.py index d23a980ea7..4689c28055 100644 --- a/src/plone/restapi/tests/test_dxfield_serializer.py +++ b/src/plone/restapi/tests/test_dxfield_serializer.py @@ -11,6 +11,7 @@ from plone.namedfile.file import NamedBlobImage from plone.namedfile.file import NamedFile from plone.namedfile.file import NamedImage +from plone.restapi.imaging import get_scale_infos from plone.restapi.interfaces import IFieldSerializer from plone.restapi.serializer.dxfields import DefaultFieldSerializer from plone.restapi.testing import PLONE_RESTAPI_DX_INTEGRATION_TESTING @@ -350,7 +351,7 @@ def test_namedimage_field_serialization_returns_dict(self): """In Plone < 5.1 the image returned when requesting an image scale with the same width and height of the original image is a Pillow-generated image scale in JPEG format""" - image_file = os.path.join(os.path.dirname(__file__), u"1024x768.gif") + image_file = os.path.join(os.path.dirname(__file__), u"image.gif") with open(image_file, "rb") as f: image_data = f.read() fn = "test_namedimage_field" @@ -358,7 +359,7 @@ def test_namedimage_field_serialization_returns_dict(self): value = self.serialize( fn, NamedImage( - data=image_data, contentType=u"image/gif", filename=u"1024x768.gif" + data=image_data, contentType=u"image/gif", filename=u"image.gif" ), ) self.assertTrue(isinstance(value, dict), "Not a ") @@ -375,47 +376,27 @@ def test_namedimage_field_serialization_returns_dict(self): scale_download_url = u"{}/@@images/{}.{}".format( obj_url, scale_url_uuid, "jpeg" ) - scales = { - u"listing": { - u"download": scale_download_url, - u"width": 16, - u"height": 12, - }, - u"icon": {u"download": scale_download_url, u"width": 32, u"height": 24}, - u"tile": {u"download": scale_download_url, u"width": 64, u"height": 48}, - u"thumb": { - u"download": scale_download_url, - u"width": 128, - u"height": 96, - }, - u"mini": { - u"download": scale_download_url, - u"width": 200, - u"height": 150, - }, - u"preview": { - u"download": scale_download_url, - u"width": 400, - u"height": 300, - }, - u"large": { - u"download": scale_download_url, - u"width": 768, - u"height": 576, - }, - } + allowed_sizes = get_scale_infos() + + scales = value["scales"] + del value["scales"] + self.assertEqual( { - u"filename": u"1024x768.gif", + u"filename": u"image.gif", u"content-type": u"image/gif", - u"size": 1514, + u"size": 3223, u"download": original_download_url, u"width": 1024, u"height": 768, - u"scales": scales, }, value, ) + for allowed_size in allowed_sizes: + name, width, height = allowed_size + self.assertIn(name, scales) + self.assertEqual(width, scales[name]["width"]) + self.assertEqual(scale_download_url, scales[name]["download"]) def test_namedimage_field_serialization_doesnt_choke_on_corrupt_image(self): """Original image url will be None because the original image is corrupted @@ -447,7 +428,7 @@ def test_namedblobimage_field_serialization_returns_dict(self): """In Plone < 5.1 the image returned when requesting an image scale with the same width and height of the original image is a Pillow-generated image scale in JPEG format""" - image_file = os.path.join(os.path.dirname(__file__), u"1024x768.gif") + image_file = os.path.join(os.path.dirname(__file__), u"image.gif") with open(image_file, "rb") as f: image_data = f.read() fn = "test_namedblobimage_field" @@ -455,7 +436,7 @@ def test_namedblobimage_field_serialization_returns_dict(self): value = self.serialize( fn, NamedBlobImage( - data=image_data, contentType=u"image/gif", filename=u"1024x768.gif" + data=image_data, contentType=u"image/gif", filename=u"image.gif" ), ) self.assertTrue(isinstance(value, dict), "Not a ") @@ -472,47 +453,27 @@ def test_namedblobimage_field_serialization_returns_dict(self): scale_download_url = u"{}/@@images/{}.{}".format( obj_url, scale_url_uuid, "jpeg" ) - scales = { - u"listing": { - u"download": scale_download_url, - u"width": 16, - u"height": 12, - }, - u"icon": {u"download": scale_download_url, u"width": 32, u"height": 24}, - u"tile": {u"download": scale_download_url, u"width": 64, u"height": 48}, - u"thumb": { - u"download": scale_download_url, - u"width": 128, - u"height": 96, - }, - u"mini": { - u"download": scale_download_url, - u"width": 200, - u"height": 150, - }, - u"preview": { - u"download": scale_download_url, - u"width": 400, - u"height": 300, - }, - u"large": { - u"download": scale_download_url, - u"width": 768, - u"height": 576, - }, - } + allowed_sizes = get_scale_infos() + + scales = value["scales"] + del value["scales"] + self.assertEqual( { - u"filename": u"1024x768.gif", + u"filename": u"image.gif", u"content-type": u"image/gif", - u"size": 1514, + u"size": 3223, u"download": original_download_url, u"width": 1024, u"height": 768, - u"scales": scales, }, value, ) + for allowed_size in allowed_sizes: + name, width, height = allowed_size + self.assertIn(name, scales) + self.assertEqual(width, scales[name]["width"]) + self.assertEqual(scale_download_url, scales[name]["download"]) def test_namedblobimage_field_serialization_doesnt_choke_on_corrupt_image(self): """Original image url will be None because the original image is corrupted diff --git a/src/plone/restapi/tests/test_serializer.py b/src/plone/restapi/tests/test_serializer.py index 10e12b8a45..2d8e42428a 100644 --- a/src/plone/restapi/tests/test_serializer.py +++ b/src/plone/restapi/tests/test_serializer.py @@ -6,6 +6,7 @@ from plone.app.textfield.value import RichTextValue from plone.namedfile.file import NamedBlobImage from plone.namedfile.file import NamedFile +from plone.restapi.imaging import get_scale_infos from plone.restapi.interfaces import ISerializeToJson from plone.restapi.testing import PLONE_RESTAPI_DX_INTEGRATION_TESTING from plone.scale import storage @@ -262,28 +263,31 @@ def test_serialize_image(self): obj_url = self.portal.image1.absolute_url() scale_url_uuid = "uuid_1" download_url = u"{}/@@images/{}.png".format(obj_url, scale_url_uuid) - scales = { - u"listing": {u"download": download_url, u"width": 16, u"height": 4}, - u"icon": {u"download": download_url, u"width": 32, u"height": 8}, - u"tile": {u"download": download_url, u"width": 64, u"height": 16}, - u"thumb": {u"download": download_url, u"width": 128, u"height": 33}, - u"mini": {u"download": download_url, u"width": 200, u"height": 52}, - u"preview": {u"download": download_url, u"width": 215, u"height": 56}, - u"large": {u"download": download_url, u"width": 215, u"height": 56}, - } + obj = self.serialize(self.portal.image1)["image"] + + allowed_sizes = get_scale_infos() + + scales = obj["scales"] + del obj["scales"] + self.assertEqual( { u"filename": u"image.png", u"content-type": u"image/png", - u"size": 1185, + u"size": 7534, u"download": download_url, - u"width": 215, - u"height": 56, - u"scales": scales, + u"width": 982, + u"height": 256, }, - self.serialize(self.portal.image1)["image"], + obj, ) + for allowed_size in allowed_sizes: + name, width, height = allowed_size + self.assertIn(name, scales) + self.assertEqual(width, scales[name]["width"]) + self.assertEqual(download_url, scales[name]["download"]) + def test_serialize_empty_image_returns_none(self): self.portal.invokeFactory("Image", id="image1", title="Image 1") self.assertEqual(None, self.serialize(self.portal.image1)["image"])