From 1ba76d21f38dc5a3edf8f3ad25955f5f8f264e89 Mon Sep 17 00:00:00 2001 From: Thanh Dodeur Date: Tue, 22 Jun 2021 15:25:47 +0000 Subject: [PATCH] [IMP] base: ensures that tests are not using demo data Before this commit, some tests were indirectly using demo data. For example `env['res.partner'].search([])` would return demo data in addition to the partners created for the tests. This commit changes that by ensuring that the records used are limited to the records made for the tests. Some values have been adjusted to account for the lower amount of available records. closes odoo/odoo#72553 Signed-off-by: Raphael Collet (rco) --- odoo/addons/base/tests/test_api.py | 63 ++++++++++++++++-------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/odoo/addons/base/tests/test_api.py b/odoo/addons/base/tests/test_api.py index ea8b614cdfd..ce9c47f90c2 100644 --- a/odoo/addons/base/tests/test_api.py +++ b/odoo/addons/base/tests/test_api.py @@ -30,7 +30,7 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_00_query(self): """ Build a recordset, and check its contents. """ - domain = [('name', 'ilike', 'j')] + domain = [('name', 'ilike', 'j'), ('id', 'in', self.partners.ids)] partners = self.env['res.partner'].search(domain) # partners is a collection of browse records @@ -44,8 +44,8 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_01_query_offset(self): """ Build a recordset with offset, and check equivalence. """ - partners1 = self.env['res.partner'].search([], offset=10) - partners2 = self.env['res.partner'].search([])[10:] + partners1 = self.env['res.partner'].search([('id', 'in', self.partners.ids)], offset=5) + partners2 = self.env['res.partner'].search([('id', 'in', self.partners.ids)])[5:] self.assertIsRecordset(partners1, 'res.partner') self.assertIsRecordset(partners2, 'res.partner') self.assertEqual(list(partners1), list(partners2)) @@ -53,8 +53,8 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_02_query_limit(self): """ Build a recordset with offset, and check equivalence. """ - partners1 = self.env['res.partner'].search([], order='id asc', limit=10) - partners2 = self.env['res.partner'].search([], order='id asc')[:10] + partners1 = self.env['res.partner'].search([('id', 'in', self.partners.ids)], order='id asc', limit=5) + partners2 = self.env['res.partner'].search([('id', 'in', self.partners.ids)], order='id asc')[:5] self.assertIsRecordset(partners1, 'res.partner') self.assertIsRecordset(partners2, 'res.partner') self.assertEqual(list(partners1), list(partners2)) @@ -62,8 +62,8 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_03_query_offset_limit(self): """ Build a recordset with offset and limit, and check equivalence. """ - partners1 = self.env['res.partner'].search([], order='id asc', offset=3, limit=7) - partners2 = self.env['res.partner'].search([], order='id asc')[3:10] + partners1 = self.env['res.partner'].search([('id', 'in', self.partners.ids)], order='id asc', offset=3, limit=7) + partners2 = self.env['res.partner'].search([('id', 'in', self.partners.ids)], order='id asc')[3:10] self.assertIsRecordset(partners1, 'res.partner') self.assertIsRecordset(partners2, 'res.partner') self.assertEqual(list(partners1), list(partners2)) @@ -81,7 +81,7 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_05_immutable(self): """ Check that a recordset remains the same, even after updates. """ - domain = [('name', 'ilike', 'g')] + domain = [('name', 'ilike', 'g'), ('id', 'in', self.partners.ids)] partners = self.env['res.partner'].search(domain) self.assertTrue(partners) ids = partners.ids @@ -102,24 +102,23 @@ class TestAPI(SavepointCaseWithUserDemo): self.assertIsRecord(user.partner_id, 'res.partner') self.assertIsRecordset(user.groups_id, 'res.groups') - partners = self.env['res.partner'].search([]) - for name, field in partners._fields.items(): + for name, field in self.partners._fields.items(): if field.type == 'many2one': - for p in partners: + for p in self.partners: self.assertIsRecord(p[name], field.comodel_name) elif field.type == 'reference': - for p in partners: + for p in self.partners: if p[name]: self.assertIsRecord(p[name], field.comodel_name) elif field.type in ('one2many', 'many2many'): - for p in partners: + for p in self.partners: self.assertIsRecordset(p[name], field.comodel_name) @mute_logger('odoo.models') def test_07_null(self): """ Check behavior of null instances. """ # select a partner without a parent - partner = self.env['res.partner'].search([('parent_id', '=', False)])[0] + partner = self.env['res.partner'].search([('parent_id', '=', False), ('id', 'in', self.partners.ids)])[0] # check partner and related null instances self.assertTrue(partner) @@ -141,7 +140,7 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_40_new_new(self): """ Call new-style methods in the new API style. """ - partners = self.env['res.partner'].search([('name', 'ilike', 'g')]) + partners = self.env['res.partner'].search([('name', 'ilike', 'g'), ('id', 'in', self.partners.ids)]) self.assertTrue(partners) # call method write on partners itself, and check its effect @@ -152,7 +151,7 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_45_new_new(self): """ Call new-style methods on records (new API style). """ - partners = self.env['res.partner'].search([('name', 'ilike', 'g')]) + partners = self.env['res.partner'].search([('name', 'ilike', 'g'), ('id', 'in', self.partners.ids)]) self.assertTrue(partners) # call method write on partner records, and check its effects @@ -166,7 +165,7 @@ class TestAPI(SavepointCaseWithUserDemo): def test_50_environment(self): """ Test environment on records. """ # partners and reachable records are attached to self.env - partners = self.env['res.partner'].search([('name', 'ilike', 'j')]) + partners = self.env['res.partner'].search([('name', 'ilike', 'j'), ('id', 'in', self.partners.ids)]) self.assertEqual(partners.env, self.env) for x in (partners, partners[0], partners[0].company_id): self.assertEqual(x.env, self.env) @@ -177,8 +176,12 @@ class TestAPI(SavepointCaseWithUserDemo): partners[0].company_id.name partners[0].company_id.write({'name': 'Fools'}) - # create an environment with the demo user - demo = self.env['res.users'].search([('login', 'ilike', 'demo')])[0] + # create an environment with a demo user + demo = self.env['res.users'].create({ + 'name': 'test_environment_demo', + 'login': 'test_environment_demo', + 'password': 'test_environment_demo', + }) demo_env = self.env(user=demo) self.assertNotEqual(demo_env, self.env) @@ -275,7 +278,7 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_60_prefetch(self): """ Check the record cache prefetching """ - partners = self.env['res.partner'].search([], limit=models.PREFETCH_MAX) + partners = self.env['res.partner'].search([('id', 'in', self.partners.ids)], limit=models.PREFETCH_MAX) self.assertTrue(len(partners) > 1) # all the records in partners are ready for prefetching @@ -310,7 +313,7 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_60_prefetch_model(self): """ Check the prefetching model. """ - partners = self.env['res.partner'].search([], limit=models.PREFETCH_MAX) + partners = self.env['res.partner'].search([('id', 'in', self.partners.ids)], limit=models.PREFETCH_MAX) self.assertTrue(partners) def same_prefetch(a, b): @@ -322,7 +325,7 @@ class TestAPI(SavepointCaseWithUserDemo): # the recordset operations below use different prefetch sets diff_prefetch(partners, partners.browse()) diff_prefetch(partners, partners[0]) - diff_prefetch(partners, partners[:10]) + diff_prefetch(partners, partners[:5]) # the recordset operations below share the prefetch set same_prefetch(partners, partners.browse(partners.ids)) @@ -383,7 +386,7 @@ class TestAPI(SavepointCaseWithUserDemo): def test_70_one(self): """ Check method one(). """ # check with many records - ps = self.env['res.partner'].search([('name', 'ilike', 'a')]) + ps = self.env['res.partner'].search([('name', 'ilike', 'a'), ('id', 'in', self.partners.ids)]) self.assertTrue(len(ps) > 1) with self.assertRaises(ValueError): ps.ensure_one() @@ -400,15 +403,15 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_80_contains(self): """ Test membership on recordset. """ - p1 = self.env['res.partner'].search([('name', 'ilike', 'a')], limit=1).ensure_one() - ps = self.env['res.partner'].search([('name', 'ilike', 'a')]) + p1 = self.env['res.partner'].search([('name', 'ilike', 'a'), ('id', 'in', self.partners.ids)], limit=1).ensure_one() + ps = self.env['res.partner'].search([('name', 'ilike', 'a'), ('id', 'in', self.partners.ids)]) self.assertTrue(p1 in ps) @mute_logger('odoo.models') def test_80_set_operations(self): """ Check set operations on recordsets. """ - pa = self.env['res.partner'].search([('name', 'ilike', 'a')]) - pb = self.env['res.partner'].search([('name', 'ilike', 'b')]) + pa = self.env['res.partner'].search([('name', 'ilike', 'a'), ('id', 'in', self.partners.ids)]) + pb = self.env['res.partner'].search([('name', 'ilike', 'b'), ('id', 'in', self.partners.ids)]) self.assertTrue(pa) self.assertTrue(pb) self.assertTrue(set(pa) & set(pb)) @@ -460,7 +463,7 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_80_filter(self): """ Check filter on recordsets. """ - ps = self.env['res.partner'].search([]) + ps = self.partners customers = ps.browse([p.id for p in ps if p.employee]) # filter on a single field @@ -476,7 +479,7 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_80_map(self): """ Check map on recordsets. """ - ps = self.env['res.partner'].search([]) + ps = self.partners parents = ps.browse() for p in ps: parents |= p.parent_id @@ -506,7 +509,7 @@ class TestAPI(SavepointCaseWithUserDemo): @mute_logger('odoo.models') def test_80_sorted(self): """ Check sorted on recordsets. """ - ps = self.env['res.partner'].search([]) + ps = self.env['res.partner'].search([('id', 'in', self.partners.ids)]) # sort by model order qs = ps[:len(ps) // 2] + ps[len(ps) // 2:]