Projet

Général

Profil

Paste
Télécharger (8,21 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / views / tests / handlers / views_handler_filter_date.test @ 6f57d8c7

1
<?php
2

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

    
8
/**
9
 * Tests the core views_handler_filter_date handler.
10
 */
11
class ViewsHandlerFilterDateTest extends ViewsSqlTest {
12
  public static function getInfo() {
13
    return array(
14
      'name' => 'Filter: Date',
15
      'description' => 'Test the core views_handler_filter_date handler.',
16
      'group' => 'Views Handlers',
17
    );
18
  }
19

    
20
  function setUp() {
21
    parent::setUp();
22
    // Add some basic test nodes.
23
    $this->nodes = array();
24
    $this->nodes[] = $this->drupalCreateNode(array('created' => 100000));
25
    $this->nodes[] = $this->drupalCreateNode(array('created' => 200000));
26
    $this->nodes[] = $this->drupalCreateNode(array('created' => 300000));
27
    $this->nodes[] = $this->drupalCreateNode(array('created' => time() + 86400));
28

    
29
    $this->map = array(
30
      'nid' => 'nid',
31
    );
32
    $this->enableViewsUi();
33
  }
34

    
35
  /**
36
   * Test the general offset functionality.
37
   */
38
  function testOffset() {
39
    $view = $this->views_test_offset();
40
    // Test offset for simple operator.
41
    $view->set_display('default');
42
    $view->init_handlers();
43
    $view->filter['created']->operator = '>';
44
    $view->filter['created']->value['type'] = 'offset';
45
    $view->filter['created']->value['value'] = '+1 hour';
46
    $view->execute_display('default');
47
    $expected_result = array(
48
      array('nid' => $this->nodes[3]->nid),
49
    );
50
    $this->assertIdenticalResultset($view, $expected_result, $this->map);
51
    $view->destroy();
52

    
53
    // Test "first day of" type of relative dates for simple operator.
54
    $view->set_display('default');
55
    $view->init_handlers();
56
    $view->filter['created']->operator = '<';
57
    $view->filter['created']->value['type'] = 'offset';
58
    $view->filter['created']->value['value'] = 'last day of January 1970';
59
    $view->execute_display('default');
60
    $expected_result = array(
61
      array('nid' => $this->nodes[0]->nid),
62
      array('nid' => $this->nodes[1]->nid),
63
      array('nid' => $this->nodes[2]->nid),
64
    );
65
    $this->assertIdenticalResultset($view, $expected_result, $this->map);
66
    $view->destroy();
67

    
68
    // Test offset for between operator.
69
    $view->set_display('default');
70
    $view->init_handlers();
71
    $view->filter['created']->operator = 'between';
72
    $view->filter['created']->value['type'] = 'offset';
73
    $view->filter['created']->value['max'] = '+2 days';
74
    $view->filter['created']->value['min'] = '+1 hour';
75
    $view->execute_display('default');
76
    $expected_result = array(
77
      array('nid' => $this->nodes[3]->nid),
78
    );
79
    $this->assertIdenticalResultset($view, $expected_result, $this->map);
80
    $view->destroy();
81

    
82
    // Test "first day of" type of relative dates for between operator.
83
    $view->set_display('default');
84
    $view->init_handlers();
85
    $view->filter['created']->operator = 'between';
86
    $view->filter['created']->value['type'] = 'offset';
87
    $view->filter['created']->value['max'] = 'last day of January 1970';
88
    $view->filter['created']->value['min'] = 'first day of January 1970';
89
    $view->execute_display('default');
90
    $expected_result = array(
91
      array('nid' => $this->nodes[0]->nid),
92
      array('nid' => $this->nodes[1]->nid),
93
      array('nid' => $this->nodes[2]->nid),
94
    );
95
    $this->assertIdenticalResultset($view, $expected_result, $this->map);
96
    $view->destroy();
97
  }
98

    
99

    
100
  /**
101
   * Tests the filter operator between/not between.
102
   */
103
  function testBetween() {
104
    // Test between with min and max.
105
    $view = $this->views_test_between();
106
    $view->set_display('default');
107
    $view->init_handlers();
108
    $view->filter['created']->operator = 'between';
109
    $view->filter['created']->value['min'] = format_date(150000, 'custom', 'Y-m-d H:s');
110
    $view->filter['created']->value['max'] = format_date(250000, 'custom', 'Y-m-d H:s');
111
    $view->execute_display('default');
112
    $expected_result = array(
113
      array('nid' => $this->nodes[1]->nid),
114
    );
115
    $this->assertIdenticalResultset($view, $expected_result, $this->map);
116
    $view->destroy();
117

    
118
    // Test between with just max.
119
    $view = $this->views_test_between();
120
    $view->set_display('default');
121
    $view->init_handlers();
122
    $view->filter['created']->operator = 'between';
123
    $view->filter['created']->value['max'] = format_date(250000, 'custom', 'Y-m-d H:s');
124
    $view->execute_display('default');
125
    $expected_result = array(
126
      array('nid' => $this->nodes[0]->nid),
127
      array('nid' => $this->nodes[1]->nid),
128
    );
129
    $this->assertIdenticalResultset($view, $expected_result, $this->map);
130
    $view->destroy();
131

    
132
    // Test not between with min and max.
133
    $view = $this->views_test_between();
134
    $view->set_display('default');
135
    $view->init_handlers();
136
    $view->filter['created']->operator = 'not between';
137
    $view->filter['created']->value['min'] = format_date(150000, 'custom', 'Y-m-d H:s');
138
    $view->filter['created']->value['max'] = format_date(250000, 'custom', 'Y-m-d H:s');
139
    $view->execute_display('default');
140
    $expected_result = array(
141
      array('nid' => $this->nodes[0]->nid),
142
      array('nid' => $this->nodes[2]->nid),
143
      array('nid' => $this->nodes[3]->nid),
144
    );
145
    $this->assertIdenticalResultset($view, $expected_result, $this->map);
146
    $view->destroy();
147

    
148
    // Test not between with just max.
149
    $view = $this->views_test_between();
150
    $view->set_display('default');
151
    $view->init_handlers();
152
    $view->filter['created']->operator = 'not between';
153
    $view->filter['created']->value['max'] = format_date(150000, 'custom', 'Y-m-d H:s');
154
    $view->execute_display('default');
155
    $expected_result = array(
156
      array('nid' => $this->nodes[1]->nid),
157
      array('nid' => $this->nodes[2]->nid),
158
      array('nid' => $this->nodes[3]->nid),
159
    );
160
    $this->assertIdenticalResultset($view, $expected_result, $this->map);
161
    $view->destroy();
162
  }
163

    
164
  /**
165
   * Make sure the validation callbacks works.
166
   */
167
  function testUiValidation() {
168
    $view = $this->views_test_between();
169
    $view->save();
170

    
171
    $admin_user =   $this->drupalCreateUser(array('administer views', 'administer site configuration'));
172
    $this->drupalLogin($admin_user);
173
    menu_rebuild();
174
    $this->drupalGet('admin/structure/views/view/test_filter_date_between/edit');
175
    $this->drupalGet('admin/structure/views/nojs/config-item/test_filter_date_between/default/filter/created');
176

    
177
    $edit = array();
178
    // Generate a definitive wrong value, which should be checked by validation.
179
    $edit['options[value][value]'] = $this->randomString() . '-------';
180
    $this->drupalPost(NULL, $edit, t('Apply'));
181
    $this->assertText(t('Invalid date format.'), 'Make sure that validation is runned and the invalidate date format is identified.');
182
  }
183

    
184
  function views_test_between() {
185
    $view = new view;
186
    $view->name = 'test_filter_date_between';
187
    $view->description = '';
188
    $view->tag = '';
189
    $view->base_table = 'node';
190
    $view->human_name = '';
191
    $view->core = 0;
192
    $view->api_version = '3.0';
193
    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
194

    
195
    /* Display: Master */
196
    $handler = $view->new_display('default', 'Master', 'default');
197
    $handler->display->display_options['access']['type'] = 'none';
198
    $handler->display->display_options['cache']['type'] = 'none';
199
    $handler->display->display_options['query']['type'] = 'views_query';
200
    $handler->display->display_options['query']['options']['query_comment'] = FALSE;
201
    $handler->display->display_options['exposed_form']['type'] = 'basic';
202
    $handler->display->display_options['pager']['type'] = 'full';
203
    $handler->display->display_options['style_plugin'] = 'default';
204
    $handler->display->display_options['row_plugin'] = 'fields';
205
    /* Field: Content: Nid */
206
    $handler->display->display_options['fields']['nid']['id'] = 'nid';
207
    $handler->display->display_options['fields']['nid']['table'] = 'node';
208
    $handler->display->display_options['fields']['nid']['field'] = 'nid';
209
    /* Filter criterion: Content: Post date */
210
    $handler->display->display_options['filters']['created']['id'] = 'created';
211
    $handler->display->display_options['filters']['created']['table'] = 'node';
212
    $handler->display->display_options['filters']['created']['field'] = 'created';
213

    
214
    return $view;
215
  }
216

    
217
  function views_test_offset() {
218
    $view = $this->views_test_between();
219
    return $view;
220
  }
221
}