summaryrefslogtreecommitdiff
path: root/odoo/addons/test_new_api
diff options
context:
space:
mode:
authorGuewen Baconnier <guewen.baconnier@camptocamp.com>2021-01-04 08:20:38 +0000
committerRaphael Collet <rco@odoo.com>2021-01-05 16:52:28 +0000
commit9fe4fe404b73e9ab18ab6b3b913f075c64bb6954 (patch)
tree664fab0832f9fd2666efdf6b25794b3cca85be35 /odoo/addons/test_new_api
parenta23a47457d98aba4ec643f4422f3735d98fab2b4 (diff)
[FIX] core: marking of stored computed recursive fields during creation
Fixes 3a6ac95 that ignores computation of recursive stored fields during creation of records. The problem happens when we have: * a recursive stored computed field * an `api.depends` of this field which is a relation to another record When this "another record" is created and should recompute the recursive field, it is ignored. closes odoo/odoo#64031 X-original-commit: 79634eefb225a7aaa6c3c26af126fb69078c22ac Signed-off-by: Raphael Collet (rco) <rco@openerp.com> Co-authored-by: Raphael Collet (rco) <rco@openerp.com>
Diffstat (limited to 'odoo/addons/test_new_api')
-rw-r--r--odoo/addons/test_new_api/models/test_new_api.py16
-rw-r--r--odoo/addons/test_new_api/security/ir.model.access.csv1
-rw-r--r--odoo/addons/test_new_api/tests/test_new_fields.py8
3 files changed, 25 insertions, 0 deletions
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 0f40589636c..1f36dfe7bad 100644
--- a/odoo/addons/test_new_api/models/test_new_api.py
+++ b/odoo/addons/test_new_api/models/test_new_api.py
@@ -513,6 +513,22 @@ class ComputeRecursive(models.Model):
rec.display_name = rec.name
+class ComputeRecursiveTree(models.Model):
+ _name = 'test_new_api.recursive.tree'
+ _description = 'Test New API Recursive with one2many field'
+
+ name = fields.Char(required=True)
+ parent_id = fields.Many2one('test_new_api.recursive.tree', ondelete='cascade')
+ children_ids = fields.One2many('test_new_api.recursive.tree', 'parent_id')
+ display_name = fields.Char(compute='_compute_display_name', store=True)
+
+ @api.depends('name', 'children_ids.display_name')
+ def _compute_display_name(self):
+ for rec in self:
+ children_names = rec.mapped('children_ids.display_name')
+ rec.display_name = '%s(%s)' % (rec.name, ', '.join(children_names))
+
+
class ComputeCascade(models.Model):
_name = 'test_new_api.cascade'
_description = 'Test New API Cascade'
diff --git a/odoo/addons/test_new_api/security/ir.model.access.csv b/odoo/addons/test_new_api/security/ir.model.access.csv
index 37f20cf852e..09ac7f1fc83 100644
--- a/odoo/addons/test_new_api/security/ir.model.access.csv
+++ b/odoo/addons/test_new_api/security/ir.model.access.csv
@@ -22,6 +22,7 @@ access_test_new_api_compute_inverse,access_test_new_api_compute_inverse,model_te
access_test_new_api_compute_readonly,access_test_new_api_compute_readonly,model_test_new_api_compute_readonly,,1,1,1,1
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_recursive_tree,access_test_new_api_recursive_tree,model_test_new_api_recursive_tree,,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_compute_readwrite,access_test_new_api_compute_readwrite,model_test_new_api_compute_readwrite,,1,1,1,1
access_test_new_api_compute_onchange,access_test_new_api_compute_onchange,model_test_new_api_compute_onchange,,1,1,1,1
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 3a95a6c10f2..2191bee7096 100644
--- a/odoo/addons/test_new_api/tests/test_new_fields.py
+++ b/odoo/addons/test_new_api/tests/test_new_fields.py
@@ -492,6 +492,14 @@ class TestFields(TransactionCaseWithUserDemo):
b.unlink()
self.assertEqual((a + b + c + d).exists(), a)
+ def test_12_recursive_tree(self):
+ foo = self.env['test_new_api.recursive.tree'].create({'name': 'foo'})
+ self.assertEqual(foo.display_name, 'foo()')
+ bar = foo.create({'name': 'bar', 'parent_id': foo.id})
+ self.assertEqual(foo.display_name, 'foo(bar())')
+ baz = foo.create({'name': 'baz', 'parent_id': bar.id})
+ self.assertEqual(foo.display_name, 'foo(bar(baz()))')
+
def test_12_cascade(self):
""" test computed field depending on computed field """
message = self.env.ref('test_new_api.message_0_0')