diff --git a/odoo/addons/test_testing_utilities/tests/__init__.py b/odoo/addons/test_testing_utilities/tests/__init__.py index 78398a30bce98f970a5d0f34b55565773be3299f..2ae17dd13856afe005400a2ee56152ac50e7235d 100644 --- a/odoo/addons/test_testing_utilities/tests/__init__.py +++ b/odoo/addons/test_testing_utilities/tests/__init__.py @@ -3,3 +3,4 @@ from . import test_methods from . import test_lxml from . import test_form_impl from . import test_xml_tools +from . import test_env diff --git a/odoo/addons/test_testing_utilities/tests/test_env.py b/odoo/addons/test_testing_utilities/tests/test_env.py new file mode 100644 index 0000000000000000000000000000000000000000..77b6353f9310f5d3823d15eb81e4b3cf2cd6dc9d --- /dev/null +++ b/odoo/addons/test_testing_utilities/tests/test_env.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests.common import SavepointCase + + +class TestEnv(SavepointCase): + + @classmethod + def setUpClass(cls): + super(TestEnv, cls).setUpClass() + user = cls.env['res.users'].create({ + 'name': 'superuser', + 'login': 'superuser', + 'password': 'superuser', + 'groups_id': [(6, 0, cls.env.user.groups_id.ids)], + }) + cls.env = cls.env(user=user) + + # make sure there is at least another environment in the current transaction + cls.sudo_env = cls.env(su=True) + + def test_env_company_part_01(self): + """ + The main goal of the test is actually to check the values of the + environment after this test execution (see test_env_company_part_02) + """ + company = self.env['res.company'].create({ + "name": "Test Company", + }) + self.env.user.write({ + 'company_id': company.id, + 'company_ids': [(4, company.id), (4, self.env.company.id)], + }) + self.assertEqual(self.env.company, self.env.user.company_id) + self.assertTrue(self.env.company.exists()) + self.assertEqual(self.sudo_env.company, self.env.user.company_id) + self.assertTrue(self.sudo_env.company.exists()) + + def test_env_company_part_02(self): + self.assertEqual(self.env.company, self.env.user.company_id) + self.assertTrue(self.env.company.exists()) + self.assertEqual(self.sudo_env.company, self.env.user.company_id) + self.assertTrue(self.sudo_env.company.exists()) diff --git a/odoo/api.py b/odoo/api.py index 606a06e71374d4d5113836084433fc59058c9974..c95d3daa3e0cab4dfa46bbbc3a5e569c38612255 100644 --- a/odoo/api.py +++ b/odoo/api.py @@ -616,6 +616,7 @@ class Environment(Mapping): """ Clear all record caches, and discard all fields to recompute. This may be useful when recovering from a failed ORM operation. """ + lazy_property.reset_all(self) self.cache.invalidate() self.all.tocompute.clear() self.all.towrite.clear() diff --git a/odoo/tests/common.py b/odoo/tests/common.py index 0778c059305da6e9c1f2c149fdf33427db51460e..b39a15617188da2b6037de0a0950ac31bf6f0f03 100644 --- a/odoo/tests/common.py +++ b/odoo/tests/common.py @@ -655,11 +655,13 @@ class SavepointCase(SingleTransactionCase): # restore environments after the test to avoid invoking flush() with an # invalid environment (inexistent user id) from another test envs = self.env.all.envs + for env in list(envs): + self.addCleanup(env.clear) + # restore the set of known environments as it was at setUp self.addCleanup(envs.update, list(envs)) self.addCleanup(envs.clear) self.addCleanup(self.registry.clear_caches) - self.addCleanup(self.env.clear) self._savepoint_id = next(savepoint_seq) self.cr.execute('SAVEPOINT test_%d' % self._savepoint_id)