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_expression.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_expression.py')
| -rw-r--r-- | odoo/addons/base/tests/test_expression.py | 67 |
1 files changed, 47 insertions, 20 deletions
diff --git a/odoo/addons/base/tests/test_expression.py b/odoo/addons/base/tests/test_expression.py index 7b5dfacadba..61d470e094c 100644 --- a/odoo/addons/base/tests/test_expression.py +++ b/odoo/addons/base/tests/test_expression.py @@ -3,13 +3,21 @@ import psycopg2 +from odoo.addons.base.tests.common import SavepointCaseWithUserDemo +from odoo.fields import Date from odoo.models import BaseModel from odoo.tests.common import TransactionCase from odoo.tools import mute_logger from odoo.osv import expression -class TestExpression(TransactionCase): +class TestExpression(SavepointCaseWithUserDemo): + + @classmethod + def setUpClass(cls): + super(TestExpression, cls).setUpClass() + cls._load_partners_set() + def _search(self, obj, domain, init_domain=[]): sql = obj.search(domain) allobj = obj.search(init_domain) @@ -111,7 +119,7 @@ class TestExpression(TransactionCase): Category = self.env['res.partner.category'] # search through m2m relation - partners = self._search(Partner, [('category_id', 'child_of', self.ref('base.res_partner_category_0'))]) + partners = self._search(Partner, [('category_id', 'child_of', self.partner_category.id)]) self.assertTrue(partners) # setup test partner categories @@ -217,8 +225,8 @@ class TestExpression(TransactionCase): Partner = self.env['res.partner'] all_partners = self._search(Partner, []) self.assertTrue(len(all_partners) > 1) - one = all_partners[0] - others = all_partners[1:] + one = self.env.ref('base.main_partner') + others = all_partners - one res_1 = self._search(Partner, [('id', '=', one.id)]) self.assertEqual(one, res_1) @@ -242,15 +250,15 @@ class TestExpression(TransactionCase): Partner = self.env['res.partner'] # testing equality with name - partners = self._search(Partner, [('parent_id', '=', 'Deco Addict')]) + partners = self._search(Partner, [('parent_id', '=', 'Pepper Street')]) self.assertTrue(partners) # testing the in operator with name - partners = self._search(Partner, [('parent_id', 'in', 'Deco Addict')]) + partners = self._search(Partner, [('parent_id', 'in', 'Pepper Street')]) self.assertTrue(partners) # testing the in operator with a list of names - partners = self._search(Partner, [('parent_id', 'in', ['Deco Addict', 'Wood Corner'])]) + partners = self._search(Partner, [('parent_id', 'in', ['Pepper Street', 'Inner Works'])]) self.assertTrue(partners) # check if many2one works with empty search list @@ -480,6 +488,22 @@ class TestExpression(TransactionCase): Currency = self.env['res.currency'] CurrencyRate = self.env['res.currency.rate'] + CurrencyRate.create([ + { + 'currency_id': self.env.ref('base.EUR').id, + 'name': '2000-01-01', + 'rate': 1.0, + }, { + 'currency_id': self.env.ref('base.USD').id, + 'name': '2000-01-01', + 'rate': 1.2834, + }, { + 'currency_id': self.env.ref('base.USD').id, + 'name': '2000-01-02', + 'rate': 1.5289, + } + ]) + # create a currency and a currency rate currency = Currency.create({'name': 'ZZZ', 'symbol': 'ZZZ', 'rounding': 1.0}) currency_rate = CurrencyRate.create({'name': '2010-01-01', 'currency_id': currency.id, 'rate': 1.0}) @@ -583,8 +607,8 @@ class TestExpression(TransactionCase): def test_like_wildcards(self): # check that =like/=ilike expressions are working on an untranslated field Partner = self.env['res.partner'] - partners = self._search(Partner, [('name', '=like', 'W_od_C_rn_r')]) - self.assertTrue(len(partners) == 1, "Must match one partner (Wood Corner)") + partners = self._search(Partner, [('name', '=like', 'I_ner_W_rk_')]) + self.assertTrue(all(partner.name == 'Inner Works' for partner in partners), "Must match only 'Inner Works'") partners = self._search(Partner, [('name', '=ilike', 'G%')]) self.assertTrue(len(partners) >= 1, "Must match one partner (Gemini Furniture)") @@ -608,12 +632,6 @@ class TestExpression(TransactionCase): countries = self._search(Country, domain) self.assertEqual(countries, belgium) - def test_long_table_alias(self): - # To test the 64 characters limit for table aliases in PostgreSQL - self.patch_order('res.users', 'partner_id') - self.patch_order('res.partner', 'commercial_partner_id,company_id,name') - self.env['res.users'].search([('name', '=', 'test')]) - @mute_logger('odoo.sql_db') def test_invalid(self): """ verify that invalid expressions are refused, even for magic fields """ @@ -640,12 +658,12 @@ class TestExpression(TransactionCase): vals = { 'name': 'OpenERP Test', 'active': False, - 'category_id': [(6, 0, [self.ref("base.res_partner_category_0")])], + 'category_id': [(6, 0, [self.partner_category.id])], 'child_ids': [(0, 0, {'name': 'address of OpenERP Test', 'country_id': self.ref("base.be")})], } Partner.create(vals) - partner = self._search(Partner, [('category_id', 'ilike', 'vendor'), ('active', '=', False)], [('active', '=', False)]) - self.assertTrue(partner, "Record not Found with category vendor and active False.") + partner = self._search(Partner, [('category_id', 'ilike', 'sellers'), ('active', '=', False)], [('active', '=', False)]) + self.assertTrue(partner, "Record not Found with category sellers and active False.") # testing for one2many field with country Belgium and active=False partner = self._search(Partner, [('child_ids.country_id','=','Belgium'),('active','=',False)], [('active', '=', False)]) @@ -655,7 +673,7 @@ class TestExpression(TransactionCase): """ Check that we can exclude translated fields (bug lp:1071710) """ # first install french language self.env['ir.translation']._load_module_terms(['base'], ['fr_FR']) - self.env.ref('base.res_partner_2').country_id = self.env.ref('base.be') + self.env['res.partner'].search([('name', '=', 'Pepper Street')]).country_id = self.env.ref('base.be') # actual test Country = self.env['res.country'].with_context(lang='fr_FR') be = self.env.ref('base.be') @@ -664,7 +682,7 @@ class TestExpression(TransactionCase): # indirect search via m2o Partner = self.env['res.partner'] - deco_addict = self._search(Partner, [('name', '=', 'Deco Addict')]) + deco_addict = self._search(Partner, [('name', '=', 'Pepper Street')]) not_be = self._search(Partner, [('country_id', '!=', 'Belgium')]) self.assertNotIn(deco_addict, not_be) @@ -715,6 +733,15 @@ class TestExpression(TransactionCase): self.assertEqual(expr, false) +class TestExpression2(TransactionCase): + + def test_long_table_alias(self): + # To test the 64 characters limit for table aliases in PostgreSQL + self.patch_order('res.users', 'partner_id') + self.patch_order('res.partner', 'commercial_partner_id,company_id,name') + self.env['res.users'].search([('name', '=', 'test')]) + + class TestAutoJoin(TransactionCase): def setUp(self): |
