summaryrefslogtreecommitdiff
path: root/addons/web/tests/test_image.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/web/tests/test_image.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/web/tests/test_image.py')
-rw-r--r--addons/web/tests/test_image.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/addons/web/tests/test_image.py b/addons/web/tests/test_image.py
new file mode 100644
index 00000000..161a0645
--- /dev/null
+++ b/addons/web/tests/test_image.py
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import io
+import base64
+
+from PIL import Image
+
+from odoo.tests.common import HttpCase, tagged
+
+
+@tagged('-at_install', 'post_install')
+class TestImage(HttpCase):
+ def test_01_content_image_resize_placeholder(self):
+ """The goal of this test is to make sure the placeholder image is
+ resized appropriately depending on the given URL parameters."""
+
+ # CASE: resize placeholder, given size but original ratio is always kept
+ response = self.url_open('/web/image/0/200x150')
+ image = Image.open(io.BytesIO(response.content))
+ self.assertEqual(image.size, (150, 150))
+
+ # CASE: resize placeholder to 128
+ response = self.url_open('/web/image/fake/0/image_128')
+ image = Image.open(io.BytesIO(response.content))
+ self.assertEqual(image.size, (128, 128))
+
+ # CASE: resize placeholder to 256
+ response = self.url_open('/web/image/fake/0/image_256')
+ image = Image.open(io.BytesIO(response.content))
+ self.assertEqual(image.size, (256, 256))
+
+ # CASE: resize placeholder to 1024 (but placeholder image is too small)
+ response = self.url_open('/web/image/fake/0/image_1024')
+ image = Image.open(io.BytesIO(response.content))
+ self.assertEqual(image.size, (256, 256))
+
+ # CASE: no size found, use placeholder original size
+ response = self.url_open('/web/image/fake/0/image_no_size')
+ image = Image.open(io.BytesIO(response.content))
+ self.assertEqual(image.size, (256, 256))
+
+ def test_02_content_image_Etag_304(self):
+ """This test makes sure that the 304 response is properly returned if the ETag is properly set"""
+
+ attachment = self.env['ir.attachment'].create({
+ 'datas': b"R0lGODdhAQABAIAAAP///////ywAAAAAAQABAAACAkQBADs=",
+ 'name': 'testEtag.gif',
+ 'public': True,
+ 'mimetype': 'image/gif',
+ })
+ response = self.url_open('/web/image/%s' % attachment.id, timeout=None)
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(base64.b64encode(response.content), attachment.datas)
+
+ etag = response.headers.get('ETag')
+
+ response2 = self.url_open('/web/image/%s' % attachment.id, headers={"If-None-Match": etag})
+ self.assertEqual(response2.status_code, 304)
+ self.assertEqual(len(response2.content), 0)