]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/include/SearchForm/Bug45966Test.php
Release 6.3.1
[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         require('include/modules.php');
55             $GLOBALS['beanList'] = $beanList;
56             $GLOBALS['beanFiles'] = $beanFiles;
57
58         require "modules/".$this->module."/metadata/searchdefs.php";
59         require "modules/".$this->module."/metadata/SearchFields.php";
60         require "modules/".$this->module."/metadata/listviewdefs.php";
61
62         $GLOBALS['current_user'] = SugarTestUserUtilities::createAnonymousUser();
63         $GLOBALS['current_user']->setPreference('timezone', 'EDT');
64
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);
68
69         $this->array = array(
70             'module'=>$this->module,
71             'action'=>$this->action,
72             'searchFormTab'=>'advanced_search',
73             'query'=>'true',
74             'date_entered_advanced_range_choice'=>'',
75             'range_date_entered_advanced' => '',
76             'start_range_date_entered_advanced' => '',
77             'end_range_date_entered_advanced' => '',
78         );
79     }
80
81     public function tearDown() {
82         unset($this->array);
83         unset($this->form);
84         unset($this->seed);
85         SugarTestUserUtilities::removeAllCreatedAnonymousUsers();
86         unset($GLOBALS['current_user']);
87         unset($listViewDefs);
88         unset($searchFields);
89         unset($searchdefs);
90     }
91
92     public function testSearchDateEqualsAdjustsForTimeZone() {
93         global $timedate;
94         $user = $GLOBALS['current_user'];
95
96         $testDate = '12/31/2011';
97
98         $this->array['date_entered_advanced_range_choice'] = '=';
99         $this->array['range_date_entered_advanced'] = $testDate;
100
101         $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
102
103         $expected = array(strtolower($this->module).".date_entered >= '".$adjDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjDate['end']."'");
104
105         $this->form->populateFromArray($this->array);
106         $query = $this->form->generateSearchWhere($this->seed, $this->module);
107
108         $this->assertSame($expected, $query);
109     }
110
111     public function testSearchNotOnDateAdjustsForTimeZone() {
112         global $timedate;
113         $user = $GLOBALS['current_user'];
114
115         $testDate = '12/31/2011';
116
117         $this->array['date_entered_advanced_range_choice'] = 'not_equal';
118         $this->array['range_date_entered_advanced'] = $testDate;
119
120         $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
121
122         $expected = array(strtolower($this->module).".date_entered < '".$adjDate['start']."' OR ". strtolower($this->module).".date_entered > '".$adjDate['end']."'");
123
124         $this->form->populateFromArray($this->array);
125         $query = $this->form->generateSearchWhere($this->seed, $this->module);
126
127         $this->assertSame($expected, $query);
128     }
129
130     public function testSearchAfterDateAdjustsForTimeZone() {
131         global $timedate;
132         $user = $GLOBALS['current_user'];
133
134         $testDate = '12/31/2011';
135
136         $this->array['date_entered_advanced_range_choice'] = 'greater_than';
137         $this->array['range_date_entered_advanced'] = $testDate;
138
139         $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
140         $expected = array(strtolower($this->module).".date_entered > '".$adjDate['end']."'");
141
142         $this->form->populateFromArray($this->array);
143         $query = $this->form->generateSearchWhere($this->seed, $this->module);
144
145         $this->assertSame($expected, $query);
146     }
147
148     public function testSearchBeforeDateAdjustsForTimeZone() {
149         global $timedate;
150         $user = $GLOBALS['current_user'];
151
152         $testDate = '01/01/2011';
153
154         $this->array['date_entered_advanced_range_choice'] = 'less_than';
155         $this->array['range_date_entered_advanced'] = $testDate;
156
157         $adjDate = $timedate->getDayStartEndGMT($testDate, $user);
158         $expected = array(strtolower($this->module).".date_entered < '".$adjDate['start']."'");
159
160         $this->form->populateFromArray($this->array);
161         $query = $this->form->generateSearchWhere($this->seed, $this->module);
162
163         $this->assertSame($expected, $query);
164     }
165
166     public function testSearchLastSevenDaysAdjustsForTimeZone() {
167         global $timedate;
168         $user = $GLOBALS['current_user'];
169
170         $testDate = 'last_7_days';
171
172         $this->array['date_entered_advanced_range_choice'] = $testDate;
173         $this->array['range_date_entered_advanced'] = "[$testDate]";
174
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);
177
178         $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjToday['end']."'");
179
180         $this->form->populateFromArray($this->array);
181         $query = $this->form->generateSearchWhere($this->seed, $this->module);
182
183         $this->assertSame($expected, $query);
184     }
185
186     public function testSearchNextSevenDaysAdjustsForTimeZone() {
187         global $timedate;
188         $user = $GLOBALS['current_user'];
189
190         $testDate = 'next_7_days';
191
192         $this->array['date_entered_advanced_range_choice'] = $testDate;
193         $this->array['range_date_entered_advanced'] = "[$testDate]";
194
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);
197
198         $expected = array(strtolower($this->module).".date_entered >= '".$adjToday['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
199
200         $this->form->populateFromArray($this->array);
201         $query = $this->form->generateSearchWhere($this->seed, $this->module);
202
203         $this->assertSame($expected, $query);
204     }
205
206     public function testSearchLastThirtyDaysAdjustsForTimeZone() {
207         global $timedate;
208         $user = $GLOBALS['current_user'];
209
210         $testDate = 'last_30_days';
211
212         $this->array['date_entered_advanced_range_choice'] = $testDate;
213         $this->array['range_date_entered_advanced'] = "[$testDate]";
214
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);
217
218         $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjToday['end']."'");
219
220         $this->form->populateFromArray($this->array);
221         $query = $this->form->generateSearchWhere($this->seed, $this->module);
222
223         $this->assertSame($expected, $query);
224     }
225
226     public function testSearchNextThirtyDaysAdjustsForTimeZone() {
227         global $timedate;
228         $user = $GLOBALS['current_user'];
229
230         $testDate = 'next_30_days';
231
232         $this->array['date_entered_advanced_range_choice'] = $testDate;
233         $this->array['range_date_entered_advanced'] = "[$testDate]";
234
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);
237
238         $expected = array(strtolower($this->module).".date_entered >= '".$adjToday['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
239
240         $this->form->populateFromArray($this->array);
241         $query = $this->form->generateSearchWhere($this->seed, $this->module);
242
243         $this->assertSame($expected, $query);
244     }
245
246     public function testSearchLastMonthAdjustsForTimeZone() {
247         global $timedate;
248         $user = $GLOBALS['current_user'];
249
250         $testDate = 'last_month';
251
252         $this->array['date_entered_advanced_range_choice'] = $testDate;
253         $this->array['range_date_entered_advanced'] = "[$testDate]";
254
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);
257
258         $expected = array(strtolower($this->module).".date_entered >= '".$adjLastMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjLastMonthLastDay['end']."'");
259
260         $this->form->populateFromArray($this->array);
261         $query = $this->form->generateSearchWhere($this->seed, $this->module);
262
263         $this->assertSame($expected, $query);
264     }
265
266     public function testSearchThisMonthAdjustsForTimeZone() {
267         global $timedate;
268         $user = $GLOBALS['current_user'];
269
270         $testDate = 'this_month';
271
272         $this->array['date_entered_advanced_range_choice'] = $testDate;
273         $this->array['range_date_entered_advanced'] = "[$testDate]";
274
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);
277
278         $expected = array(strtolower($this->module).".date_entered >= '".$adjThisMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjThisMonthLastDay['end']."'");
279
280         $this->form->populateFromArray($this->array);
281         $query = $this->form->generateSearchWhere($this->seed, $this->module);
282
283         $this->assertSame($expected, $query);
284     }
285
286     public function testSearchNextMonthAdjustsForTimeZone() {
287         global $timedate;
288         $user = $GLOBALS['current_user'];
289
290         $testDate = 'next_month';
291
292         $this->array['date_entered_advanced_range_choice'] = $testDate;
293         $this->array['range_date_entered_advanced'] = "[$testDate]";
294
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);
297
298         $expected = array(strtolower($this->module).".date_entered >= '".$adjNextMonthFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjNextMonthLastDay['end']."'");
299
300         $this->form->populateFromArray($this->array);
301         $query = $this->form->generateSearchWhere($this->seed, $this->module);
302
303         $this->assertSame($expected, $query);
304     }
305
306     public function testSearchLastYearAdjustsForTimeZone() {
307         global $timedate;
308         $user = $GLOBALS['current_user'];
309
310         $testDate = 'last_year';
311
312         $this->array['date_entered_advanced_range_choice'] = $testDate;
313         $this->array['range_date_entered_advanced'] = "[$testDate]";
314
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);
317
318         $expected = array(strtolower($this->module).".date_entered >= '".$adjLastYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjLastYearLastDay['end']."'");
319
320         $this->form->populateFromArray($this->array);
321         $query = $this->form->generateSearchWhere($this->seed, $this->module);
322
323         $this->assertSame($expected, $query);
324     }
325
326     public function testSearchThisYearAdjustsForTimeZone() {
327         global $timedate;
328         $user = $GLOBALS['current_user'];
329
330         $testDate = 'this_year';
331
332         $this->array['date_entered_advanced_range_choice'] = $testDate;
333         $this->array['range_date_entered_advanced'] = "[$testDate]";
334
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);
337
338         $expected = array(strtolower($this->module).".date_entered >= '".$adjThisYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjThisYearLastDay['end']."'");
339
340         $this->form->populateFromArray($this->array);
341         $query = $this->form->generateSearchWhere($this->seed, $this->module);
342
343         $this->assertSame($expected, $query);
344     }
345
346     public function testSearchNextYearAdjustsForTimeZone() {
347         global $timedate;
348         $user = $GLOBALS['current_user'];
349
350         $testDate = 'next_year';
351
352         $this->array['date_entered_advanced_range_choice'] = $testDate;
353         $this->array['range_date_entered_advanced'] = "[$testDate]";
354
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);
357
358         $expected = array(strtolower($this->module).".date_entered >= '".$adjNextYearFirstDay['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjNextYearLastDay['end']."'");
359
360         $this->form->populateFromArray($this->array);
361         $query = $this->form->generateSearchWhere($this->seed, $this->module);
362
363         $this->assertSame($expected, $query);
364     }
365
366     public function testSearchDateIsBetweenAdjustsForTimeZone() {
367         global $timedate;
368         $user = $GLOBALS['current_user'];
369
370         $testStartDate = '01/01/2011';
371         $testEndDate = '12/31/2011';
372
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;
376
377         $adjStartDate = $timedate->getDayStartEndGMT($testStartDate, $user);
378         $adjEndDate = $timedate->getDayStartEndGMT($testEndDate, $user);
379
380         $expected = array(strtolower($this->module).".date_entered >= '".$adjStartDate['start']."' AND ". strtolower($this->module).".date_entered <= '".$adjEndDate['end']."'");
381
382         $this->form->populateFromArray($this->array);
383         $query = $this->form->generateSearchWhere($this->seed, $this->module);
384
385         $this->assertSame($expected, $query);
386     }
387
388 }