views_handler_filter_date.test 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <?php
  2. /**
  3. * @file
  4. * Definition of ViewsHandlerFilterDateTest.
  5. */
  6. /**
  7. * Tests the core views_handler_filter_date handler.
  8. */
  9. class ViewsHandlerFilterDateTest extends ViewsSqlTest {
  10. public static function getInfo() {
  11. return array(
  12. 'name' => 'Filter: Date',
  13. 'description' => 'Test the core views_handler_filter_date handler.',
  14. 'group' => 'Views Handlers',
  15. );
  16. }
  17. function setUp() {
  18. parent::setUp();
  19. // Add some basic test nodes.
  20. $this->nodes = array();
  21. $this->nodes[] = $this->drupalCreateNode(array('created' => 100000));
  22. $this->nodes[] = $this->drupalCreateNode(array('created' => 200000));
  23. $this->nodes[] = $this->drupalCreateNode(array('created' => 300000));
  24. $this->nodes[] = $this->drupalCreateNode(array('created' => time() + 86400));
  25. $this->map = array(
  26. 'nid' => 'nid',
  27. );
  28. $this->enableViewsUi();
  29. }
  30. /**
  31. * Test the general offset functionality.
  32. */
  33. function testOffset() {
  34. $view = $this->views_test_offset();
  35. // Test offset for simple operator.
  36. $view->set_display('default');
  37. $view->init_handlers();
  38. $view->filter['created']->operator = '>';
  39. $view->filter['created']->value['type'] = 'offset';
  40. $view->filter['created']->value['value'] = '+1 hour';
  41. $view->execute_display('default');
  42. $expected_result = array(
  43. array('nid' => $this->nodes[3]->nid),
  44. );
  45. $this->assertIdenticalResultset($view, $expected_result, $this->map);
  46. $view->destroy();
  47. // Test "first day of" type of relative dates for simple operator.
  48. $view->set_display('default');
  49. $view->init_handlers();
  50. $view->filter['created']->operator = '<';
  51. $view->filter['created']->value['type'] = 'offset';
  52. $view->filter['created']->value['value'] = 'last day of January 1970';
  53. $view->execute_display('default');
  54. $expected_result = array(
  55. array('nid' => $this->nodes[0]->nid),
  56. array('nid' => $this->nodes[1]->nid),
  57. array('nid' => $this->nodes[2]->nid),
  58. );
  59. $this->assertIdenticalResultset($view, $expected_result, $this->map);
  60. $view->destroy();
  61. // Test offset for between operator.
  62. $view->set_display('default');
  63. $view->init_handlers();
  64. $view->filter['created']->operator = 'between';
  65. $view->filter['created']->value['type'] = 'offset';
  66. $view->filter['created']->value['max'] = '+2 days';
  67. $view->filter['created']->value['min'] = '+1 hour';
  68. $view->execute_display('default');
  69. $expected_result = array(
  70. array('nid' => $this->nodes[3]->nid),
  71. );
  72. $this->assertIdenticalResultset($view, $expected_result, $this->map);
  73. $view->destroy();
  74. // Test "first day of" type of relative dates for between operator.
  75. $view->set_display('default');
  76. $view->init_handlers();
  77. $view->filter['created']->operator = 'between';
  78. $view->filter['created']->value['type'] = 'offset';
  79. $view->filter['created']->value['max'] = 'last day of January 1970';
  80. $view->filter['created']->value['min'] = 'first day of January 1970';
  81. $view->execute_display('default');
  82. $expected_result = array(
  83. array('nid' => $this->nodes[0]->nid),
  84. array('nid' => $this->nodes[1]->nid),
  85. array('nid' => $this->nodes[2]->nid),
  86. );
  87. $this->assertIdenticalResultset($view, $expected_result, $this->map);
  88. $view->destroy();
  89. }
  90. /**
  91. * Tests the filter operator between/not between.
  92. */
  93. function testBetween() {
  94. // Test between with min and max.
  95. $view = $this->views_test_between();
  96. $view->set_display('default');
  97. $view->init_handlers();
  98. $view->filter['created']->operator = 'between';
  99. $view->filter['created']->value['min'] = format_date(150000, 'custom', 'Y-m-d H:s');
  100. $view->filter['created']->value['max'] = format_date(250000, 'custom', 'Y-m-d H:s');
  101. $view->execute_display('default');
  102. $expected_result = array(
  103. array('nid' => $this->nodes[1]->nid),
  104. );
  105. $this->assertIdenticalResultset($view, $expected_result, $this->map);
  106. $view->destroy();
  107. // Test between with just max.
  108. $view = $this->views_test_between();
  109. $view->set_display('default');
  110. $view->init_handlers();
  111. $view->filter['created']->operator = 'between';
  112. $view->filter['created']->value['max'] = format_date(250000, 'custom', 'Y-m-d H:s');
  113. $view->execute_display('default');
  114. $expected_result = array(
  115. array('nid' => $this->nodes[0]->nid),
  116. array('nid' => $this->nodes[1]->nid),
  117. );
  118. $this->assertIdenticalResultset($view, $expected_result, $this->map);
  119. $view->destroy();
  120. // Test not between with min and max.
  121. $view = $this->views_test_between();
  122. $view->set_display('default');
  123. $view->init_handlers();
  124. $view->filter['created']->operator = 'not between';
  125. $view->filter['created']->value['min'] = format_date(150000, 'custom', 'Y-m-d H:s');
  126. $view->filter['created']->value['max'] = format_date(250000, 'custom', 'Y-m-d H:s');
  127. $view->execute_display('default');
  128. $expected_result = array(
  129. array('nid' => $this->nodes[0]->nid),
  130. array('nid' => $this->nodes[2]->nid),
  131. array('nid' => $this->nodes[3]->nid),
  132. );
  133. $this->assertIdenticalResultset($view, $expected_result, $this->map);
  134. $view->destroy();
  135. // Test not between with just max.
  136. $view = $this->views_test_between();
  137. $view->set_display('default');
  138. $view->init_handlers();
  139. $view->filter['created']->operator = 'not between';
  140. $view->filter['created']->value['max'] = format_date(150000, 'custom', 'Y-m-d H:s');
  141. $view->execute_display('default');
  142. $expected_result = array(
  143. array('nid' => $this->nodes[1]->nid),
  144. array('nid' => $this->nodes[2]->nid),
  145. array('nid' => $this->nodes[3]->nid),
  146. );
  147. $this->assertIdenticalResultset($view, $expected_result, $this->map);
  148. $view->destroy();
  149. }
  150. /**
  151. * Make sure the validation callbacks works.
  152. */
  153. function testUiValidation() {
  154. $view = $this->views_test_between();
  155. $view->save();
  156. $admin_user = $this->drupalCreateUser(array('administer views', 'administer site configuration'));
  157. $this->drupalLogin($admin_user);
  158. menu_rebuild();
  159. $this->drupalGet('admin/structure/views/view/test_filter_date_between/edit');
  160. $this->drupalGet('admin/structure/views/nojs/config-item/test_filter_date_between/default/filter/created');
  161. $edit = array();
  162. // Generate a definitive wrong value, which should be checked by validation.
  163. $edit['options[value][value]'] = $this->randomString() . '-------';
  164. $this->drupalPost(NULL, $edit, t('Apply'));
  165. $this->assertText(t('Invalid date format.'), 'Make sure that validation is runned and the invalidate date format is identified.');
  166. }
  167. function views_test_between() {
  168. $view = new view;
  169. $view->name = 'test_filter_date_between';
  170. $view->description = '';
  171. $view->tag = '';
  172. $view->base_table = 'node';
  173. $view->human_name = '';
  174. $view->core = 0;
  175. $view->api_version = '3.0';
  176. $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
  177. /* Display: Master */
  178. $handler = $view->new_display('default', 'Master', 'default');
  179. $handler->display->display_options['access']['type'] = 'none';
  180. $handler->display->display_options['cache']['type'] = 'none';
  181. $handler->display->display_options['query']['type'] = 'views_query';
  182. $handler->display->display_options['query']['options']['query_comment'] = FALSE;
  183. $handler->display->display_options['exposed_form']['type'] = 'basic';
  184. $handler->display->display_options['pager']['type'] = 'full';
  185. $handler->display->display_options['style_plugin'] = 'default';
  186. $handler->display->display_options['row_plugin'] = 'fields';
  187. /* Field: Content: Nid */
  188. $handler->display->display_options['fields']['nid']['id'] = 'nid';
  189. $handler->display->display_options['fields']['nid']['table'] = 'node';
  190. $handler->display->display_options['fields']['nid']['field'] = 'nid';
  191. /* Filter criterion: Content: Post date */
  192. $handler->display->display_options['filters']['created']['id'] = 'created';
  193. $handler->display->display_options['filters']['created']['table'] = 'node';
  194. $handler->display->display_options['filters']['created']['field'] = 'created';
  195. return $view;
  196. }
  197. function views_test_offset() {
  198. $view = $this->views_test_between();
  199. return $view;
  200. }
  201. }