From e208a61df7c217a0b5e2a56db6298754c9e138e9 Mon Sep 17 00:00:00 2001 From: Peter Holzer Date: Fri, 21 Jun 2019 12:49:25 +0200 Subject: [PATCH] Test against actual scales and bigger images --- news/757.bugfix | 2 + src/plone/restapi/tests/image.gif | Bin 0 -> 3223 bytes src/plone/restapi/tests/image.png | Bin 1185 -> 7534 bytes .../restapi/tests/test_atfield_serializer.py | 67 ++++++------ .../restapi/tests/test_dxfield_serializer.py | 97 ++++++------------ src/plone/restapi/tests/test_serializer.py | 32 +++--- 6 files changed, 84 insertions(+), 114 deletions(-) create mode 100644 news/757.bugfix create mode 100644 src/plone/restapi/tests/image.gif 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 0000000000000000000000000000000000000000..af36d793f71de955b9ecb871f94f59d3760dfa93 GIT binary patch literal 3223 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 literal 0 HcmV?d00001 diff --git a/src/plone/restapi/tests/image.png b/src/plone/restapi/tests/image.png index 4c109bab8dbadd00ceb082694f3416b715055935..6b74cf8edf169410cd343f7481a24d5222732ffd 100644 GIT binary patch literal 7534 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 literal 1185 zcmV;S1YY}zP)=xnvsnabWDk;T{N>i~nkE||zor_QO-;(NTvH2D426-nUu@_7pLQpkYy_MZTyNstbb5ZZ zwqx{xEQCOPq!bL>d=r~XQr|(z$J{CUw@0HTe<-H69xKkDirw2{ZFwlK-*d1^i(#2< zZdBfJ$f$ydeoc4S)mON7eLJim#v9j1NI?#R@upr~6xDF?Osq{SklySZY|9{P>H((P z`_IIpd>5zt1#+K6%5}triu4b;lFhklRGZ(O-CA(TH(592LivBkRT?MLfBr3vORg5K z?&8YkTrRZ838i$k$XU2LZhDxqU(mI)Ok&p(Gt zFIg1VKIzh2-EAACm_>`mgctiiTzjxQ8leQa$z?AWkGY&3CS6N=JG6$2FugPF>rm?z z#BRDZf7!{U#i4-E)hd;v*qzu@>3yU1DP%$=aQWyzNrB+rxId8cvMiKsCmoEY4;7xsu7lJSs`q zq@vs!E~A?@hOhg}y0(AP4leWtZUTp!=Dl2b2y%%t*wjuiQ68@RUB}vp(xr0@t{_iO z*B;F~Xz(n4GRP$yz8}9-ajm^eR}XT(Bq=9wAr^Ake&kCZWGpys#Ta1r(SPlS`?+jT zE!UuJ-%kpRUyL;6;Ft8OxPdZBea3~RZ*#87Ww7yZAkIfUjq@OuJ*GLABpExoP}|q% zWxID??y8~(xcE5Nm-8rdB#%0uYnJzN&UT?kA;e+c`@eGGx&xOE{t4@p7k*zf+z`NZ zrGXGQUsoRIDu?5tP@u+j0ILtw0YJ~6zdQsx(70|B4%cl^`}2({R{$Ray`av98s>)v z^1~@t0&fDnsxFE`Q!m}%vwXW_E)`+2F*thMGAz%jW230=W!+5q+DMy2E-}RDDukQE z`wnZqi4JfHM!e9UdZ4e?%U;&Yb1rQk?@}t=m(#5G?h~2eKGA+I^aR>h-#{+uV$?F; z*K>BVuXmKoRb0b*)SOFs#42g94=Z&E>-CX+*nPY6G_D`cxp4WwdcJS2iAW#YH&-LA zw&POTz$W`XE=62Z#qg?g4uOA54W)zOs~pznqgkOo@0AE&?|jMd)1&87UZdm3RUAFz z9MR9Yub*>zKj$ic&cUM6_ASmW&(E2McZB){V+fV(8gbsY00000NkvXXu0mjf") @@ -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"])