Projet

Général

Profil

Paste
Télécharger (10,9 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / views / tests / handlers / views_handler_filter_numeric.test @ 8be7bf84

1
<?php
2

    
3
/**
4
 * @file
5
 * Definition of ViewsHandlerFilterNumericTest.
6
 */
7

    
8
/**
9
 * Tests the numeric filter handler.
10
 */
11
class ViewsHandlerFilterNumericTest extends ViewsSqlTest {
12
  var $column_map = array();
13

    
14
  public static function getInfo() {
15
    return array(
16
      'name' => 'Filter: Numeric',
17
      'description' => 'Tests the numeric filter handler',
18
      'group' => 'Views Handlers',
19
    );
20
  }
21

    
22
  function setUp() {
23
    parent::setUp();
24
    $this->column_map = array(
25
      'views_test_name' => 'name',
26
      'views_test_age' => 'age',
27
    );
28
  }
29

    
30
  function viewsData() {
31
    $data = parent::viewsData();
32
    $data['views_test']['age']['filter']['allow empty'] = TRUE;
33
    $data['views_test']['id']['filter']['allow empty'] = FALSE;
34

    
35
    return $data;
36
  }
37

    
38
  public function testFilterNumericSimple() {
39
    $view = $this->getBasicView();
40

    
41
    // Change the filtering.
42
    $view->display['default']->handler->override_option('filters', array(
43
      'age' => array(
44
        'id' => 'age',
45
        'table' => 'views_test',
46
        'field' => 'age',
47
        'relationship' => 'none',
48
        'operator' => '=',
49
        'value' => array('value' => 28),
50
      ),
51
    ));
52

    
53
    $this->executeView($view);
54
    $resultset = array(
55
      array(
56
        'name' => 'Ringo',
57
        'age' => 28,
58
      ),
59
    );
60
    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
61
  }
62

    
63
  public function testFilterNumericExposedGroupedSimple() {
64
    $filters = $this->getGroupedExposedFilters();
65
    $view = $this->getBasicPageView();
66

    
67
    // Filter: Age, Operator: =, Value: 28
68
    $filters['age']['group_info']['default_group'] = 1;
69
    $view->set_display('page_1');
70
    $view->display['page_1']->handler->override_option('filters', $filters);
71

    
72
    $this->executeView($view);
73
    $resultset = array(
74
      array(
75
        'name' => 'Ringo',
76
        'age' => 28,
77
      ),
78
    );
79
    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
80
  }
81

    
82
  public function testFilterNumericBetween() {
83
    $view = $this->getBasicView();
84

    
85
    // Change the filtering.
86
    $view->display['default']->handler->override_option('filters', array(
87
      'age' => array(
88
        'id' => 'age',
89
        'table' => 'views_test',
90
        'field' => 'age',
91
        'relationship' => 'none',
92
        'operator' => 'between',
93
        'value' => array(
94
          'min' => 26,
95
          'max' => 29,
96
        ),
97
      ),
98
    ));
99

    
100
    $this->executeView($view);
101
    $resultset = array(
102
      array(
103
        'name' => 'George',
104
        'age' => 27,
105
      ),
106
      array(
107
        'name' => 'Ringo',
108
        'age' => 28,
109
      ),
110
      array(
111
        'name' => 'Paul',
112
        'age' => 26,
113
      ),
114
    );
115
    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
116

    
117
    // test not between.
118
    $view->delete();
119
    $view = $this->getBasicView();
120

    
121
    // Change the filtering.
122
    $view->display['default']->handler->override_option('filters', array(
123
      'age' => array(
124
        'id' => 'age',
125
        'table' => 'views_test',
126
        'field' => 'age',
127
        'relationship' => 'none',
128
        'operator' => 'not between',
129
        'value' => array(
130
          'min' => 26,
131
          'max' => 29,
132
        ),
133
      ),
134
    ));
135

    
136
    $this->executeView($view);
137
    $resultset = array(
138
      array(
139
        'name' => 'John',
140
        'age' => 25,
141
      ),
142
      array(
143
        'name' => 'Paul',
144
        'age' => 26,
145
      ),
146
      array(
147
        'name' => 'Meredith',
148
        'age' => 30,
149
      ),
150
    );
151
    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
152
  }
153

    
154
  public function testFilterNumericExposedGroupedBetween() {
155
    $filters = $this->getGroupedExposedFilters();
156
    $view = $this->getBasicPageView();
157

    
158
    // Filter: Age, Operator: between, Value: 26 and 29
159
    $filters['age']['group_info']['default_group'] = 2;
160
    $view->set_display('page_1');
161
    $view->display['page_1']->handler->override_option('filters', $filters);
162

    
163
    $this->executeView($view);
164
    $resultset = array(
165
      array(
166
        'name' => 'George',
167
        'age' => 27,
168
      ),
169
      array(
170
        'name' => 'Ringo',
171
        'age' => 28,
172
      ),
173
      array(
174
        'name' => 'Paul',
175
        'age' => 26,
176
      ),
177
    );
178
    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
179
  }
180

    
181
  public function testFilterNumericExposedGroupedNotBetween() {
182
    $filters = $this->getGroupedExposedFilters();
183
    $view = $this->getBasicPageView();
184

    
185
    // Filter: Age, Operator: between, Value: 26 and 29
186
    $filters['age']['group_info']['default_group'] = 3;
187
    $view->set_display('page_1');
188
    $view->display['page_1']->handler->override_option('filters', $filters);
189

    
190
    $this->executeView($view);
191
    $resultset = array(
192
      array(
193
        'name' => 'John',
194
        'age' => 25,
195
      ),
196
      array(
197
        'name' => 'Paul',
198
        'age' => 26,
199
      ),
200
      array(
201
        'name' => 'Meredith',
202
        'age' => 30,
203
      ),
204
    );
205
    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
206
  }
207

    
208

    
209
  public function testFilterNumericEmpty() {
210
    $view = $this->getBasicView();
211

    
212
    // Change the filtering.
213
    $view->display['default']->handler->override_option('filters', array(
214
      'age' => array(
215
        'id' => 'age',
216
        'table' => 'views_test',
217
        'field' => 'age',
218
        'relationship' => 'none',
219
        'operator' => 'empty',
220
      ),
221
    ));
222

    
223
    $this->executeView($view);
224
    $resultset = array();
225
    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
226

    
227
    $view->delete();
228
    $view = $this->getBasicView();
229

    
230
    // Change the filtering.
231
    $view->display['default']->handler->override_option('filters', array(
232
      'age' => array(
233
        'id' => 'age',
234
        'table' => 'views_test',
235
        'field' => 'age',
236
        'relationship' => 'none',
237
        'operator' => 'not empty',
238
      ),
239
    ));
240

    
241
    $this->executeView($view);
242
    $resultset = array(
243
      array(
244
        'name' => 'John',
245
        'age' => 25,
246
      ),
247
      array(
248
        'name' => 'George',
249
        'age' => 27,
250
      ),
251
      array(
252
        'name' => 'Ringo',
253
        'age' => 28,
254
      ),
255
      array(
256
        'name' => 'Paul',
257
        'age' => 26,
258
      ),
259
      array(
260
        'name' => 'Meredith',
261
        'age' => 30,
262
      ),
263
    );
264
    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
265
  }
266

    
267

    
268
  public function testFilterNumericExposedGroupedEmpty() {
269
    $filters = $this->getGroupedExposedFilters();
270
    $view = $this->getBasicPageView();
271

    
272
    // Filter: Age, Operator: empty, Value.
273
    $filters['age']['group_info']['default_group'] = 4;
274
    $view->set_display('page_1');
275
    $view->display['page_1']->handler->override_option('filters', $filters);
276

    
277
    $this->executeView($view);
278
    $resultset = array();
279
    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
280
  }
281

    
282
  public function testFilterNumericExposedGroupedNotEmpty() {
283
    $filters = $this->getGroupedExposedFilters();
284
    $view = $this->getBasicPageView();
285

    
286
    // Filter: Age, Operator: empty, Value.
287
    $filters['age']['group_info']['default_group'] = 5;
288
    $view->set_display('page_1');
289
    $view->display['page_1']->handler->override_option('filters', $filters);
290

    
291
    $this->executeView($view);
292
    $resultset = array(
293
      array(
294
        'name' => 'John',
295
        'age' => 25,
296
      ),
297
      array(
298
        'name' => 'George',
299
        'age' => 27,
300
      ),
301
      array(
302
        'name' => 'Ringo',
303
        'age' => 28,
304
      ),
305
      array(
306
        'name' => 'Paul',
307
        'age' => 26,
308
      ),
309
      array(
310
        'name' => 'Meredith',
311
        'age' => 30,
312
      ),
313
    );
314
    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
315
  }
316

    
317
  /**
318
   * Tests the limit operators functionality.
319
   */
320
  public function testFilterNumericExposedLimitOperators() {
321
    $filters = $this->getGroupedExposedFilters();
322
    $view = $this->getBasicView();
323

    
324
    $available_operators = array('<', '>', 'between');
325

    
326
    $filters['age']['expose'] += array(
327
      'limit_operators' => TRUE,
328
      'available_operators' => drupal_map_assoc($available_operators),
329
    );
330

    
331
    $view->display['default']->handler->override_option('filters', $filters);
332

    
333

    
334
    $this->executeView($view);
335

    
336
    $form = array();
337
    $form_state = array();
338
    $view->filter['age']->operator_form($form, $form_state);
339

    
340
    $operator = $form['operator'];
341

    
342
    $this->assertTrue(in_array($operator['#default_value'], $available_operators), 'Default value operator found in list of available operators.');
343

    
344
    foreach ($available_operators as $available_operator) {
345
      $this->assertTrue($operator['#options'][$available_operator], format_string('@operator found in options', array('@operator' => $available_operator)));
346
    }
347
  }
348

    
349

    
350
  public function testAllowEmpty() {
351
    $view = $this->getBasicView();
352

    
353
    $view->display['default']->handler->override_option('filters', array(
354
      'id' => array(
355
        'id' => 'id',
356
        'table' => 'views_test',
357
        'field' => 'id',
358
        'relationship' => 'none',
359
      ),
360
      'age' => array(
361
        'id' => 'age',
362
        'table' => 'views_test',
363
        'field' => 'age',
364
        'relationship' => 'none',
365
      ),
366
    ));
367

    
368
    $view->set_display('default');
369
    $view->init_handlers();
370

    
371
    $id_operators = $view->filter['id']->operators();
372
    $age_operators = $view->filter['age']->operators();
373

    
374
    $this->assertFalse(isset($id_operators['empty']));
375
    $this->assertFalse(isset($id_operators['not empty']));
376
    $this->assertTrue(isset($age_operators['empty']));
377
    $this->assertTrue(isset($age_operators['not empty']));
378
  }
379

    
380
  protected function getGroupedExposedFilters() {
381
    $filters = array(
382
      'age' => array(
383
        'id' => 'age',
384
        'table' => 'views_test',
385
        'field' => 'age',
386
        'relationship' => 'none',
387
        'exposed' => TRUE,
388
        'expose' => array(
389
          'operator' => 'age_op',
390
          'label' => 'age',
391
          'identifier' => 'age',
392
        ),
393
        'is_grouped' => TRUE,
394
        'group_info' => array(
395
          'label' => 'age',
396
          'identifier' => 'age',
397
          'default_group' => 'All',
398
          'group_items' => array(
399
            1 => array(
400
              'title' => 'Age is 28',
401
              'operator' => '=',
402
              'value' => array('value' => 28),
403
            ),
404
            2 => array(
405
              'title' => 'Age is between 26 and 29',
406
              'operator' => 'between',
407
              'value' => array(
408
                'min' => 26,
409
                'max' => 29,
410
              ),
411
            ),
412
            3 => array(
413
              'title' => 'Age is not between 26 and 29',
414
              'operator' => 'not between',
415
              'value' => array(
416
                'min' => 26,
417
                'max' => 29,
418
              ),
419
            ),
420
            4 => array(
421
              'title' => 'Age is empty',
422
              'operator' => 'empty',
423
            ),
424
            5 => array(
425
              'title' => 'Age is not empty',
426
              'operator' => 'not empty',
427
            ),
428
          ),
429
        ),
430
      ),
431
    );
432
    return $filters;
433
  }
434

    
435
}