2012-11-21 11:45:57 +00:00
import unittest2
import openerp . tests . common as common
2012-12-07 11:54:24 +00:00
class test_search ( common . TransactionCase ) :
def test_00_search_order ( self ) :
2012-11-21 11:45:57 +00:00
registry , cr , uid = self . registry , self . cr , self . uid
2012-12-07 11:54:24 +00:00
# Create 6 partners with a given name, and a given creation order to
# ensure the order of their ID. Some are set as unactive to verify they
# are by default excluded from the searches and to provide a second
# `order` argument.
2012-11-21 11:45:57 +00:00
partners = registry ( ' res.partner ' )
c = partners . create ( cr , uid , { ' name ' : ' test_search_order_C ' } )
d = partners . create ( cr , uid , { ' name ' : ' test_search_order_D ' , ' active ' : False } )
a = partners . create ( cr , uid , { ' name ' : ' test_search_order_A ' } )
b = partners . create ( cr , uid , { ' name ' : ' test_search_order_B ' } )
ab = partners . create ( cr , uid , { ' name ' : ' test_search_order_AB ' } )
e = partners . create ( cr , uid , { ' name ' : ' test_search_order_E ' , ' active ' : False } )
# The tests.
2012-12-07 11:54:24 +00:00
# The basic searches should exclude records that have active = False.
# The order of the returned ids should be given by the `order`
# parameter of search().
2012-11-21 11:45:57 +00:00
name_asc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) ] , order = " name asc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( [ a , ab , b , c ] , name_asc , " Search with ' NAME ASC ' order failed. " )
2012-11-21 11:45:57 +00:00
name_desc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) ] , order = " name desc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( [ c , b , ab , a ] , name_desc , " Search with ' NAME DESC ' order failed. " )
2012-11-21 11:45:57 +00:00
id_asc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) ] , order = " id asc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( [ c , a , b , ab ] , id_asc , " Search with ' ID ASC ' order failed. " )
2012-11-21 11:45:57 +00:00
id_desc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) ] , order = " id desc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( [ ab , b , a , c ] , id_desc , " Search with ' ID DESC ' order failed. " )
2012-11-21 11:45:57 +00:00
2012-12-07 11:54:24 +00:00
# The inactive records shouldn't be excluded as soon as a condition on
# that field is present in the domain. The `order` parameter of
# search() should support any legal coma-separated values.
2012-11-21 11:45:57 +00:00
2012-11-21 12:53:47 +00:00
active_asc_id_asc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ' | ' , ( ' active ' , ' = ' , True ) , ( ' active ' , ' = ' , False ) ] , order = " active asc, id asc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( [ d , e , c , a , b , ab ] , active_asc_id_asc , " Search with ' ACTIVE ASC, ID ASC ' order failed. " )
2012-11-21 12:53:47 +00:00
active_desc_id_asc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ' | ' , ( ' active ' , ' = ' , True ) , ( ' active ' , ' = ' , False ) ] , order = " active desc, id asc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( [ c , a , b , ab , d , e ] , active_desc_id_asc , " Search with ' ACTIVE DESC, ID ASC ' order failed. " )
2012-11-21 12:53:47 +00:00
active_asc_id_desc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ' | ' , ( ' active ' , ' = ' , True ) , ( ' active ' , ' = ' , False ) ] , order = " active asc, id desc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( [ e , d , ab , b , a , c ] , active_asc_id_desc , " Search with ' ACTIVE ASC, ID DESC ' order failed. " )
2012-11-21 12:53:47 +00:00
active_desc_id_desc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ' | ' , ( ' active ' , ' = ' , True ) , ( ' active ' , ' = ' , False ) ] , order = " active desc, id desc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( [ ab , b , a , c , e , d ] , active_desc_id_desc , " Search with ' ACTIVE DESC, ID DESC ' order failed. " )
2012-11-21 12:53:47 +00:00
id_asc_active_asc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ' | ' , ( ' active ' , ' = ' , True ) , ( ' active ' , ' = ' , False ) ] , order = " id asc, active asc " )
self . assertEqual ( [ c , d , a , b , ab , e ] , id_asc_active_asc , " Search with ' ID ASC, ACTIVE ASC ' order failed. " )
id_asc_active_desc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ' | ' , ( ' active ' , ' = ' , True ) , ( ' active ' , ' = ' , False ) ] , order = " id asc, active desc " )
self . assertEqual ( [ c , d , a , b , ab , e ] , id_asc_active_desc , " Search with ' ID ASC, ACTIVE DESC ' order failed. " )
id_desc_active_asc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ' | ' , ( ' active ' , ' = ' , True ) , ( ' active ' , ' = ' , False ) ] , order = " id desc, active asc " )
self . assertEqual ( [ e , ab , b , a , d , c ] , id_desc_active_asc , " Search with ' ID DESC, ACTIVE ASC ' order failed. " )
id_desc_active_desc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ' | ' , ( ' active ' , ' = ' , True ) , ( ' active ' , ' = ' , False ) ] , order = " id desc, active desc " )
self . assertEqual ( [ e , ab , b , a , d , c ] , id_desc_active_desc , " Search with ' ID DESC, ACTIVE DESC ' order failed. " )
2012-11-21 11:45:57 +00:00
2012-12-07 15:58:25 +00:00
def test_10_inherits_m2order ( self ) :
2012-12-07 11:54:24 +00:00
registry , cr , uid = self . registry , self . cr , self . uid
users_obj = registry ( ' res.users ' )
# Find Employee group
group_employee_ref = self . registry ( ' ir.model.data ' ) . get_object_reference ( cr , uid , ' base ' , ' group_user ' )
group_employee_id = group_employee_ref and group_employee_ref [ 1 ] or False
2012-12-07 13:49:46 +00:00
# Get country/state data
country_us_id = registry ( ' res.country ' ) . search ( cr , uid , [ ( ' code ' , ' like ' , ' US ' ) ] ) [ 0 ]
state_ids = registry ( ' res.country.state ' ) . search ( cr , uid , [ ( ' country_id ' , ' = ' , country_us_id ) ] , limit = 2 )
country_be_id = registry ( ' res.country ' ) . search ( cr , uid , [ ( ' code ' , ' like ' , ' BE ' ) ] ) [ 0 ]
# Create test users
2012-12-07 11:54:24 +00:00
search_user = users_obj . create ( cr , uid , { ' name ' : ' __search ' , ' login ' : ' __search ' , ' groups_id ' : [ ( 6 , 0 , [ group_employee_id ] ) ] } )
2012-12-07 13:49:46 +00:00
a = users_obj . create ( cr , uid , { ' name ' : ' __test_A ' , ' login ' : ' __test_A ' , ' country_id ' : country_be_id , ' state_id ' : country_be_id } )
b = users_obj . create ( cr , uid , { ' name ' : ' __test_B ' , ' login ' : ' __a_test_B ' , ' country_id ' : country_us_id , ' state_id ' : state_ids [ 1 ] } )
c = users_obj . create ( cr , uid , { ' name ' : ' __test_B ' , ' login ' : ' __z_test_B ' , ' country_id ' : country_us_id , ' state_id ' : state_ids [ 0 ] } )
2012-12-07 11:54:24 +00:00
2012-12-07 13:49:46 +00:00
# Do: search on res.users, order on a field on res.partner to try inherits'd fields, then res.users
2012-12-07 11:54:24 +00:00
user_ids = users_obj . search ( cr , search_user , [ ] , order = ' name asc, login desc ' )
2012-12-07 13:49:46 +00:00
expected_ids = [ search_user , a , c , b ]
test_user_ids = filter ( lambda x : x in expected_ids , user_ids )
self . assertEqual ( test_user_ids , expected_ids , ' search on res_users did not provide expected ids or expected order ' )
2012-12-07 11:54:24 +00:00
2012-12-07 13:49:46 +00:00
# Do: order on many2one and inherits'd fields
2012-12-07 11:54:24 +00:00
user_ids = users_obj . search ( cr , search_user , [ ] , order = ' state_id asc, country_id desc, name asc, login desc ' )
2012-12-07 13:49:46 +00:00
expected_ids = [ c , b , a , search_user ]
test_user_ids = filter ( lambda x : x in expected_ids , user_ids )
self . assertEqual ( test_user_ids , expected_ids , ' search on res_users did not provide expected ids or expected order ' )
# Do: order on many2one and inherits'd fields
user_ids = users_obj . search ( cr , search_user , [ ] , order = ' country_id desc, state_id desc, name asc, login desc ' )
expected_ids = [ search_user , b , c , a ]
test_user_ids = filter ( lambda x : x in expected_ids , user_ids )
self . assertEqual ( test_user_ids , expected_ids , ' search on res_users did not provide expected ids or expected order ' )
2012-12-07 15:58:25 +00:00
# Do: order on many2one, but not by specifying in order parameter of search, but by overriding _order of res_users
old_order = users_obj . _order
users_obj . _order = ' country_id desc, name asc, login desc '
user_ids = users_obj . search ( cr , search_user , [ ] )
expected_ids = [ search_user , c , b , a ]
test_user_ids = filter ( lambda x : x in expected_ids , user_ids )
self . assertEqual ( test_user_ids , expected_ids , ' search on res_users did not provide expected ids or expected order ' )
users_obj . _order = old_order
2015-08-13 14:52:58 +00:00
def test_11_indirect_inherits_m2order ( self ) :
registry , cr , uid = self . registry , self . cr , self . uid
Cron = registry ( ' ir.cron ' )
Users = registry ( ' res.users ' )
user_ids = { }
cron_ids = { }
for u in ' BAC ' :
user_ids [ u ] = Users . create ( cr , uid , { ' name ' : u , ' login ' : u } )
cron_ids [ u ] = Cron . create ( cr , uid , { ' name ' : u , ' user_id ' : user_ids [ u ] } )
ids = Cron . search ( cr , uid , [ ( ' id ' , ' in ' , cron_ids . values ( ) ) ] , order = ' user_id ' )
expected_ids = [ cron_ids [ l ] for l in ' ABC ' ]
self . assertEqual ( ids , expected_ids )
2012-11-21 11:45:57 +00:00
2012-12-07 11:54:24 +00:00
if __name__ == ' __main__ ' :
unittest2 . main ( )