views_handler_sort_date.test 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. /**
  3. * @file
  4. * Definition of ViewsHandlerSortDateTest.
  5. */
  6. /**
  7. * Tests for core views_handler_sort_date handler.
  8. */
  9. class ViewsHandlerSortDateTest extends ViewsSqlTest {
  10. public static function getInfo() {
  11. return array(
  12. 'name' => 'Sort: date',
  13. 'description' => 'Test the core views_handler_sort_date handler.',
  14. 'group' => 'Views Handlers',
  15. );
  16. }
  17. protected function expectedResultSet($granularity, $reverse = TRUE) {
  18. $expected = array();
  19. if (!$reverse) {
  20. switch ($granularity) {
  21. case 'second':
  22. $expected = array(
  23. array('name' => 'John'),
  24. array('name' => 'Paul'),
  25. array('name' => 'Meredith'),
  26. array('name' => 'Ringo'),
  27. array('name' => 'George'),
  28. );
  29. break;
  30. case 'minute':
  31. $expected = array(
  32. array('name' => 'John'),
  33. array('name' => 'Paul'),
  34. array('name' => 'Ringo'),
  35. array('name' => 'Meredith'),
  36. array('name' => 'George'),
  37. );
  38. break;
  39. case 'hour':
  40. $expected = array(
  41. array('name' => 'John'),
  42. array('name' => 'Ringo'),
  43. array('name' => 'Paul'),
  44. array('name' => 'Meredith'),
  45. array('name' => 'George'),
  46. );
  47. break;
  48. case 'day':
  49. $expected = array(
  50. array('name' => 'John'),
  51. array('name' => 'Ringo'),
  52. array('name' => 'Paul'),
  53. array('name' => 'Meredith'),
  54. array('name' => 'George'),
  55. );
  56. break;
  57. case 'month':
  58. $expected = array(
  59. array('name' => 'John'),
  60. array('name' => 'George'),
  61. array('name' => 'Ringo'),
  62. array('name' => 'Paul'),
  63. array('name' => 'Meredith'),
  64. );
  65. break;
  66. case 'year':
  67. $expected = array(
  68. array('name' => 'John'),
  69. array('name' => 'George'),
  70. array('name' => 'Ringo'),
  71. array('name' => 'Paul'),
  72. array('name' => 'Meredith'),
  73. );
  74. break;
  75. }
  76. }
  77. else {
  78. switch ($granularity) {
  79. case 'second':
  80. $expected = array(
  81. array('name' => 'George'),
  82. array('name' => 'Ringo'),
  83. array('name' => 'Meredith'),
  84. array('name' => 'Paul'),
  85. array('name' => 'John'),
  86. );
  87. break;
  88. case 'minute':
  89. $expected = array(
  90. array('name' => 'George'),
  91. array('name' => 'Ringo'),
  92. array('name' => 'Meredith'),
  93. array('name' => 'Paul'),
  94. array('name' => 'John'),
  95. );
  96. break;
  97. case 'hour':
  98. $expected = array(
  99. array('name' => 'George'),
  100. array('name' => 'Ringo'),
  101. array('name' => 'Paul'),
  102. array('name' => 'Meredith'),
  103. array('name' => 'John'),
  104. );
  105. break;
  106. case 'day':
  107. $expected = array(
  108. array('name' => 'George'),
  109. array('name' => 'John'),
  110. array('name' => 'Ringo'),
  111. array('name' => 'Paul'),
  112. array('name' => 'Meredith'),
  113. );
  114. break;
  115. case 'month':
  116. $expected = array(
  117. array('name' => 'John'),
  118. array('name' => 'George'),
  119. array('name' => 'Ringo'),
  120. array('name' => 'Paul'),
  121. array('name' => 'Meredith'),
  122. );
  123. break;
  124. case 'year':
  125. $expected = array(
  126. array('name' => 'John'),
  127. array('name' => 'George'),
  128. array('name' => 'Ringo'),
  129. array('name' => 'Paul'),
  130. array('name' => 'Meredith'),
  131. );
  132. break;
  133. }
  134. }
  135. return $expected;
  136. }
  137. /**
  138. * Tests numeric ordering of the result set.
  139. */
  140. public function testDateOrdering() {
  141. foreach (array('second', 'minute', 'hour', 'day', 'month', 'year') as $granularity) {
  142. foreach (array(FALSE, TRUE) as $reverse) {
  143. $view = $this->getBasicView();
  144. // Change the fields.
  145. $view->display['default']->handler->override_option('fields', array(
  146. 'name' => array(
  147. 'id' => 'name',
  148. 'table' => 'views_test',
  149. 'field' => 'name',
  150. 'relationship' => 'none',
  151. ),
  152. 'created' => array(
  153. 'id' => 'created',
  154. 'table' => 'views_test',
  155. 'field' => 'created',
  156. 'relationship' => 'none',
  157. ),
  158. ));
  159. // Change the ordering
  160. $view->display['default']->handler->override_option('sorts', array(
  161. 'created' => array(
  162. 'id' => 'created',
  163. 'table' => 'views_test',
  164. 'field' => 'created',
  165. 'relationship' => 'none',
  166. 'granularity' => $granularity,
  167. 'order' => $reverse ? 'DESC' : 'ASC',
  168. ),
  169. 'id' => array(
  170. 'id' => 'id',
  171. 'table' => 'views_test',
  172. 'field' => 'id',
  173. 'relationship' => 'none',
  174. 'order' => 'ASC',
  175. ),
  176. ));
  177. // Execute the view.
  178. $this->executeView($view);
  179. // Verify the result.
  180. $this->assertEqual(count($this->dataSet()), count($view->result), t('The number of returned rows match.'));
  181. $this->assertIdenticalResultset($view, $this->expectedResultSet($granularity, $reverse), array(
  182. 'views_test_name' => 'name',
  183. ), t('Result is returned correctly when ordering by granularity @granularity, @reverse.', array('@granularity' => $granularity, '@reverse' => $reverse ? t('reverse') : t('forward'))));
  184. $view->destroy();
  185. unset($view);
  186. }
  187. }
  188. }
  189. }