diff options
Diffstat (limited to 'odoo/addons/test_new_api/tests/test_new_fields.py')
| -rw-r--r-- | odoo/addons/test_new_api/tests/test_new_fields.py | 36 |
1 files changed, 36 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 c3a7005cab0..5591ce7e4c5 100644 --- a/odoo/addons/test_new_api/tests/test_new_fields.py +++ b/odoo/addons/test_new_api/tests/test_new_fields.py @@ -2947,3 +2947,39 @@ class TestComputeQueries(common.TransactionCase): record = model.create({'foo': 'Foo', 'bar': 'Bar'}) self.assertEqual(record.foo, 'Bar') self.assertEqual(record.bar, 'Bar') + +class test_shared_cache(TransactionCaseWithUserDemo): + def test_shared_cache_computed_field(self): + # Test case: Check that the shared cache is not used if a compute_sudo stored field + # is computed IF there is an ir.rule defined on this specific model. + + # Real life example: + # A user can only see its own timesheets on a task, but the field "Planned Hours", + # which is stored-compute_sudo, should take all the timesheet lines into account + # However, when adding a new line and then recomputing the value, no existing line + # from another user is binded on self, then the value is erased and saved on the + # database. + + task = self.env['test_new_api.model_shared_cache_compute_parent'].create({ + 'name': 'Shared Task'}) + self.env['test_new_api.model_shared_cache_compute_line'].create({ + 'user_id': self.env.ref('base.user_admin').id, + 'parent_id': task.id, + 'amount': 1, + }) + self.assertEqual(task.total_amount, 1) + + self.env['base'].flush() + task.invalidate_cache() # Start fresh, as it would be the case on 2 different sessions. + + task = task.with_user(self.user_demo) + with common.Form(task) as task_form: + # Use demo has no access to the already existing line + self.assertEqual(len(task_form.line_ids), 0) + # But see the real total_amount + self.assertEqual(task_form.total_amount, 1) + # Now let's add a new line (and retrigger the compute method) + with task_form.line_ids.new() as line: + line.amount = 2 + # The new value for total_amount, should be 3, not 2. + self.assertEqual(task_form.total_amount, 2) |
