2012-11-21 11:45:57 +00:00
import unittest2
import openerp . tests . common as common
class test_expression ( common . TransactionCase ) :
def test_search_order ( self ) :
registry , cr , uid = self . registry , self . cr , self . uid
# 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 searchs and to provide a second order argument
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.
# The basic searchs should exclude records that have active = False. The order of ids returned
2012-11-21 12:21:06 +00:00
# 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
# The inactive records shouldn't be ecxluded as soon as a condition on this field is present in the domain
2012-11-21 12:21:06 +00:00
# criteria. The 'order' parameter of search() should support any valable coma-separated value
2012-11-21 11:45:57 +00:00
active_asc_id_asc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ( ' active ' , ' in ' , ( True , 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 11:45:57 +00:00
active_desc_id_asc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ( ' active ' , ' in ' , ( True , 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 11:45:57 +00:00
active_asc_id_desc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ( ' active ' , ' in ' , ( True , 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 11:45:57 +00:00
active_desc_id_desc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ( ' active ' , ' in ' , ( True , 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 11:45:57 +00:00
id_asc_active_asc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ( ' active ' , ' in ' , ( True , False ) ) ] , order = " id asc, active asc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( id_asc , id_asc_active_asc , " Search with ' ID ASC, ACTIVE ASC ' order failed. " )
2012-11-21 11:45:57 +00:00
id_asc_active_desc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ( ' active ' , ' in ' , ( True , False ) ) ] , order = " id asc, active desc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( id_asc , id_asc_active_desc , " Search with ' ID ASC, ACTIVE DESC ' order failed. " )
2012-11-21 11:45:57 +00:00
id_desc_active_asc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ( ' active ' , ' in ' , ( True , False ) ) ] , order = " id desc, active asc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( id_desc , id_desc_active_asc , " Search with ' ID DESC, ACTIVE ASC ' order failed. " )
2012-11-21 11:45:57 +00:00
id_desc_active_desc = partners . search ( cr , uid , [ ( ' name ' , ' like ' , ' test_search_order % ' ) , ( ' active ' , ' in ' , ( True , False ) ) ] , order = " id desc, active desc " )
2012-11-21 12:21:06 +00:00
self . assertEqual ( id_desc , id_desc_active_desc , " Search with ' ID DESC, ACTIVE DESC ' order failed. " )
2012-11-21 11:45:57 +00:00