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() {
56 require "modules/".$this->module."/metadata/searchdefs.php";
57 require "modules/".$this->module."/metadata/SearchFields.php";
58 require "modules/".$this->module."/metadata/listviewdefs.php";
60 $GLOBALS['current_user'] = SugarTestUserUtilities::createAnonymousUser();
61 $GLOBALS['current_user']->setPreference('timezone', 'EDT');
63 $this->seed = new $beanList[$this->module];
64 $this->form = new SearchForm($this->seed, $this->module, $this->action);
65 $this->form->setup($searchdefs, $searchFields, 'include/SearchForm/tpls/SearchFormGeneric.tpl', "advanced_search", $listViewDefs);
68 'module'=>$this->module,
69 'action'=>$this->action,
70 'searchFormTab'=>'advanced_search',
72 'date_entered_advanced_range_choice'=>'',
73 'range_date_entered_advanced' => '',
74 'start_range_date_entered_advanced' => '',
75 'end_range_date_entered_advanced' => '',
79 public function tearDown() {
83 SugarTestUserUtilities::removeAllCreatedAnonymousUsers();
84 unset($GLOBALS['current_user']);
90 public function testSearchDateEqualsAdjustsForTimeZone() {
92 $user = $GLOBALS['current_user'];
94 $testDate = '12/31/2011';
96 $this->array['date_entered_advanced_range_choice'] = '=';
97 $this->array['range_date_entered_advanced'] = $testDate;
99 $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
101 $expected = array(strtolower($this->module).".date_entered >= '".$adjDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjDate['end']."'");
103 $this->form->populateFromArray($this->array);
104 $query = $this->form->generateSearchWhere($this->seed, $this->module);
106 $this->assertSame($expected, $query);
109 public function testSearchNotOnDateAdjustsForTimeZone() {
111 $user = $GLOBALS['current_user'];
113 $testDate = '12/31/2011';
115 $this->array['date_entered_advanced_range_choice'] = 'not_equal';
116 $this->array['range_date_entered_advanced'] = $testDate;
118 $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
120 $expected = array(strtolower($this->module).".date_entered < '".$adjDate['start']."' OR ". strtolower($this->module).".date_entered > '".$adjDate['end']."'");
122 $this->form->populateFromArray($this->array);
123 $query = $this->form->generateSearchWhere($this->seed, $this->module);
125 $this->assertSame($expected, $query);
128 public function testSearchAfterDateAdjustsForTimeZone() {
130 $user = $GLOBALS['current_user'];
132 $testDate = '12/31/2011';
134 $this->array['date_entered_advanced_range_choice'] = 'greater_than';
135 $this->array['range_date_entered_advanced'] = $testDate;
137 $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
138 $expected = array(strtolower($this->module).".date_entered > '".$adjDate['end']."'");
140 $this->form->populateFromArray($this->array);
141 $query = $this->form->generateSearchWhere($this->seed, $this->module);
143 $this->assertSame($expected, $query);
146 public function testSearchBeforeDateAdjustsForTimeZone() {
148 $user = $GLOBALS['current_user'];
150 $testDate = '01/01/2011';
152 $this->array['date_entered_advanced_range_choice'] = 'less_than';
153 $this->array['range_date_entered_advanced'] = $testDate;
155 $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
156 $expected = array(strtolower($this->module).".date_entered < '".$adjDate['start']."'");
158 $this->form->populateFromArray($this->array);
159 $query = $this->form->generateSearchWhere($this->seed, $this->module);
161 $this->assertSame($expected, $query);
164 public function testSearchLastSevenDaysAdjustsForTimeZone() {
166 $user = $GLOBALS['current_user'];
168 $testDate = 'last_7_days';
170 $this->array['date_entered_advanced_range_choice'] = $testDate;
171 $this->array['range_date_entered_advanced'] = "[$testDate]";
173 $adjToday = $timedate->getDayStartEndGMT(date('m/d/Y'), $user);
174 $adjStartDate = $timedate->getDayStartEndGMT(date('m/d/Y', time() - (6 * TimeDate::SECONDS_IN_A_DAY)), $user);
176 $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjToday['end']."'");
178 $this->form->populateFromArray($this->array);
179 $query = $this->form->generateSearchWhere($this->seed, $this->module);
181 $this->assertSame($expected, $query);
184 public function testSearchNextSevenDaysAdjustsForTimeZone() {
186 $user = $GLOBALS['current_user'];
188 $testDate = 'next_7_days';
190 $this->array['date_entered_advanced_range_choice'] = $testDate;
191 $this->array['range_date_entered_advanced'] = "[$testDate]";
193 $adjToday = $timedate->getDayStartEndGMT(date('m/d/Y'), $user);
194 $adjEndDate = $timedate->getDayStartEndGMT(date('m/d/Y', time() + (6 * TimeDate::SECONDS_IN_A_DAY)), $user);
196 $expected = array(strtolower($this->module).".date_entered >= '".$adjToday['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
198 $this->form->populateFromArray($this->array);
199 $query = $this->form->generateSearchWhere($this->seed, $this->module);
201 $this->assertSame($expected, $query);
204 public function testSearchLastThirtyDaysAdjustsForTimeZone() {
206 $user = $GLOBALS['current_user'];
208 $testDate = 'last_30_days';
210 $this->array['date_entered_advanced_range_choice'] = $testDate;
211 $this->array['range_date_entered_advanced'] = "[$testDate]";
213 $adjToday = $timedate->getDayStartEndGMT(date('m/d/Y'), $user);
214 $adjStartDate = $timedate->getDayStartEndGMT(date('m/d/Y', time() - (29 * TimeDate::SECONDS_IN_A_DAY)), $user);
216 $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjToday['end']."'");
218 $this->form->populateFromArray($this->array);
219 $query = $this->form->generateSearchWhere($this->seed, $this->module);
221 $this->assertSame($expected, $query);
224 public function testSearchNextThirtyDaysAdjustsForTimeZone() {
226 $user = $GLOBALS['current_user'];
228 $testDate = 'next_30_days';
230 $this->array['date_entered_advanced_range_choice'] = $testDate;
231 $this->array['range_date_entered_advanced'] = "[$testDate]";
233 $adjToday = $timedate->getDayStartEndGMT(date('m/d/Y'), $user);
234 $adjEndDate = $timedate->getDayStartEndGMT(date('m/d/Y', time() + (29 * TimeDate::SECONDS_IN_A_DAY)), $user);
236 $expected = array(strtolower($this->module).".date_entered >= '".$adjToday['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
238 $this->form->populateFromArray($this->array);
239 $query = $this->form->generateSearchWhere($this->seed, $this->module);
241 $this->assertSame($expected, $query);
244 public function testSearchLastMonthAdjustsForTimeZone() {
246 $user = $GLOBALS['current_user'];
248 $testDate = 'last_month';
250 $this->array['date_entered_advanced_range_choice'] = $testDate;
251 $this->array['range_date_entered_advanced'] = "[$testDate]";
253 $adjLastMonthFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, date("m")-1, 01, date("Y"))), $user);
254 $adjLastMonthLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, -1, date("m"), 01, date("Y"))), $user);
256 $expected = array(strtolower($this->module).".date_entered >= '".$adjLastMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjLastMonthLastDay['end']."'");
258 $this->form->populateFromArray($this->array);
259 $query = $this->form->generateSearchWhere($this->seed, $this->module);
261 $this->assertSame($expected, $query);
264 public function testSearchThisMonthAdjustsForTimeZone() {
266 $user = $GLOBALS['current_user'];
268 $testDate = 'this_month';
270 $this->array['date_entered_advanced_range_choice'] = $testDate;
271 $this->array['range_date_entered_advanced'] = "[$testDate]";
273 $adjThisMonthFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, date("m"), 01, date("Y"))), $user);
274 $adjThisMonthLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, -1, date("m")+1, 01, date("Y"))), $user);
276 $expected = array(strtolower($this->module).".date_entered >= '".$adjThisMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjThisMonthLastDay['end']."'");
278 $this->form->populateFromArray($this->array);
279 $query = $this->form->generateSearchWhere($this->seed, $this->module);
281 $this->assertSame($expected, $query);
284 public function testSearchNextMonthAdjustsForTimeZone() {
286 $user = $GLOBALS['current_user'];
288 $testDate = 'next_month';
290 $this->array['date_entered_advanced_range_choice'] = $testDate;
291 $this->array['range_date_entered_advanced'] = "[$testDate]";
293 $adjNextMonthFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, date("m")+1, 01, date("Y"))), $user);
294 $adjNextMonthLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, -1, date("m")+2, 01, date("Y"))), $user);
296 $expected = array(strtolower($this->module).".date_entered >= '".$adjNextMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjNextMonthLastDay['end']."'");
298 $this->form->populateFromArray($this->array);
299 $query = $this->form->generateSearchWhere($this->seed, $this->module);
301 $this->assertSame($expected, $query);
304 public function testSearchLastYearAdjustsForTimeZone() {
306 $user = $GLOBALS['current_user'];
308 $testDate = 'last_year';
310 $this->array['date_entered_advanced_range_choice'] = $testDate;
311 $this->array['range_date_entered_advanced'] = "[$testDate]";
313 $adjLastYearFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 01, 01, date("Y")-1)), $user);
314 $adjLastYearLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 12, 31, date("Y")-1)), $user);
316 $expected = array(strtolower($this->module).".date_entered >= '".$adjLastYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjLastYearLastDay['end']."'");
318 $this->form->populateFromArray($this->array);
319 $query = $this->form->generateSearchWhere($this->seed, $this->module);
321 $this->assertSame($expected, $query);
324 public function testSearchThisYearAdjustsForTimeZone() {
326 $user = $GLOBALS['current_user'];
328 $testDate = 'this_year';
330 $this->array['date_entered_advanced_range_choice'] = $testDate;
331 $this->array['range_date_entered_advanced'] = "[$testDate]";
333 $adjThisYearFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 01, 01, date("Y"))), $user);
334 $adjThisYearLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 12, 31, date("Y"))), $user);
336 $expected = array(strtolower($this->module).".date_entered >= '".$adjThisYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjThisYearLastDay['end']."'");
338 $this->form->populateFromArray($this->array);
339 $query = $this->form->generateSearchWhere($this->seed, $this->module);
341 $this->assertSame($expected, $query);
344 public function testSearchNextYearAdjustsForTimeZone() {
346 $user = $GLOBALS['current_user'];
348 $testDate = 'next_year';
350 $this->array['date_entered_advanced_range_choice'] = $testDate;
351 $this->array['range_date_entered_advanced'] = "[$testDate]";
353 $adjNextYearFirstDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 01, 01, date("Y")+1)), $user);
354 $adjNextYearLastDay = $timedate->getDayStartEndGMT(date('m/d/Y', mktime(0, 0, 0, 12, 31, date("Y")+1)), $user);
356 $expected = array(strtolower($this->module).".date_entered >= '".$adjNextYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjNextYearLastDay['end']."'");
358 $this->form->populateFromArray($this->array);
359 $query = $this->form->generateSearchWhere($this->seed, $this->module);
361 $this->assertSame($expected, $query);
364 public function testSearchDateIsBetweenAdjustsForTimeZone() {
366 $user = $GLOBALS['current_user'];
368 $testStartDate = '01/01/2011';
369 $testEndDate = '12/31/2011';
371 $this->array['date_entered_advanced_range_choice'] = 'between';
372 $this->array['start_range_date_entered_advanced'] = $testStartDate;
373 $this->array['end_range_date_entered_advanced'] = $testEndDate;
375 $adjStartDate = $timedate->getDayStartEndGMT($testStartDate, $user);
376 $adjEndDate = $timedate->getDayStartEndGMT($testEndDate, $user);
378 $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
380 $this->form->populateFromArray($this->array);
381 $query = $this->form->generateSearchWhere($this->seed, $this->module);
383 $this->assertSame($expected, $query);