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