diff --git a/openerp/addons/test_new_api/tests/test_new_fields.py b/openerp/addons/test_new_api/tests/test_new_fields.py index 8a7d9225f3b..e1ceca9ea51 100644 --- a/openerp/addons/test_new_api/tests/test_new_fields.py +++ b/openerp/addons/test_new_api/tests/test_new_fields.py @@ -5,7 +5,7 @@ from datetime import date, datetime from openerp.exceptions import AccessError from openerp.tests import common -from openerp.tools import mute_logger +from openerp.exceptions import except_orm class TestNewFields(common.TransactionCase): @@ -420,49 +420,7 @@ class TestNewFields(common.TransactionCase): self.assertEqual(message.name, "[%s] %s" % (discussion.name, '')) self.assertEqual(message.size, len(BODY)) - @mute_logger('openerp.addons.base.ir.ir_model') - def test_41_new_related(self): - """ test the behavior of related fields starting on new records. """ - # make discussions unreadable for demo user - access = self.env.ref('test_new_api.access_discussion') - access.write({'perm_read': False}) - - # create an environment for demo user - env = self.env(user=self.env.ref('base.user_demo')) - self.assertEqual(env.user.login, "demo") - - # create a new message as demo user - discussion = self.env.ref('test_new_api.discussion_0') - message = env['test_new_api.message'].new({'discussion': discussion}) - self.assertEqual(message.discussion, discussion) - - # read the related field discussion_name - self.assertEqual(message.discussion.env, env) - self.assertEqual(message.discussion_name, discussion.name) - with self.assertRaises(AccessError): - message.discussion.name - - @mute_logger('openerp.addons.base.ir.ir_model') - def test_42_new_related(self): - """ test the behavior of related fields traversing new records. """ - # make discussions unreadable for demo user - access = self.env.ref('test_new_api.access_discussion') - access.write({'perm_read': False}) - - # create an environment for demo user - env = self.env(user=self.env.ref('base.user_demo')) - self.assertEqual(env.user.login, "demo") - - # create a new discussion and a new message as demo user - discussion = env['test_new_api.discussion'].new({'name': 'Stuff'}) - message = env['test_new_api.message'].new({'discussion': discussion}) - self.assertEqual(message.discussion, discussion) - - # read the related field discussion_name - self.assertNotEqual(message.sudo().env, message.env) - self.assertEqual(message.discussion_name, discussion.name) - - def test_50_defaults(self): + def test_41_defaults(self): """ test default values. """ fields = ['discussion', 'body', 'author', 'size'] defaults = self.env['test_new_api.message'].default_get(fields) diff --git a/openerp/fields.py b/openerp/fields.py index e86e3582f59..19bf4184574 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -42,15 +42,6 @@ def _check_value(value): """ Return ``value``, or call its getter if ``value`` is a :class:`SpecialValue`. """ return value.get() if isinstance(value, SpecialValue) else value -def copy_cache(records, env): - """ Recursively copy the cache of ``records`` to the environment ``env``. """ - for record, target in zip(records, records.with_env(env)): - if not target._cache: - for name, value in record._cache.iteritems(): - target[name] = value - if isinstance(value, BaseModel): - copy_cache(value, env) - def resolve_mro(model, name, predicate): """ Return the list of successively overridden values of attribute ``name`` @@ -570,10 +561,8 @@ class Field(object): # when related_sudo, bypass access rights checks when reading values others = records.sudo() if self.related_sudo else records for record, other in zip(records, others): - if not record.id and record.env != other.env: - # draft records: copy record's cache to other's cache first - copy_cache(record, other.env) - other, field = self.traverse_related(other) + # do not switch to another environment if record is a draft one + other, field = self.traverse_related(other if record.id else record) record[self.name] = other[field.name] def _inverse_related(self, records):