summaryrefslogtreecommitdiff
path: root/odoo/addons/base/tests/test_expression.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_expression.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_expression.py')
-rw-r--r--odoo/addons/base/tests/test_expression.py67
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):