diff options
| author | Odoo's Mergebot <xmo+roboto@odoo.com> | 2019-11-07 08:37:12 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-07 08:37:12 +0100 |
| commit | cfc65bd1b72b6fb7833f67fa580fa9fdac28b1f5 (patch) | |
| tree | c1aa353aa7e29d0ed918911dbdce456ed957b72e /odoo/addons/base/tests/test_api.py | |
| parent | a3f5afdd53f5f0d8d76427fe14dce6f02e064a75 (diff) | |
| parent | bc8fe668495a1d080ff883d5e61e961a128669de (diff) | |
[MERGE] various: Make the test suite demo data independant
Purpose
=======
This is the first huge step to improve the test suite in several ways:
- Make them demo data independent, allowing to modify the demo data without having to adapt the tests depending on it. It also allows to have a beautiful + convenient demo dataset to make a demonstration, and to configure complex data in the tests to manage the corner cases.
- Improve the test performances by converting them into SavepointCase. Each test will be rollbacked to it's initial state, after the setUpClass call. That way the different data are not re-created at each test for nothing.
- Introduce several test classes in base/tests/common.py to launch a TransactionCase, HttpCase or SavepointCase test with an available demo user, portal user or a large set of partners.
- This is the first step to tend to a rolling release process, allowing to execute the tests (or a subset of the tests) on a migrated base, for example.
closes odoo/odoo#39868
Taskid: 2075739
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
Diffstat (limited to 'odoo/addons/base/tests/test_api.py')
| -rw-r--r-- | odoo/addons/base/tests/test_api.py | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/odoo/addons/base/tests/test_api.py b/odoo/addons/base/tests/test_api.py index 158fe2ee500..149e7b3a261 100644 --- a/odoo/addons/base/tests/test_api.py +++ b/odoo/addons/base/tests/test_api.py @@ -2,14 +2,19 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import models +from odoo.addons.base.tests.common import SavepointCaseWithUserDemo from odoo.tools import mute_logger -from odoo.tests import common from odoo.exceptions import AccessError -class TestAPI(common.TransactionCase): +class TestAPI(SavepointCaseWithUserDemo): """ test the new API of the ORM """ + @classmethod + def setUpClass(cls): + super(TestAPI, cls).setUpClass() + cls._load_partners_set() + def assertIsRecordset(self, value, model): self.assertIsInstance(value, models.BaseModel) self.assertEqual(value._name, model) @@ -48,8 +53,8 @@ class TestAPI(common.TransactionCase): @mute_logger('odoo.models') def test_02_query_limit(self): """ Build a recordset with offset, and check equivalence. """ - partners1 = self.env['res.partner'].search([], limit=10) - partners2 = self.env['res.partner'].search([])[:10] + partners1 = self.env['res.partner'].search([], order='id asc', limit=10) + partners2 = self.env['res.partner'].search([], order='id asc')[:10] self.assertIsRecordset(partners1, 'res.partner') self.assertIsRecordset(partners2, 'res.partner') self.assertEqual(list(partners1), list(partners2)) @@ -57,8 +62,8 @@ class TestAPI(common.TransactionCase): @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([], offset=3, limit=7) - partners2 = self.env['res.partner'].search([])[3:10] + partners1 = self.env['res.partner'].search([], order='id asc', offset=3, limit=7) + partners2 = self.env['res.partner'].search([], order='id asc')[3:10] self.assertIsRecordset(partners1, 'res.partner') self.assertIsRecordset(partners2, 'res.partner') self.assertEqual(list(partners1), list(partners2)) @@ -173,7 +178,7 @@ class TestAPI(common.TransactionCase): partners[0].company_id.write({'name': 'Fools'}) # create an environment with the demo user - demo = self.env['res.users'].search([('login', '=', 'demo')])[0] + demo = self.env['res.users'].search([('login', 'ilike', 'demo')])[0] demo_env = self.env(user=demo) self.assertNotEqual(demo_env, self.env) @@ -193,16 +198,18 @@ class TestAPI(common.TransactionCase): self.assertEqual(p.env, demo_env) # demo user can read but not modify company data - demo_partners[0].company_id.name + demo_partner = self.env['res.partner'].search([('name', '=', 'Landon Roberts')]).with_user(demo) + self.assertTrue(demo_partner.company_id, 'This partner is supposed to be linked to a company') + demo_partner.company_id.name with self.assertRaises(AccessError): - demo_partners[0].company_id.write({'name': 'Pricks'}) + demo_partner.company_id.write({'name': 'Pricks'}) # remove demo user from all groups demo.write({'groups_id': [(5,)]}) # demo user can no longer access partner data with self.assertRaises(AccessError): - demo_partners[0].company_id.name + demo_partner.company_id.name @mute_logger('odoo.models') def test_60_cache(self): @@ -319,7 +326,7 @@ class TestAPI(common.TransactionCase): # the recordset operations below share the prefetch set same_prefetch(partners, partners.browse(partners.ids)) - same_prefetch(partners, partners.with_user(self.env.ref('base.user_demo'))) + same_prefetch(partners, partners.with_user(self.user_demo)) same_prefetch(partners, partners.with_context(active_test=False)) same_prefetch(partners, partners[:10].with_prefetch(partners._prefetch_ids)) @@ -338,7 +345,7 @@ class TestAPI(common.TransactionCase): 'name': 'Non-empty relational fields', 'country_id': self.ref('base.be'), 'bank_ids': [(0, 0, {'acc_number': 'FOO42'})], - 'category_id': [(4, self.ref('base.res_partner_category_0'))], + 'category_id': [(4, self.partner_category.id)], } partners = partners.create(vals0) + partners.create(vals1) for partner in partners: @@ -511,5 +518,5 @@ class TestAPI(common.TransactionCase): self.assertEqual(ps.sorted('name').ids, by_name_ids) # sort by inverse name, with a field name - by_name_ids.reverse() + by_name_ids = [p.id for p in sorted(ps, key=lambda p: p.name, reverse=True)] self.assertEqual(ps.sorted('name', reverse=True).ids, by_name_ids) |
