summaryrefslogtreecommitdiff
path: root/odoo/addons/test_new_api
diff options
context:
space:
mode:
Diffstat (limited to 'odoo/addons/test_new_api')
-rw-r--r--odoo/addons/test_new_api/ir.model.access.csv1
-rw-r--r--odoo/addons/test_new_api/models.py9
-rw-r--r--odoo/addons/test_new_api/tests/test_new_fields.py56
3 files changed, 66 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 46a658c818d..c825fb51c59 100644
--- a/odoo/addons/test_new_api/ir.model.access.csv
+++ b/odoo/addons/test_new_api/ir.model.access.csv
@@ -21,3 +21,4 @@ access_test_new_api_compute_protected,access_test_new_api_compute_protected,mode
access_test_new_api_multi_compute_inverse,access_test_new_api_multi_compute_inverse,model_test_new_api_multi_compute_inverse,,1,1,1,1
access_test_new_api_recursive,access_test_new_api_recursive,model_test_new_api_recursive,,1,1,1,1
access_test_new_api_cascade,access_test_new_api_cascade,model_test_new_api_cascade,,1,1,1,1
+access_test_new_api_binary_svg,access_test_new_api_binary_svg,model_test_new_api_binary_svg,,1,1,1,1
diff --git a/odoo/addons/test_new_api/models.py b/odoo/addons/test_new_api/models.py
index bc0a3e45876..043ee8a0b7d 100644
--- a/odoo/addons/test_new_api/models.py
+++ b/odoo/addons/test_new_api/models.py
@@ -459,3 +459,12 @@ class ComputeCascade(models.Model):
def _compute_baz(self):
for record in self:
record.baz = "<%s>" % (record.bar or "")
+
+
+class BinarySvg(models.Model):
+ _name = 'test_new_api.binary_svg'
+ _description = 'Test SVG upload'
+
+ name = fields.Char(required=True)
+ image_attachment = fields.Binary(attachment=True)
+ image_wo_attachment = fields.Binary(attachment=False)
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 8284f4652c6..caa4eedf4bf 100644
--- a/odoo/addons/test_new_api/tests/test_new_fields.py
+++ b/odoo/addons/test_new_api/tests/test_new_fields.py
@@ -998,6 +998,62 @@ class TestFields(common.TransactionCase):
self.assertEqual(count(message), 1)
self.assertEqual(count(message1), 0)
+ def test_90_binary_svg(self):
+ from odoo.addons.base.tests.test_mimetypes import SVG
+ # This should work without problems
+ self.env['test_new_api.binary_svg'].create({
+ 'name': 'Test without attachment',
+ 'image_wo_attachment': SVG,
+ })
+ # And this gives error
+ with self.assertRaises(UserError):
+ self.env['test_new_api.binary_svg'].sudo(
+ self.env.ref('base.user_demo'),
+ ).create({
+ 'name': 'Test without attachment',
+ 'image_wo_attachment': SVG,
+ })
+
+ def test_91_binary_svg_attachment(self):
+ from odoo.addons.base.tests.test_mimetypes import SVG
+ # This doesn't neuter SVG with admin
+ record = self.env['test_new_api.binary_svg'].create({
+ 'name': 'Test without attachment',
+ 'image_attachment': SVG,
+ })
+ attachment = self.env['ir.attachment'].search([
+ ('res_model', '=', record._name),
+ ('res_field', '=', 'image_attachment'),
+ ('res_id', '=', record.id),
+ ])
+ self.assertEqual(attachment.mimetype, 'image/svg+xml')
+ # ...but this should be neutered with demo user
+ record = self.env['test_new_api.binary_svg'].sudo(
+ self.env.ref('base.user_demo'),
+ ).create({
+ 'name': 'Test without attachment',
+ 'image_attachment': SVG,
+ })
+ attachment = self.env['ir.attachment'].search([
+ ('res_model', '=', record._name),
+ ('res_field', '=', 'image_attachment'),
+ ('res_id', '=', record.id),
+ ])
+ self.assertEqual(attachment.mimetype, 'text/plain')
+
+ def test_92_binary_self_avatar_svg(self):
+ from odoo.addons.base.tests.test_mimetypes import SVG
+ demo_user = self.env.ref('base.user_demo')
+ # User demo changes his own avatar
+ demo_user.sudo(demo_user).image = SVG
+ # The SVG file should have been neutered
+ attachment = self.env['ir.attachment'].search([
+ ('res_model', '=', demo_user.partner_id._name),
+ ('res_field', '=', 'image'),
+ ('res_id', '=', demo_user.partner_id.id),
+ ])
+ self.assertEqual(attachment.mimetype, 'text/plain')
+
class TestX2many(common.TransactionCase):
def test_search_many2many(self):