diff options
| author | Sébastien Theys <seb@odoo.com> | 2019-08-01 11:20:25 +0000 |
|---|---|---|
| committer | Sébastien Theys <seb@odoo.com> | 2019-08-02 16:44:47 +0000 |
| commit | 8206b5b4cc92b6befd98ebec7f7ef8af588a9b68 (patch) | |
| tree | 3d04cc7b07524124adcb26a1f61b3b326870476b /odoo/addons/test_new_api | |
| parent | ec32fd54595614ee8763ba82c5862d79a3e21897 (diff) | |
[IMP] fields: add image field
PR: #34925
Diffstat (limited to 'odoo/addons/test_new_api')
| -rw-r--r-- | odoo/addons/test_new_api/ir.model.access.csv | 1 | ||||
| -rw-r--r-- | odoo/addons/test_new_api/models.py | 12 | ||||
| -rw-r--r-- | odoo/addons/test_new_api/tests/test_new_fields.py | 107 |
3 files changed, 120 insertions, 0 deletions
diff --git a/odoo/addons/test_new_api/ir.model.access.csv b/odoo/addons/test_new_api/ir.model.access.csv index e071b1b25f1..3db5381a4b9 100644 --- a/odoo/addons/test_new_api/ir.model.access.csv +++ b/odoo/addons/test_new_api/ir.model.access.csv @@ -32,3 +32,4 @@ access_test_new_api_field_with_caps,access_test_new_api_field_with_caps,model_te access_test_new_api_req_m2o,access_test_new_api_req_m2o,model_test_new_api_req_m2o,,1,1,1,1 access_test_new_api_attachment,access_test_new_api_attachment,model_test_new_api_attachment,,1,1,1,1 access_test_new_api_attachment_host,access_test_new_api_attachment_host,model_test_new_api_attachment_host,,1,1,1,1 +access_test_new_api_model_image,access_test_new_api_model_image,model_test_new_api_model_image,,1,1,1,1 diff --git a/odoo/addons/test_new_api/models.py b/odoo/addons/test_new_api/models.py index 031b55aa3ac..e045754bcc2 100644 --- a/odoo/addons/test_new_api/models.py +++ b/odoo/addons/test_new_api/models.py @@ -480,6 +480,18 @@ class ComputeCascade(models.Model): record.baz = "<%s>" % (record.bar or "") +class ModelImage(models.Model): + _name = 'test_new_api.model_image' + _description = 'Test Image field' + + name = fields.Char(required=True) + + image = fields.Image() + image_512 = fields.Image("Image 512", related='image', max_width=512, max_height=512, store=True, readonly=False) + image_256 = fields.Image("Image 256", related='image', max_width=256, max_height=256, store=False, readonly=False) + image_128 = fields.Image("Image 128", max_width=128, max_height=128) + + class BinarySvg(models.Model): _name = 'test_new_api.binary_svg' _description = 'Test SVG upload' 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): |
