2010-09-30 13:24:03 +00:00
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2010 OpenERP S.A. http://www.openerp.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import unittest
2011-02-07 12:57:23 +00:00
from openerp . osv . query import Query
2010-09-30 13:24:03 +00:00
2012-12-07 14:29:31 +00:00
2010-09-30 13:24:03 +00:00
class QueryTestCase ( unittest . TestCase ) :
def test_basic_query ( self ) :
query = Query ( )
2012-12-07 14:29:31 +00:00
query . tables . extend ( [ ' " product_product " ' , ' " product_template " ' ] )
2010-09-30 13:24:03 +00:00
query . where_clause . append ( " product_product.template_id = product_template.id " )
2012-12-07 15:42:04 +00:00
query . add_join ( ( " product_template " , " product_category " , " categ_id " , " id " , " categ_id " ) , implicit = False , outer = False ) # add normal join
query . add_join ( ( " product_product " , " res_user " , " user_id " , " id " , " user_id " ) , implicit = False , outer = True ) # outer join
2010-10-01 16:54:11 +00:00
self . assertEquals ( query . get_sql ( ) [ 0 ] . strip ( ) ,
2012-12-07 14:29:31 +00:00
""" " product_product " LEFT JOIN " res_user " as " product_product__user_id " ON ( " product_product " . " user_id " = " product_product__user_id " . " id " ), " product_template " JOIN " product_category " as " product_template__categ_id " ON ( " product_template " . " categ_id " = " product_template__categ_id " . " id " ) """ . strip ( ) )
2010-10-01 14:36:42 +00:00
self . assertEquals ( query . get_sql ( ) [ 1 ] . strip ( ) , """ product_product.template_id = product_template.id """ . strip ( ) )
def test_query_chained_explicit_joins ( self ) :
query = Query ( )
2012-12-07 14:29:31 +00:00
query . tables . extend ( [ ' " product_product " ' , ' " product_template " ' ] )
2010-10-01 14:36:42 +00:00
query . where_clause . append ( " product_product.template_id = product_template.id " )
2012-12-07 15:42:04 +00:00
query . add_join ( ( " product_template " , " product_category " , " categ_id " , " id " , " categ_id " ) , implicit = False , outer = False ) # add normal join
query . add_join ( ( " product_template__categ_id " , " res_user " , " user_id " , " id " , " user_id " ) , implicit = False , outer = True ) # CHAINED outer join
2010-10-01 16:54:11 +00:00
self . assertEquals ( query . get_sql ( ) [ 0 ] . strip ( ) ,
2012-12-07 14:29:31 +00:00
""" " product_product " , " product_template " JOIN " product_category " as " product_template__categ_id " ON ( " product_template " . " categ_id " = " product_template__categ_id " . " id " ) LEFT JOIN " res_user " as " product_template__categ_id__user_id " ON ( " product_template__categ_id " . " user_id " = " product_template__categ_id__user_id " . " id " ) """ . strip ( ) )
2010-10-01 14:36:42 +00:00
self . assertEquals ( query . get_sql ( ) [ 1 ] . strip ( ) , """ product_product.template_id = product_template.id """ . strip ( ) )
def test_mixed_query_chained_explicit_implicit_joins ( self ) :
query = Query ( )
2012-12-07 14:29:31 +00:00
query . tables . extend ( [ ' " product_product " ' , ' " product_template " ' ] )
2010-10-01 14:36:42 +00:00
query . where_clause . append ( " product_product.template_id = product_template.id " )
2012-12-07 15:42:04 +00:00
query . add_join ( ( " product_template " , " product_category " , " categ_id " , " id " , " categ_id " ) , implicit = False , outer = False ) # add normal join
query . add_join ( ( " product_template__categ_id " , " res_user " , " user_id " , " id " , " user_id " ) , implicit = False , outer = True ) # CHAINED outer join
2010-10-01 14:36:42 +00:00
query . tables . append ( ' " account.account " ' )
2012-12-07 14:29:31 +00:00
query . where_clause . append ( " product_category.expense_account_id = account_account.id " ) # additional implicit join
2010-10-01 16:54:11 +00:00
self . assertEquals ( query . get_sql ( ) [ 0 ] . strip ( ) ,
2012-12-07 14:29:31 +00:00
""" " product_product " , " product_template " JOIN " product_category " as " product_template__categ_id " ON ( " product_template " . " categ_id " = " product_template__categ_id " . " id " ) LEFT JOIN " res_user " as " product_template__categ_id__user_id " ON ( " product_template__categ_id " . " user_id " = " product_template__categ_id__user_id " . " id " ), " account.account " """ . strip ( ) )
2010-10-01 14:36:42 +00:00
self . assertEquals ( query . get_sql ( ) [ 1 ] . strip ( ) , """ product_product.template_id = product_template.id AND product_category.expense_account_id = account_account.id """ . strip ( ) )
2010-09-30 13:24:03 +00:00
def test_raise_missing_lhs ( self ) :
query = Query ( )
query . tables . append ( ' " product_product " ' )
2012-12-07 15:42:04 +00:00
self . assertRaises ( AssertionError , query . add_join , ( " product_template " , " product_category " , " categ_id " , " id " , " categ_id " ) , implicit = False , outer = False )
2010-10-01 14:36:42 +00:00
2011-11-22 08:58:48 +00:00
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: