summaryrefslogtreecommitdiff
path: root/odoo/addons/test_new_api/tests
diff options
context:
space:
mode:
Diffstat (limited to 'odoo/addons/test_new_api/tests')
-rw-r--r--odoo/addons/test_new_api/tests/test_new_fields.py2
-rw-r--r--odoo/addons/test_new_api/tests/test_onchange.py38
2 files changed, 38 insertions, 2 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 9986cd674c3..4c9aaf00f5e 100644
--- a/odoo/addons/test_new_api/tests/test_new_fields.py
+++ b/odoo/addons/test_new_api/tests/test_new_fields.py
@@ -1345,7 +1345,7 @@ class TestFields(TransactionCaseWithUserDemo):
new_origin = Model.new({'name': 'Bar'}, origin=real_record)
new_record = Model.new({'name': 'Baz'})
self.assertEqual(real_record.display_name, 'Foo')
- self.assertEqual(new_origin.display_name, 'Foo')
+ self.assertEqual(new_origin.display_name, 'Bar')
self.assertEqual(new_record.display_name, 'Baz')
# computed stored field with recomputation: always computed
diff --git a/odoo/addons/test_new_api/tests/test_onchange.py b/odoo/addons/test_new_api/tests/test_onchange.py
index 38c7b8be531..1b424777bc0 100644
--- a/odoo/addons/test_new_api/tests/test_onchange.py
+++ b/odoo/addons/test_new_api/tests/test_onchange.py
@@ -4,7 +4,7 @@
from unittest.mock import patch
from odoo.addons.base.tests.common import SavepointCaseWithUserDemo
-from odoo.tests import common
+from odoo.tests import common, Form
def strip_prefix(prefix, names):
size = len(prefix)
@@ -751,3 +751,39 @@ class TestComputeOnchange(common.TransactionCase):
with form.child_ids.edit(2) as line:
line.cost = 30
self.assertEqual(form.cost, 61)
+
+ def test_onchange_editable_compute_one2many(self):
+ # create a record with a computed editable field ('edit') on lines
+ record = self.env['test_new_api.compute_editable'].create({'line_ids': [(0, 0, {'value': 7})]})
+ record.flush()
+ line = record.line_ids
+ self.assertRecordValues(line, [{'value': 7, 'edit': 7, 'count': 0}])
+
+ # retrieve the onchange spec for calling 'onchange'
+ spec = Form(record)._view['onchange']
+
+ # The onchange on 'line_ids' should increment 'count' and keep the value
+ # of 'edit' (this field should not be recomputed), whatever the order of
+ # the fields in the dictionary. This ensures that the value set by the
+ # user on a computed editable field on a line is not lost.
+ line_ids = [
+ (1, line.id, {'value': 8, 'edit': 9, 'count': 0}),
+ (0, 0, {'value': 8, 'edit': 9, 'count': 0}),
+ ]
+ result = record.onchange({'line_ids': line_ids}, 'line_ids', spec)
+ expected = {'value': {
+ 'line_ids': [
+ (5,),
+ (1, line.id, {'value': 8, 'edit': 9, 'count': 8}),
+ (0, 0, {'value': 8, 'edit': 9, 'count': 8}),
+ ],
+ }}
+ self.assertEqual(result, expected)
+
+ # change dict order in lines, and try again
+ line_ids = [
+ (op, id_, dict(reversed(list(vals.items()))))
+ for op, id_, vals in line_ids
+ ]
+ result = record.onchange({'line_ids': line_ids}, 'line_ids', spec)
+ self.assertEqual(result, expected)