From 685cb96ec218601deb214d8ebe97dda008762d23 Mon Sep 17 00:00:00 2001 From: "Tommy (tong)" Date: Wed, 1 Jun 2022 08:54:10 +0000 Subject: [PATCH] [IMP] base: add support to company_dependent for html fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: Html fields cannot add company_dependent Cause: Neven have html type for company property Solution: Add html type inside ir.property closes odoo/odoo#121243 Signed-off-by: Rémy Voet --- odoo/addons/base/models/ir_property.py | 3 + .../test_new_api/models/test_new_api.py | 2 + .../test_new_api/tests/test_new_fields.py | 79 +++++++++++++++++++ 3 files changed, 84 insertions(+) diff --git a/odoo/addons/base/models/ir_property.py b/odoo/addons/base/models/ir_property.py index 105f706bcd6..20bee4335fe 100644 --- a/odoo/addons/base/models/ir_property.py +++ b/odoo/addons/base/models/ir_property.py @@ -17,6 +17,7 @@ TYPE2FIELD = { 'date': 'value_datetime', 'datetime': 'value_datetime', 'selection': 'value_text', + 'html': 'value_text', } TYPE2CLEAN = { @@ -29,6 +30,7 @@ TYPE2CLEAN = { 'binary': lambda val: val or False, 'date': lambda val: val.date() if val else False, 'datetime': lambda val: val or False, + 'html': lambda val: val or False, } @@ -56,6 +58,7 @@ class Property(models.Model): ('date', 'Date'), ('datetime', 'DateTime'), ('selection', 'Selection'), + ('html', 'Html'), ], required=True, default='many2one', diff --git a/odoo/addons/test_new_api/models/test_new_api.py b/odoo/addons/test_new_api/models/test_new_api.py index c8a5d6fd3a1..d35be917e44 100644 --- a/odoo/addons/test_new_api/models/test_new_api.py +++ b/odoo/addons/test_new_api/models/test_new_api.py @@ -585,6 +585,8 @@ class CompanyDependent(models.Model): truth = fields.Boolean(company_dependent=True) count = fields.Integer(company_dependent=True) phi = fields.Float(company_dependent=True, digits=(2, 5)) + html1 = fields.Html(company_dependent=True, sanitize=False) + html2 = fields.Html(company_dependent=True, sanitize_attributes=True, strip_classes=True, strip_style=True) class CompanyDependentAttribute(models.Model): 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 6c957f2338d..7ca16861b7f 100644 --- a/odoo/addons/test_new_api/tests/test_new_fields.py +++ b/odoo/addons/test_new_api/tests/test_new_fields.py @@ -1664,6 +1664,85 @@ class TestFields(TransactionCaseWithUserDemo): 'not in': ([tag1.id, tag2.id], [tag2.id, False], [False], []), }) + def test_29_company_dependent_html(self): + company0 = self.env.ref('base.main_company') + company1 = self.env['res.company'].create({'name': 'A'}) + company2 = self.env['res.company'].create({'name': 'B'}) + + user0 = self.env['res.users'].create({ + 'name': 'Foo', 'login': 'foo', 'company_id': company0.id, + 'company_ids': [Command.set([company0.id, company1.id, company2.id])]}) + user1 = self.env['res.users'].create({ + 'name': 'Bar', 'login': 'bar', 'company_id': company1.id, + 'company_ids': [Command.set([company0.id, company1.id, company2.id])]}) + user2 = self.env['res.users'].create({ + 'name': 'Baz', 'login': 'baz', 'company_id': company2.id, + 'company_ids': [Command.set([company0.id, company1.id, company2.id])]}) + + some_ugly_html_0 = """

Oops this should maybe be sanitized +% if object.some_field and not object.oriented: + + % if object.other_field: + + ${object.mako_thing} + + + This is some html. + + % endif + +%if object.dummy_field: +

user0

+%endif""" + + some_ugly_html_1 = """

Oops this should maybe be sanitized +% if object.some_field and not object.oriented: +

+
+ % if object.other_field: + + ${object.mako_thing} + + + This is some html. + + % endif + +%if object.dummy_field: +

user1

+%endif""" + + record = self.env['test_new_api.company'].create({ + 'html1': some_ugly_html_0, + 'html2': some_ugly_html_0, + }) + + self.assertEqual(record.with_user(user0).html1, some_ugly_html_0, 'Error in HTML field: content was sanitized but field has sanitize=False') + self.assertEqual(record.with_user(user1).html1, False) + self.assertEqual(record.with_user(user2).html1, False) + + # sanitize should have closed tags left open in the original html for user0 + self.assertIn('
+
', record.with_user(user0).html2, 'Error in HTML field: content does not seem to have been sanitized despise sanitize=True') + self.assertIn('', record.with_user(user0).html2, 'Error in HTML field: content does not seem to have been sanitized despise sanitize=True') + self.assertNotIn('', record.with_user(user1).html2, 'Error in HTML field: content does not seem to have been sanitized despise sanitize=True') + self.assertIn('', record.with_user(user1).html2, 'Error in HTML field: content does not seem to have been sanitized despise sanitize=True') + self.assertNotIn('