summaryrefslogtreecommitdiff
path: root/odoo/addons/base/tests/test_api.py
diff options
context:
space:
mode:
authorOdoo's Mergebot <xmo+roboto@odoo.com>2019-11-07 08:37:12 +0100
committerGitHub <noreply@github.com>2019-11-07 08:37:12 +0100
commitcfc65bd1b72b6fb7833f67fa580fa9fdac28b1f5 (patch)
treec1aa353aa7e29d0ed918911dbdce456ed957b72e /odoo/addons/base/tests/test_api.py
parenta3f5afdd53f5f0d8d76427fe14dce6f02e064a75 (diff)
parentbc8fe668495a1d080ff883d5e61e961a128669de (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.py33
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)