summaryrefslogtreecommitdiff
path: root/odoo/addons/test_new_api/tests/test_new_fields.py
diff options
context:
space:
mode:
authorSébastien Theys <seb@odoo.com>2019-08-01 11:20:25 +0000
committerSébastien Theys <seb@odoo.com>2019-08-02 16:44:47 +0000
commit8206b5b4cc92b6befd98ebec7f7ef8af588a9b68 (patch)
tree3d04cc7b07524124adcb26a1f61b3b326870476b /odoo/addons/test_new_api/tests/test_new_fields.py
parentec32fd54595614ee8763ba82c5862d79a3e21897 (diff)
[IMP] fields: add image field
PR: #34925
Diffstat (limited to 'odoo/addons/test_new_api/tests/test_new_fields.py')
-rw-r--r--odoo/addons/test_new_api/tests/test_new_fields.py107
1 files changed, 107 insertions, 0 deletions
diff --git a/odoo/addons/test_new_api/tests/test_new_fields.py b/odoo/addons/test_new_api/tests/test_new_fields.py
index d372f6f23ae..d12072a58a3 100644
--- a/odoo/addons/test_new_api/tests/test_new_fields.py
+++ b/odoo/addons/test_new_api/tests/test_new_fields.py
@@ -1,7 +1,10 @@
#
# test cases for new-style fields
#
+import base64
from datetime import date, datetime, time
+import io
+from PIL import Image
from odoo import fields
from odoo.exceptions import AccessError, UserError
@@ -1330,6 +1333,110 @@ class TestFields(common.TransactionCase):
self.assertEqual(field.related, ('monetary_id', 'amount'))
self.assertEqual(field.currency_field, 'base_currency_id')
+ def test_94_image(self):
+ f = io.BytesIO()
+ Image.new('RGB', (4000, 2000), '#4169E1').save(f, 'PNG')
+ f.seek(0)
+ image_w = base64.b64encode(f.read())
+
+ f = io.BytesIO()
+ Image.new('RGB', (2000, 4000), '#4169E1').save(f, 'PNG')
+ f.seek(0)
+ image_h = base64.b64encode(f.read())
+
+ record = self.env['test_new_api.model_image'].create({
+ 'name': 'image',
+ 'image': image_w,
+ 'image_128': image_w,
+ })
+
+ # test create (no resize)
+ self.assertEqual(record.image, image_w)
+ # test create (resize, width limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_128))).size, (128, 64))
+ # test create related store (resize, width limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_512))).size, (512, 256))
+ # test create related no store (resize, width limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_256))).size, (256, 128))
+
+ record.write({
+ 'image': image_h,
+ 'image_128': image_h,
+ })
+
+ # test write (no resize)
+ self.assertEqual(record.image, image_h)
+ # test write (resize, height limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_128))).size, (64, 128))
+ # test write related store (resize, height limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_512))).size, (256, 512))
+ # test write related no store (resize, height limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_256))).size, (128, 256))
+
+ record = self.env['test_new_api.model_image'].create({
+ 'name': 'image',
+ 'image': image_h,
+ 'image_128': image_h,
+ })
+
+ # test create (no resize)
+ self.assertEqual(record.image, image_h)
+ # test create (resize, height limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_128))).size, (64, 128))
+ # test create related store (resize, height limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_512))).size, (256, 512))
+ # test create related no store (resize, height limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_256))).size, (128, 256))
+
+ record.write({
+ 'image': image_w,
+ 'image_128': image_w,
+ })
+
+ # test write (no resize)
+ self.assertEqual(record.image, image_w)
+ # test write (resize, width limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_128))).size, (128, 64))
+ # test write related store (resize, width limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_512))).size, (512, 256))
+ # test write related store (resize, width limited)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_256))).size, (256, 128))
+
+ # test create inverse store
+ record = self.env['test_new_api.model_image'].create({
+ 'name': 'image',
+ 'image_512': image_w,
+ })
+ record.invalidate_cache(fnames=['image_512'], ids=record.ids)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_512))).size, (512, 256))
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image))).size, (4000, 2000))
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_256))).size, (256, 128))
+ # test write inverse store
+ record.write({
+ 'image_512': image_h,
+ })
+ record.invalidate_cache(fnames=['image_512'], ids=record.ids)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_512))).size, (256, 512))
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image))).size, (2000, 4000))
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_256))).size, (128, 256))
+
+ # test create inverse no store
+ record = self.env['test_new_api.model_image'].create({
+ 'name': 'image',
+ 'image_256': image_w,
+ })
+ record.invalidate_cache(fnames=['image_256'], ids=record.ids)
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_512))).size, (512, 256))
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image))).size, (4000, 2000))
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_256))).size, (256, 128))
+ # test write inverse no store
+ record.write({
+ 'image_256': image_h,
+ })
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_512))).size, (256, 512))
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image))).size, (2000, 4000))
+ self.assertEqual(Image.open(io.BytesIO(base64.b64decode(record.image_256))).size, (128, 256))
+
class TestX2many(common.TransactionCase):
def test_definition_many2many(self):