From 46d12675a7273d2a4e513644016e9a06e9d7ae64 Mon Sep 17 00:00:00 2001 From: Adrian Torres Date: Wed, 10 Jul 2019 08:51:39 +0000 Subject: [PATCH] [FIX] tests: allow False as value for required booleans in SSF A required boolean accepts two values, True and False, however the SSF and the web-client assume False to be equal to NULL and treat them interchangeably. In the SSF, we verify that a required field is filled by checking that its value is different from False, however False is a valid value for a boolean, this means that setting a required boolean to False would never work in the SSF. This commit overcomes this issue by simply skipping the check for fields of type boolean. closes odoo/odoo#34729 Signed-off-by: Xavier Morel (xmo) --- odoo/addons/test_testing_utilities/ir.model.access.csv | 1 + odoo/addons/test_testing_utilities/models.py | 5 +++++ .../test_testing_utilities/tests/test_form_impl.py | 10 ++++++++++ odoo/tests/common.py | 2 +- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/odoo/addons/test_testing_utilities/ir.model.access.csv b/odoo/addons/test_testing_utilities/ir.model.access.csv index c43b736c531..1cb9a9f542a 100644 --- a/odoo/addons/test_testing_utilities/ir.model.access.csv +++ b/odoo/addons/test_testing_utilities/ir.model.access.csv @@ -19,3 +19,4 @@ access_model_test_testing_utilities_onchange_count,access_model_test_testing_uti access_test_testing_utilities_onchange_count_sub,access_test_testing_utilities_onchange_count_sub,model_test_testing_utilities_onchange_count_sub,,1,1,1,1 access_o2m_readonly_subfield_parent,access_o2m_readonly_subfield_parent,model_o2m_readonly_subfield_parent,,1,1,1,1 access_o2m_readonly_subfield_child,access_o2m_readonly_subfield_child,model_o2m_readonly_subfield_child,,1,1,1,1 +access_test_testing_utilities_req_bool,access_test_testing_utilities_req_bool,model_test_testing_utilities_req_bool,,1,0,0,0 diff --git a/odoo/addons/test_testing_utilities/models.py b/odoo/addons/test_testing_utilities/models.py index 0c04bc06e8d..0b87c3e66b1 100644 --- a/odoo/addons/test_testing_utilities/models.py +++ b/odoo/addons/test_testing_utilities/models.py @@ -261,3 +261,8 @@ class O2MReadonlySubfieldChild(models.Model): def _inverse_f(self): raise AssertionError("Inverse of f should not be called") + +class ReqBool(models.Model): + _name = _description = 'test_testing_utilities.req_bool' + + f_bool = fields.Boolean(required=True) diff --git a/odoo/addons/test_testing_utilities/tests/test_form_impl.py b/odoo/addons/test_testing_utilities/tests/test_form_impl.py index 0191a4da7ad..c0e5093fd3b 100644 --- a/odoo/addons/test_testing_utilities/tests/test_form_impl.py +++ b/odoo/addons/test_testing_utilities/tests/test_form_impl.py @@ -53,6 +53,16 @@ class TestBasic(TransactionCase): ('1', 0, 0, 0) ) + def test_required_bool(self): + f = Form(self.env['test_testing_utilities.req_bool']) + f.f_bool = False + r = f.save() + self.assertEqual(r.f_bool, 0) + + f2 = Form(self.env['test_testing_utilities.req_bool']) + r2 = f2.save() + self.assertEqual(r2.f_bool, 0) + def test_readonly(self): """ Checks that fields with readonly modifiers (marked as readonly or diff --git a/odoo/tests/common.py b/odoo/tests/common.py index 06906d45086..6fcd68c427c 100644 --- a/odoo/tests/common.py +++ b/odoo/tests/common.py @@ -1385,7 +1385,7 @@ class Form(object): fields = self._view['fields'] for f in fields: v = self._values[f] - if self._get_modifier(f, 'required'): + if self._get_modifier(f, 'required') and not fields[f]['type'] == 'boolean': assert v is not False, "{} is a required field".format(f) # skip unmodified fields