summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Ledoux <dle@odoo.com>2020-11-12 12:35:39 +0000
committerRaphael Collet <rco@odoo.com>2020-11-19 11:11:41 +0000
commit1fe9a5c886fcef34a5113fd77d74550c99a8a305 (patch)
tree1579d947996fdbd3995f1ffaacedd8641d48c884
parentb325266bc9d3893e037b3fd8d734ac7d3d510c41 (diff)
[FIX] registry: unit test for #60899
The field `display_name` is a magic field automatically added to all models. On a custom model, it depends on `x_name`. As it is automatically added by the ORM, `display_name` is considered a `base` field, while `x_name` is considered a `manual` field. On loading the transitive dependencies of `display_name` of a custom model, for which the loading of the `x_name` has been skipped because it depends on field not yet loaded, the exception was not ignored because exceptions are ignored only for `manual` field, and `display_name` is considered a `base` field. Upgrade request 56274 X-original-commit: e57e2798ed7871967487d953ffcdc10884bcf9a2 Co-authored-by: Raphael Collet <rco@odoo.com>
-rw-r--r--odoo/addons/test_new_api/tests/test_new_fields.py26
1 files changed, 26 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 fe68fdac776..9986cd674c3 100644
--- a/odoo/addons/test_new_api/tests/test_new_fields.py
+++ b/odoo/addons/test_new_api/tests/test_new_fields.py
@@ -230,6 +230,32 @@ class TestFields(TransactionCaseWithUserDemo):
sum(invalid_transitive_depends in field_triggers.get(None, []) for field_triggers in triggers.values()), 1
)
+ @mute_logger('odoo.fields')
+ def test_10_computed_stored_x_name(self):
+ # create a custom model with two fields
+ self.env["ir.model"].create({
+ "name": "x_test_10_compute_store_x_name",
+ "model": "x_test_10_compute_store_x_name",
+ "field_id": [
+ (0, 0, {'name': 'x_name', 'ttype': 'char'}),
+ (0, 0, {'name': 'x_stuff_id', 'ttype': 'many2one', 'relation': 'ir.model'}),
+ ],
+ })
+ # set 'x_stuff_id' refer to a model not loaded yet
+ self.cr.execute("""
+ UPDATE ir_model_fields
+ SET relation = 'not.loaded'
+ WHERE model = 'x_test_10_compute_store_x_name' AND name = 'x_stuff_id'
+ """)
+ # set 'x_name' be computed and depend on 'x_stuff_id'
+ self.cr.execute("""
+ UPDATE ir_model_fields
+ SET compute = 'pass', depends = 'x_stuff_id.x_custom_1'
+ WHERE model = 'x_test_10_compute_store_x_name' AND name = 'x_name'
+ """)
+ # setting up models should not crash
+ self.registry.setup_models(self.cr)
+
def test_10_display_name(self):
""" test definition of automatic field 'display_name' """
field = type(self.env['test_new_api.discussion']).display_name