]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/include/SearchForm/Bug45966Test.php
Release 6.2.4
[Github/sugarcrm.git] / tests / include / SearchForm / Bug45966Test.php
1 <?php
2 /*********************************************************************************
3  * SugarCRM Community Edition is a customer relationship management program developed by
4  * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
5  * 
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.
12  * 
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
16  * details.
17  * 
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
21  * 02110-1301 USA.
22  * 
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.
25  * 
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.
29  * 
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  ********************************************************************************/
36
37
38
39 require_once 'modules/Notes/Note.php';
40 require_once 'include/SearchForm/SearchForm2.php';
41
42 /**
43  * @group Bug45966
44  */
45 class Bug45966 extends Sugar_PHPUnit_Framework_TestCase {
46
47     var $module = 'Notes';
48     var $action = 'index';
49     var $seed;
50     var $form;
51     var $array;
52
53     public function setUp() {
54         global $beanList;
55
56         require "modules/".$this->module."/metadata/searchdefs.php";
57         require "modules/".$this->module."/metadata/SearchFields.php";
58         require "modules/".$this->module."/metadata/listviewdefs.php";
59
60         $GLOBALS['current_user'] = SugarTestUserUtilities::createAnonymousUser();
61         $GLOBALS['current_user']->setPreference('timezone', 'EDT');
62
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);
66
67         $this->array = array(
68             'module'=>$this->module,
69             'action'=>$this->action,
70             'searchFormTab'=>'advanced_search',
71             'query'=>'true',
72             'date_entered_advanced_range_choice'=>'',
73             'range_date_entered_advanced' => '',
74             'start_range_date_entered_advanced' => '',
75             'end_range_date_entered_advanced' => '',
76         );
77     }
78
79     public function tearDown() {
80         unset($this->array);
81         unset($this->form);
82         unset($this->seed);
83         SugarTestUserUtilities::removeAllCreatedAnonymousUsers();
84         unset($GLOBALS['current_user']);
85         unset($listViewDefs);
86         unset($searchFields);
87         unset($searchdefs);
88     }
89
90     public function testSearchDateEqualsAdjustsForTimeZone() {
91         global $timedate;
92         $user = $GLOBALS['current_user'];
93
94         $testDate = '12/31/2011';
95
96         $this->array['date_entered_advanced_range_choice'] = '=';
97         $this->array['range_date_entered_advanced'] = $testDate;
98
99         $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
100
101         $expected = array(strtolower($this->module).".date_entered >= '".$adjDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjDate['end']."'");
102
103         $this->form->populateFromArray($this->array);
104         $query = $this->form->generateSearchWhere($this->seed, $this->module);
105
106         $this->assertSame($expected, $query);
107     }
108
109     public function testSearchNotOnDateAdjustsForTimeZone() {
110         global $timedate;
111         $user = $GLOBALS['current_user'];
112
113         $testDate = '12/31/2011';
114
115         $this->array['date_entered_advanced_range_choice'] = 'not_equal';
116         $this->array['range_date_entered_advanced'] = $testDate;
117
118         $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
119
120         $expected = array(strtolower($this->module).".date_entered < '".$adjDate['start']."' OR ". strtolower($this->module).".date_entered > '".$adjDate['end']."'");
121
122         $this->form->populateFromArray($this->array);
123         $query = $this->form->generateSearchWhere($this->seed, $this->module);
124
125         $this->assertSame($expected, $query);
126     }
127
128     public function testSearchAfterDateAdjustsForTimeZone() {
129         global $timedate;
130         $user = $GLOBALS['current_user'];
131
132         $testDate = '12/31/2011';
133
134         $this->array['date_entered_advanced_range_choice'] = 'greater_than';
135         $this->array['range_date_entered_advanced'] = $testDate;
136
137         $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
138         $expected = array(strtolower($this->module).".date_entered > '".$adjDate['end']."'");
139
140         $this->form->populateFromArray($this->array);
141         $query = $this->form->generateSearchWhere($this->seed, $this->module);
142
143         $this->assertSame($expected, $query);
144     }
145
146     public function testSearchBeforeDateAdjustsForTimeZone() {
147         global $timedate;
148         $user = $GLOBALS['current_user'];
149
150         $testDate = '01/01/2011';
151
152         $this->array['date_entered_advanced_range_choice'] = 'less_than';
153         $this->array['range_date_entered_advanced'] = $testDate;
154
155         $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
156         $expected = array(strtolower($this->module).".date_entered < '".$adjDate['start']."'");
157
158         $this->form->populateFromArray($this->array);
159         $query = $this->form->generateSearchWhere($this->seed, $this->module);
160
161         $this->assertSame($expected, $query);
162     }
163
164     public function testSearchLastSevenDaysAdjustsForTimeZone() {
165         global $timedate;
166         $user = $GLOBALS['current_user'];
167
168         $testDate = 'last_7_days';
169
170         $this->array['date_entered_advanced_range_choice'] = $testDate;
171         $this->array['range_date_entered_advanced'] = "[$testDate]";
172
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);
175
176         $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjToday['end']."'");
177
178         $this->form->populateFromArray($this->array);
179         $query = $this->form->generateSearchWhere($this->seed, $this->module);
180
181         $this->assertSame($expected, $query);
182     }
183
184     public function testSearchNextSevenDaysAdjustsForTimeZone() {
185         global $timedate;
186         $user = $GLOBALS['current_user'];
187
188         $testDate = 'next_7_days';
189
190         $this->array['date_entered_advanced_range_choice'] = $testDate;
191         $this->array['range_date_entered_advanced'] = "[$testDate]";
192
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);
195
196         $expected = array(strtolower($this->module).".date_entered >= '".$adjToday['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
197
198         $this->form->populateFromArray($this->array);
199         $query = $this->form->generateSearchWhere($this->seed, $this->module);
200
201         $this->assertSame($expected, $query);
202     }
203
204     public function testSearchLastThirtyDaysAdjustsForTimeZone() {
205         global $timedate;
206         $user = $GLOBALS['current_user'];
207
208         $testDate = 'last_30_days';
209
210         $this->array['date_entered_advanced_range_choice'] = $testDate;
211         $this->array['range_date_entered_advanced'] = "[$testDate]";
212
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);
215
216         $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjToday['end']."'");
217
218         $this->form->populateFromArray($this->array);
219         $query = $this->form->generateSearchWhere($this->seed, $this->module);
220
221         $this->assertSame($expected, $query);
222     }
223
224     public function testSearchNextThirtyDaysAdjustsForTimeZone() {
225         global $timedate;
226         $user = $GLOBALS['current_user'];
227
228         $testDate = 'next_30_days';
229
230         $this->array['date_entered_advanced_range_choice'] = $testDate;
231         $this->array['range_date_entered_advanced'] = "[$testDate]";
232
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);
235
236         $expected = array(strtolower($this->module).".date_entered >= '".$adjToday['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
237
238         $this->form->populateFromArray($this->array);
239         $query = $this->form->generateSearchWhere($this->seed, $this->module);
240
241         $this->assertSame($expected, $query);
242     }
243
244     public function testSearchLastMonthAdjustsForTimeZone() {
245         global $timedate;
246         $user = $GLOBALS['current_user'];
247
248         $testDate = 'last_month';
249
250         $this->array['date_entered_advanced_range_choice'] = $testDate;
251         $this->array['range_date_entered_advanced'] = "[$testDate]";
252
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);
255
256         $expected = array(strtolower($this->module).".date_entered >= '".$adjLastMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjLastMonthLastDay['end']."'");
257
258         $this->form->populateFromArray($this->array);
259         $query = $this->form->generateSearchWhere($this->seed, $this->module);
260
261         $this->assertSame($expected, $query);
262     }
263
264     public function testSearchThisMonthAdjustsForTimeZone() {
265         global $timedate;
266         $user = $GLOBALS['current_user'];
267
268         $testDate = 'this_month';
269
270         $this->array['date_entered_advanced_range_choice'] = $testDate;
271         $this->array['range_date_entered_advanced'] = "[$testDate]";
272
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);
275
276         $expected = array(strtolower($this->module).".date_entered >= '".$adjThisMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjThisMonthLastDay['end']."'");
277
278         $this->form->populateFromArray($this->array);
279         $query = $this->form->generateSearchWhere($this->seed, $this->module);
280
281         $this->assertSame($expected, $query);
282     }
283
284     public function testSearchNextMonthAdjustsForTimeZone() {
285         global $timedate;
286         $user = $GLOBALS['current_user'];
287
288         $testDate = 'next_month';
289
290         $this->array['date_entered_advanced_range_choice'] = $testDate;
291         $this->array['range_date_entered_advanced'] = "[$testDate]";
292
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);
295
296         $expected = array(strtolower($this->module).".date_entered >= '".$adjNextMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjNextMonthLastDay['end']."'");
297
298         $this->form->populateFromArray($this->array);
299         $query = $this->form->generateSearchWhere($this->seed, $this->module);
300
301         $this->assertSame($expected, $query);
302     }
303
304     public function testSearchLastYearAdjustsForTimeZone() {
305         global $timedate;
306         $user = $GLOBALS['current_user'];
307
308         $testDate = 'last_year';
309
310         $this->array['date_entered_advanced_range_choice'] = $testDate;
311         $this->array['range_date_entered_advanced'] = "[$testDate]";
312
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);
315
316         $expected = array(strtolower($this->module).".date_entered >= '".$adjLastYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjLastYearLastDay['end']."'");
317
318         $this->form->populateFromArray($this->array);
319         $query = $this->form->generateSearchWhere($this->seed, $this->module);
320
321         $this->assertSame($expected, $query);
322     }
323
324     public function testSearchThisYearAdjustsForTimeZone() {
325         global $timedate;
326         $user = $GLOBALS['current_user'];
327
328         $testDate = 'this_year';
329
330         $this->array['date_entered_advanced_range_choice'] = $testDate;
331         $this->array['range_date_entered_advanced'] = "[$testDate]";
332
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);
335
336         $expected = array(strtolower($this->module).".date_entered >= '".$adjThisYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjThisYearLastDay['end']."'");
337
338         $this->form->populateFromArray($this->array);
339         $query = $this->form->generateSearchWhere($this->seed, $this->module);
340
341         $this->assertSame($expected, $query);
342     }
343
344     public function testSearchNextYearAdjustsForTimeZone() {
345         global $timedate;
346         $user = $GLOBALS['current_user'];
347
348         $testDate = 'next_year';
349
350         $this->array['date_entered_advanced_range_choice'] = $testDate;
351         $this->array['range_date_entered_advanced'] = "[$testDate]";
352
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);
355
356         $expected = array(strtolower($this->module).".date_entered >= '".$adjNextYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjNextYearLastDay['end']."'");
357
358         $this->form->populateFromArray($this->array);
359         $query = $this->form->generateSearchWhere($this->seed, $this->module);
360
361         $this->assertSame($expected, $query);
362     }
363
364     public function testSearchDateIsBetweenAdjustsForTimeZone() {
365         global $timedate;
366         $user = $GLOBALS['current_user'];
367
368         $testStartDate = '01/01/2011';
369         $testEndDate = '12/31/2011';
370
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;
374
375         $adjStartDate = $timedate->getDayStartEndGMT($testStartDate, $user);
376         $adjEndDate = $timedate->getDayStartEndGMT($testEndDate, $user);
377
378         $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
379
380         $this->form->populateFromArray($this->array);
381         $query = $this->form->generateSearchWhere($this->seed, $this->module);
382
383         $this->assertSame($expected, $query);
384     }
385
386 }