~openerp-dev/openobject-server/trunk-partner_reference_terms-ypa

« back to all changes in this revision

Viewing changes to openerp/addons/base/tests/test_expression.py

  • Committer: Richard Mathot (OpenERP)
  • Date: 2014-04-14 09:11:37 UTC
  • mfrom: (5120.1.60 origin/trunk)
  • Revision ID: rim@openerp.com-20140414091137-icatnn1humn7kisc
[MERGE] Sync with trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
import unittest2
2
2
 
3
3
import openerp
 
4
from openerp.osv.expression import get_unaccent_wrapper
4
5
from openerp.osv.orm import BaseModel
5
6
import openerp.tests.common as common
6
7
 
124
125
 
125
126
    def test_20_auto_join(self):
126
127
        registry, cr, uid = self.registry, self.cr, self.uid
 
128
        unaccent = get_unaccent_wrapper(cr)
127
129
 
128
130
        # Get models
129
131
        partner_obj = registry('res.partner')
180
182
        sql_query = self.query_list[0].get_sql()
181
183
        self.assertIn('res_partner_bank', sql_query[0],
182
184
            "_auto_join off: ('bank_ids.name', 'like', '..') first query incorrect main table")
183
 
        self.assertIn('"res_partner_bank"."name" like %s', sql_query[1],
 
185
 
 
186
        expected = "%s::text like %s" % (unaccent('"res_partner_bank"."name"'), unaccent('%s'))
 
187
        self.assertIn(expected, sql_query[1],
184
188
            "_auto_join off: ('bank_ids.name', 'like', '..') first query incorrect where condition")
 
189
        
185
190
        self.assertEqual(set(['%' + name_test + '%']), set(sql_query[2]),
186
191
            "_auto_join off: ('bank_ids.name', 'like', '..') first query incorrect parameter")
187
192
        sql_query = self.query_list[2].get_sql()
217
222
            "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect main table")
218
223
        self.assertIn('"res_partner_bank" as "res_partner__bank_ids"', sql_query[0],
219
224
            "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect join")
220
 
        self.assertIn('"res_partner__bank_ids"."name" like %s', sql_query[1],
 
225
 
 
226
        expected = "%s::text like %s" % (unaccent('"res_partner__bank_ids"."name"'), unaccent('%s'))
 
227
        self.assertIn(expected, sql_query[1],
221
228
            "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect where condition")
 
229
        
222
230
        self.assertIn('"res_partner"."id"="res_partner__bank_ids"."partner_id"', sql_query[1],
223
231
            "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect join condition")
224
232
        self.assertEqual(set(['%' + name_test + '%']), set(sql_query[2]),
296
304
        sql_query = self.query_list[0].get_sql()
297
305
        self.assertIn('"res_country"', sql_query[0],
298
306
            "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect main table")
299
 
        self.assertIn('"res_country"."code" like %s', sql_query[1],
 
307
 
 
308
        expected = "%s::text like %s" % (unaccent('"res_country"."code"'), unaccent('%s'))
 
309
        self.assertIn(expected, sql_query[1],
300
310
            "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect where condition")
 
311
 
301
312
        self.assertEqual(['%' + name_test + '%'], sql_query[2],
302
313
            "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect parameter")
303
314
        sql_query = self.query_list[1].get_sql()
327
338
            "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect main table")
328
339
        self.assertIn('"res_country" as "res_country_state__country_id"', sql_query[0],
329
340
            "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect join")
330
 
        self.assertIn('"res_country_state__country_id"."code" like %s', sql_query[1],
 
341
 
 
342
        expected = "%s::text like %s" % (unaccent('"res_country_state__country_id"."code"'), unaccent('%s'))
 
343
        self.assertIn(expected, sql_query[1],
331
344
            "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect where condition")
 
345
        
332
346
        self.assertIn('"res_country_state"."country_id"="res_country_state__country_id"."id"', sql_query[1],
333
347
            "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect join condition")
334
348
        self.assertEqual(['%' + name_test + '%'], sql_query[2],
358
372
            "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join")
359
373
        self.assertIn('"res_country" as "res_partner__state_id__country_id"', sql_query[0],
360
374
            "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join")
361
 
        self.assertIn('"res_partner__state_id__country_id"."code" like %s', sql_query[1],
 
375
 
 
376
        expected = "%s::text like %s" % (unaccent('"res_partner__state_id__country_id"."code"'), unaccent('%s'))
 
377
        self.assertIn(expected, sql_query[1],
362
378
            "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect where condition")
 
379
        
363
380
        self.assertIn('"res_partner"."state_id"="res_partner__state_id"."id"', sql_query[1],
364
381
            "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join condition")
365
382
        self.assertIn('"res_partner__state_id"."country_id"="res_partner__state_id__country_id"."id"', sql_query[1],
385
402
            "_auto_join on one2many with domains incorrect result")
386
403
        # Test produced queries that domains effectively present
387
404
        sql_query = self.query_list[0].get_sql()
388
 
        self.assertIn('"res_partner__child_ids__bank_ids"."acc_number" like %s', sql_query[1],
 
405
        
 
406
        expected = "%s::text like %s" % (unaccent('"res_partner__child_ids__bank_ids"."acc_number"'), unaccent('%s'))
 
407
        self.assertIn(expected, sql_query[1],
389
408
            "_auto_join on one2many with domains incorrect result")
390
409
        # TDE TODO: check first domain has a correct table name
391
410
        self.assertIn('"res_partner__child_ids"."name" = %s', sql_query[1],
447
466
        domain = [('x', 'in', ['y', 'z']), ('a.v', '=', 'e'), '|', '|', ('a', '=', 'b'), '!', ('c', '>', 'd'), ('e', '!=', 'f'), ('g', '=', 'h')]
448
467
        norm_domain = ['&', '&', '&'] + domain
449
468
        assert norm_domain == expression.normalize_domain(domain), "Non-normalized domains should be properly normalized"
 
469
        
 
470
    def test_translate_search(self):
 
471
        Country = self.registry('res.country')
 
472
        be = self.ref('base.be')
 
473
        domains = [
 
474
            [('name', '=', 'Belgium')],
 
475
            [('name', 'ilike', 'Belgi')],
 
476
            [('name', 'in', ['Belgium', 'Care Bears'])],
 
477
        ]
 
478
 
 
479
        for domain in domains:
 
480
            ids = Country.search(self.cr, self.uid, domain)
 
481
            self.assertListEqual([be], ids)
450
482
 
451
483
if __name__ == '__main__':
452
484
    unittest2.main()