1<?php 2 3 4 5/** 6 * OrangeHRM is a comprehensive Human Resource Management (HRM) System that captures 7 * all the essential functionalities required for any enterprise. 8 * Copyright (C) 2006 OrangeHRM Inc., http://www.orangehrm.com 9 * 10 * OrangeHRM is free software; you can redistribute it and/or modify it under the terms of 11 * the GNU General Public License as published by the Free Software Foundation; either 12 * version 2 of the License, or (at your option) any later version. 13 * 14 * OrangeHRM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 15 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 * See the GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License along with this program; 19 * if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20 * Boston, MA 02110-1301, USA 21 */ 22 23/** 24 * @group Core 25 */ 26class BaseServiceTest extends PHPUnit_Framework_TestCase { 27 28 private $baseService; 29 protected $fixture; 30 31 /** 32 * Set up method 33 */ 34 protected function setUp() { 35 $this->baseService = new BaseService(); 36 $this->fixture = sfConfig::get('sf_plugins_dir') . '/orangehrmCorePlugin/test/fixtures/sample_query_extensions.yml'; 37 PluginQueryExtensionManager::instance()->setQueryExtensions(sfYaml::load($this->fixture)); 38 } 39 40 /** 41 * Testing decorateQuery method for raw SQL for additional select fields 42 */ 43 public function testDecorateQuery_SQL_SelectFields() { 44 /* Single field */ 45 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10'"; 46 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname`, `emp_middle_name` FROM `hs_hr_employee` WHERE `emp_number` = '10'"; 47 $resultQuery = $this->baseService->decorateQuery('SampleService_ForSelect', 'sampleMethod1', $originalQuery); 48 $this->assertEquals($expectedQuery, $resultQuery); 49 50 /* Multiple fields */ 51 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10'"; 52 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname`, `emp_middle_name`, `job_title_code`, `joined_date` FROM `hs_hr_employee` WHERE `emp_number` = '10'"; 53 $resultQuery = $this->baseService->decorateQuery('SampleService_ForSelect', 'sampleMethod2', $originalQuery); 54 $this->assertEquals($expectedQuery, $resultQuery); 55 56 /* Single field with alias */ 57 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10'"; 58 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname`, `emp_middle_name` AS `middleName` FROM `hs_hr_employee` WHERE `emp_number` = '10'"; 59 $resultQuery = $this->baseService->decorateQuery('SampleService_ForSelect', 'sampleMethod3', $originalQuery); 60 $this->assertEquals($expectedQuery, $resultQuery); 61 62 /* Multiple fields with aliases */ 63 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10'"; 64 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname`, `emp_middle_name` AS `middleName`, `job_title_code`, `joined_date` AS `active` FROM `hs_hr_employee` WHERE `emp_number` = '10'"; 65 $resultQuery = $this->baseService->decorateQuery('SampleService_ForSelect', 'sampleMethod4', $originalQuery); 66 $this->assertEquals($expectedQuery, $resultQuery); 67 68 /* Single field with table id */ 69 70 /* Multiple fields with table ids */ 71 } 72 73 /** 74 * Testing decorateQuery method for raw SQL for additional select fields 75 */ 76 public function testDecorateQuery_SQL_WhereClauses() { 77 /* Single field without a WHERE clause */ 78 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee`"; 79 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_middle_name` = 'Charles'"; 80 $resultQuery = $this->baseService->decorateQuery('SampleService_ForWhere', 'sampleMethod1', $originalQuery); 81 $this->assertEquals($expectedQuery, $resultQuery); 82 83 /* Single field */ 84 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10'"; 85 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10' AND `emp_middle_name` = 'Charles'"; 86 $resultQuery = $this->baseService->decorateQuery('SampleService_ForWhere', 'sampleMethod1', $originalQuery); 87 $this->assertEquals($expectedQuery, $resultQuery); 88 89 /* Multiple fields without a WHERE clause */ 90 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee`"; 91 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_middle_name` = 'Charles' AND `joined_date` = '1'"; 92 $resultQuery = $this->baseService->decorateQuery('SampleService_ForWhere', 'sampleMethod2', $originalQuery); 93 $this->assertEquals($expectedQuery, $resultQuery); 94 95 /* Multiple fields */ 96 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10'"; 97 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10' AND `emp_middle_name` = 'Charles' AND `joined_date` = '1'"; 98 $resultQuery = $this->baseService->decorateQuery('SampleService_ForWhere', 'sampleMethod2', $originalQuery); 99 $this->assertEquals($expectedQuery, $resultQuery); 100 101 /* Single field with table id */ 102 103 /* Multiple fields with table ids */ 104 105 /* Single field with a GROUP BY clause */ 106 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10' GROUP BY `job_title_code`"; 107 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10' AND `emp_middle_name` = 'Charles' GROUP BY `job_title_code`"; 108 $resultQuery = $this->baseService->decorateQuery('SampleService_ForWhere', 'sampleMethod1', $originalQuery); 109 $this->assertEquals($expectedQuery, $resultQuery); 110 111 /* Single field with a ORDER BY clause */ 112 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10' ORDER BY `emp_firstname`"; 113 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10' AND `emp_middle_name` = 'Charles' ORDER BY `emp_firstname`"; 114 $resultQuery = $this->baseService->decorateQuery('SampleService_ForWhere', 'sampleMethod1', $originalQuery); 115 $this->assertEquals($expectedQuery, $resultQuery); 116 117 /* Single field with a LIMIT clause */ 118 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10' LIMIT 0, 50"; 119 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10' AND `emp_middle_name` = 'Charles' LIMIT 0, 50"; 120 $resultQuery = $this->baseService->decorateQuery('SampleService_ForWhere', 'sampleMethod1', $originalQuery); 121 $this->assertEquals($expectedQuery, $resultQuery); 122 123 /* Single field with a GROUP BY, ORDER BY and LIMIT clauses */ 124 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10' GROUP BY `job_title_code` ORDER BY `emp_firstname` LIMIT 0, 50"; 125 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` WHERE `emp_number` = '10' AND `emp_middle_name` = 'Charles' GROUP BY `job_title_code` ORDER BY `emp_firstname` LIMIT 0, 50"; 126 $resultQuery = $this->baseService->decorateQuery('SampleService_ForWhere', 'sampleMethod1', $originalQuery); 127 $this->assertEquals($expectedQuery, $resultQuery); 128 } 129 130 public function testDecorateQuery_SQL_OrderByClauses() { 131 /* Single field without a WHERE clause */ 132 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee`"; 133 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` ORDER BY `emp_firstname`"; 134 $resultQuery = $this->baseService->decorateQuery('SampleService_ForOrderBy', 'sampleMethod1', $originalQuery); 135 $this->assertEquals($expectedQuery, $resultQuery); 136 137 /* Single field */ 138 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` ORDER BY `emp_lastname` LIMIT 0,10"; 139 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` ORDER BY `emp_firstname` , `emp_lastname` LIMIT 0,10"; 140 $resultQuery = $this->baseService->decorateQuery('SampleService_ForOrderBy', 'sampleMethod2', $originalQuery); 141 $this->assertEquals($expectedQuery, $resultQuery); 142 143 /* Multiple fields without a WHERE clause */ 144 $originalQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` ORDER BY `emp_lastname` LIMIT 0,10"; 145 $expectedQuery = "SELECT `emp_firstname`, `emp_lastname` FROM `hs_hr_employee` ORDER BY `emp_firstname`, `job_title_code`, `joined_date` , `emp_lastname` LIMIT 0,10"; 146 $resultQuery = $this->baseService->decorateQuery('SampleService_ForOrderBy', 'sampleMethod3', $originalQuery); 147 $this->assertEquals($expectedQuery, $resultQuery); } 148 149} 150