[FIX] revert previous rev for better where and add test
authorMartin Trigaux <mat@openerp.com>
Wed, 29 Jan 2014 11:39:38 +0000 (12:39 +0100)
committerMartin Trigaux <mat@openerp.com>
Wed, 29 Jan 2014 11:39:38 +0000 (12:39 +0100)
bzr revid: mat@openerp.com-20140129113938-517gqfi1kzcf64fz

openerp/addons/base/res/res_partner.py
openerp/addons/base/tests/test_base.py

index d3d8804..21d70e1 100644 (file)
@@ -601,6 +601,7 @@ class res_partner(osv.osv, format_address):
             where_query = self._where_calc(cr, uid, args, context=context)
             self._apply_ir_rules(cr, uid, where_query, 'read', context=context)
             from_clause, where_clause, where_clause_params = where_query.get_sql()
+            where_str = where_clause and (" WHERE %s AND " % where_clause) or ' WHERE '
 
             # search on the name of the contacts and of its company
             search_name = name
@@ -617,9 +618,9 @@ class res_partner(osv.osv, format_address):
             #            a random selection of `limit` results.
             query = ('''SELECT res_partner.id FROM res_partner
                                           LEFT JOIN res_partner company
-                                               ON res_partner.parent_id = company.id
-                        WHERE ''' + where_clause +
-                        ''' AND res_partner.email ''' + operator + ''' %s OR
+                                               ON res_partner.parent_id = company.id'''
+                        + where_str +
+                        ''' res_partner.email ''' + operator + ''' %s OR
                               CASE
                                    WHEN company.id IS NULL OR res_partner.is_company
                                        THEN res_partner.name
@@ -638,6 +639,7 @@ class res_partner(osv.osv, format_address):
                 where_clause_params.append(limit)
             cr.execute(query, where_clause_params)
             ids = map(lambda x: x[0], cr.fetchall())
+
             if ids:
                 return self.name_get(cr, uid, ids, context)
         return super(res_partner,self).name_search(cr, uid, name, args, operator=operator, context=context, limit=limit)
index 1ca66f5..02ce3b0 100644 (file)
@@ -39,6 +39,14 @@ class test_base(common.TransactionCase):
         new_id2 = self.res_partner.find_or_create(cr, uid, self.samples[2][0])
         self.assertTrue(new_id2 > new_id, 'find_or_create failed - should have created new one again')
 
+    def test_15_res_partner_name_search(self):
+        cr,uid = self.cr, self.uid
+        for text, name, mail in self.samples:
+            partner_id, dummy = self.res_partner.name_create(cr, uid, text)
+        partners = self.res_partner.name_search(cr, uid, 'Raoul')
+        self.assertEqual(len(partners), 3, 'Incorrect search number result for name_search')
+        partners = self.res_partner.name_search(cr, uid, 'Raoul', limit=1)
+        self.assertEqual(len(partners), 1, 'Incorrect search number result for name_search with a limit')
 
     def test_20_res_partner_address_sync(self):
         cr, uid = self.cr, self.uid