2 /*********************************************************************************
3 * SugarCRM Community Edition is a customer relationship management program developed by
4 * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
6 * This program is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU Affero General Public License version 3 as published by the
8 * Free Software Foundation with the addition of the following permission added
9 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
11 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
18 * You should have received a copy of the GNU Affero General Public License along with
19 * this program; if not, see http://www.gnu.org/licenses or write to the Free
20 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
24 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
26 * The interactive user interfaces in modified source and object code versions
27 * of this program must display Appropriate Legal Notices, as required under
28 * Section 5 of the GNU Affero General Public License version 3.
30 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31 * these Appropriate Legal Notices must retain the display of the "Powered by
32 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
33 * technical reasons, the Appropriate Legal Notices must display the words
34 * "Powered by SugarCRM".
35 ********************************************************************************/
39 require_once 'modules/Notes/Note.php';
40 require_once 'include/SearchForm/SearchForm2.php';
45 class Bug45966 extends Sugar_PHPUnit_Framework_TestCase {
47 var $module = 'Notes';
48 var $action = 'index';
53 public function setUp() {
54 require('include/modules.php');
55 $GLOBALS['beanList'] = $beanList;
56 $GLOBALS['beanFiles'] = $beanFiles;
58 require "modules/".$this->module."/metadata/searchdefs.php";
59 require "modules/".$this->module."/metadata/SearchFields.php";
60 require "modules/".$this->module."/metadata/listviewdefs.php";
62 $GLOBALS['current_user'] = SugarTestUserUtilities::createAnonymousUser();
63 $GLOBALS['current_user']->setPreference('timezone', 'EDT');
65 $this->seed = new $beanList[$this->module];
66 $this->form = new SearchForm($this->seed, $this->module, $this->action);
67 $this->form->setup($searchdefs, $searchFields, 'include/SearchForm/tpls/SearchFormGeneric.tpl', "advanced_search", $listViewDefs);
70 'module'=>$this->module,
71 'action'=>$this->action,
72 'searchFormTab'=>'advanced_search',
74 'date_entered_advanced_range_choice'=>'',
75 'range_date_entered_advanced' => '',
76 'start_range_date_entered_advanced' => '',
77 'end_range_date_entered_advanced' => '',
81 public function tearDown() {
85 SugarTestUserUtilities::removeAllCreatedAnonymousUsers();
86 unset($GLOBALS['current_user']);
92 public function testSearchDateEqualsAdjustsForTimeZone() {
94 $user = $GLOBALS['current_user'];
96 $testDate = '12/31/2011';
98 $this->array['date_entered_advanced_range_choice'] = '=';
99 $this->array['range_date_entered_advanced'] = $testDate;
101 $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
103 $expected = array(strtolower($this->module).".date_entered >= '".$adjDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjDate['end']."'");
105 $this->form->populateFromArray($this->array);
106 $query = $this->form->generateSearchWhere($this->seed, $this->module);
108 $this->assertSame($expected, $query);
111 public function testSearchNotOnDateAdjustsForTimeZone() {
113 $user = $GLOBALS['current_user'];
115 $testDate = '12/31/2011';
117 $this->array['date_entered_advanced_range_choice'] = 'not_equal';
118 $this->array['range_date_entered_advanced'] = $testDate;
120 $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
122 $expected = array(strtolower($this->module).".date_entered < '".$adjDate['start']."' OR ". strtolower($this->module).".date_entered > '".$adjDate['end']."'");
124 $this->form->populateFromArray($this->array);
125 $query = $this->form->generateSearchWhere($this->seed, $this->module);
127 $this->assertSame($expected, $query);
130 public function testSearchAfterDateAdjustsForTimeZone() {
132 $user = $GLOBALS['current_user'];
134 $testDate = '12/31/2011';
136 $this->array['date_entered_advanced_range_choice'] = 'greater_than';
137 $this->array['range_date_entered_advanced'] = $testDate;
139 $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
140 $expected = array(strtolower($this->module).".date_entered > '".$adjDate['end']."'");
142 $this->form->populateFromArray($this->array);
143 $query = $this->form->generateSearchWhere($this->seed, $this->module);
145 $this->assertSame($expected, $query);
148 public function testSearchBeforeDateAdjustsForTimeZone() {
150 $user = $GLOBALS['current_user'];
152 $testDate = '01/01/2011';
154 $this->array['date_entered_advanced_range_choice'] = 'less_than';
155 $this->array['range_date_entered_advanced'] = $testDate;
157 $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
158 $expected = array(strtolower($this->module).".date_entered < '".$adjDate['start']."'");
160 $this->form->populateFromArray($this->array);
161 $query = $this->form->generateSearchWhere($this->seed, $this->module);
163 $this->assertSame($expected, $query);
166 public function testSearchLastSevenDaysAdjustsForTimeZone() {
168 $user = $GLOBALS['current_user'];
170 $testDate = 'last_7_days';
172 $this->array['date_entered_advanced_range_choice'] = $testDate;
173 $this->array['range_date_entered_advanced'] = "[$testDate]";
175 $adjToday = $timedate->getDayStartEndGMT(date('m/d/Y'), $user);
176 $adjStartDate = $timedate->getDayStartEndGMT(date('m/d/Y', time() - (6 * TimeDate::SECONDS_IN_A_DAY)), $user);
178 $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjToday['end']."'");
180 $this->form->populateFromArray($this->array);
181 $query = $this->form->generateSearchWhere($this->seed, $this->module);
183 $this->assertSame($expected, $query);
186 public function testSearchNextSevenDaysAdjustsForTimeZone() {
188 $user = $GLOBALS['current_user'];
190 $testDate = 'next_7_days';
192 $this->array['date_entered_advanced_range_choice'] = $testDate;
193 $this->array['range_date_entered_advanced'] = "[$testDate]";
195 $adjToday = $timedate->getDayStartEndGMT(date('m/d/Y'), $user);
196 $adjEndDate = $timedate->getDayStartEndGMT(date('m/d/Y', time() + (6 * TimeDate::SECONDS_IN_A_DAY)), $user);
198 $expected = array(strtolower($this->module).".date_entered >= '".$adjToday['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
200 $this->form->populateFromArray($this->array);
201 $query = $this->form->generateSearchWhere($this->seed, $this->module);
203 $this->assertSame($expected, $query);
206 public function testSearchLastThirtyDaysAdjustsForTimeZone() {
208 $user = $GLOBALS['current_user'];
210 $testDate = 'last_30_days';
212 $this->array['date_entered_advanced_range_choice'] = $testDate;
213 $this->array['range_date_entered_advanced'] = "[$testDate]";
215 $adjToday = $timedate->getDayStartEndGMT(date('m/d/Y'), $user);
216 $adjStartDate = $timedate->getDayStartEndGMT(date('m/d/Y', time() - (29 * TimeDate::SECONDS_IN_A_DAY)), $user);
218 $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjToday['end']."'");
220 $this->form->populateFromArray($this->array);
221 $query = $this->form->generateSearchWhere($this->seed, $this->module);
223 $this->assertSame($expected, $query);
226 public function testSearchNextThirtyDaysAdjustsForTimeZone() {
228 $user = $GLOBALS['current_user'];
230 $testDate = 'next_30_days';
232 $this->array['date_entered_advanced_range_choice'] = $testDate;
233 $this->array['range_date_entered_advanced'] = "[$testDate]";
235 $adjToday = $timedate->getDayStartEndGMT(date('m/d/Y'), $user);
236 $adjEndDate = $timedate->getDayStartEndGMT(date('m/d/Y', time() + (29 * TimeDate::SECONDS_IN_A_DAY)), $user);
238 $expected = array(strtolower($this->module).".date_entered >= '".$adjToday['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
240 $this->form->populateFromArray($this->array);
241 $query = $this->form->generateSearchWhere($this->seed, $this->module);
243 $this->assertSame($expected, $query);
246 public function testSearchLastMonthAdjustsForTimeZone() {
248 $user = $GLOBALS['current_user'];
250 $testDate = 'last_month';
252 $this->array['date_entered_advanced_range_choice'] = $testDate;
253 $this->array['range_date_entered_advanced'] = "[$testDate]";
255 $adjLastMonthFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, date("m")-1, 01, date("Y"))), $user);
256 $adjLastMonthLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, -1, date("m"), 01, date("Y"))), $user);
258 $expected = array(strtolower($this->module).".date_entered >= '".$adjLastMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjLastMonthLastDay['end']."'");
260 $this->form->populateFromArray($this->array);
261 $query = $this->form->generateSearchWhere($this->seed, $this->module);
263 $this->assertSame($expected, $query);
266 public function testSearchThisMonthAdjustsForTimeZone() {
268 $user = $GLOBALS['current_user'];
270 $testDate = 'this_month';
272 $this->array['date_entered_advanced_range_choice'] = $testDate;
273 $this->array['range_date_entered_advanced'] = "[$testDate]";
275 $adjThisMonthFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, date("m"), 01, date("Y"))), $user);
276 $adjThisMonthLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, -1, date("m")+1, 01, date("Y"))), $user);
278 $expected = array(strtolower($this->module).".date_entered >= '".$adjThisMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjThisMonthLastDay['end']."'");
280 $this->form->populateFromArray($this->array);
281 $query = $this->form->generateSearchWhere($this->seed, $this->module);
283 $this->assertSame($expected, $query);
286 public function testSearchNextMonthAdjustsForTimeZone() {
288 $user = $GLOBALS['current_user'];
290 $testDate = 'next_month';
292 $this->array['date_entered_advanced_range_choice'] = $testDate;
293 $this->array['range_date_entered_advanced'] = "[$testDate]";
295 $adjNextMonthFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, date("m")+1, 01, date("Y"))), $user);
296 $adjNextMonthLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, -1, date("m")+2, 01, date("Y"))), $user);
298 $expected = array(strtolower($this->module).".date_entered >= '".$adjNextMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjNextMonthLastDay['end']."'");
300 $this->form->populateFromArray($this->array);
301 $query = $this->form->generateSearchWhere($this->seed, $this->module);
303 $this->assertSame($expected, $query);
306 public function testSearchLastYearAdjustsForTimeZone() {
308 $user = $GLOBALS['current_user'];
310 $testDate = 'last_year';
312 $this->array['date_entered_advanced_range_choice'] = $testDate;
313 $this->array['range_date_entered_advanced'] = "[$testDate]";
315 $adjLastYearFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 01, 01, date("Y")-1)), $user);
316 $adjLastYearLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 12, 31, date("Y")-1)), $user);
318 $expected = array(strtolower($this->module).".date_entered >= '".$adjLastYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjLastYearLastDay['end']."'");
320 $this->form->populateFromArray($this->array);
321 $query = $this->form->generateSearchWhere($this->seed, $this->module);
323 $this->assertSame($expected, $query);
326 public function testSearchThisYearAdjustsForTimeZone() {
328 $user = $GLOBALS['current_user'];
330 $testDate = 'this_year';
332 $this->array['date_entered_advanced_range_choice'] = $testDate;
333 $this->array['range_date_entered_advanced'] = "[$testDate]";
335 $adjThisYearFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 01, 01, date("Y"))), $user);
336 $adjThisYearLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 12, 31, date("Y"))), $user);
338 $expected = array(strtolower($this->module).".date_entered >= '".$adjThisYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjThisYearLastDay['end']."'");
340 $this->form->populateFromArray($this->array);
341 $query = $this->form->generateSearchWhere($this->seed, $this->module);
343 $this->assertSame($expected, $query);
346 public function testSearchNextYearAdjustsForTimeZone() {
348 $user = $GLOBALS['current_user'];
350 $testDate = 'next_year';
352 $this->array['date_entered_advanced_range_choice'] = $testDate;
353 $this->array['range_date_entered_advanced'] = "[$testDate]";
355 $adjNextYearFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 01, 01, date("Y")+1)), $user);
356 $adjNextYearLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 12, 31, date("Y")+1)), $user);
358 $expected = array(strtolower($this->module).".date_entered >= '".$adjNextYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjNextYearLastDay['end']."'");
360 $this->form->populateFromArray($this->array);
361 $query = $this->form->generateSearchWhere($this->seed, $this->module);
363 $this->assertSame($expected, $query);
366 public function testSearchDateIsBetweenAdjustsForTimeZone() {
368 $user = $GLOBALS['current_user'];
370 $testStartDate = '01/01/2011';
371 $testEndDate = '12/31/2011';
373 $this->array['date_entered_advanced_range_choice'] = 'between';
374 $this->array['start_range_date_entered_advanced'] = $testStartDate;
375 $this->array['end_range_date_entered_advanced'] = $testEndDate;
377 $adjStartDate = $timedate->getDayStartEndGMT($testStartDate, $user);
378 $adjEndDate = $timedate->getDayStartEndGMT($testEndDate, $user);
380 $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
382 $this->form->populateFromArray($this->array);
383 $query = $this->form->generateSearchWhere($this->seed, $this->module);
385 $this->assertSame($expected, $query);