views_view.test 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <?php
  2. /**
  3. * @file
  4. * Definition of ViewsViewTest.
  5. */
  6. /**
  7. * Views class tests.
  8. *
  9. * @codingStandardsIgnoreStart
  10. */
  11. class ViewsViewTest extends ViewsSqlTest {
  12. // @codingStandardsIgnoreEnd
  13. public static function getInfo() {
  14. return array(
  15. 'name' => 'Test the view class',
  16. 'description' => 'Tests some functionality of the view class',
  17. 'group' => 'Views',
  18. );
  19. }
  20. /**
  21. * Tests the deconstructor to be sure that every kind of heavy objects are removed.
  22. */
  23. function testDestroy() {
  24. $view = $this->view_test_destroy();
  25. $view->preview();
  26. $view->destroy();
  27. $this->assertViewDestroy($view);
  28. // Manipulate the display variable to test a previous bug.
  29. $view = $this->view_test_destroy();
  30. $view->preview();
  31. $view->destroy();
  32. $this->assertViewDestroy($view);
  33. }
  34. function assertViewDestroy($view) {
  35. $this->assertFalse(isset($view->display['default']->handler), 'Make sure all displays are destroyed.');
  36. $this->assertFalse(isset($view->display['attachment_1']->handler), 'Make sure all displays are destroyed.');
  37. $this->assertFalse(isset($view->filter), 'Make sure all handlers are destroyed');
  38. $this->assertFalse(isset($view->field), 'Make sure all handlers are destroyed');
  39. $this->assertFalse(isset($view->argument), 'Make sure all handlers are destroyed');
  40. $this->assertFalse(isset($view->relationship), 'Make sure all handlers are destroyed');
  41. $this->assertFalse(isset($view->sort), 'Make sure all handlers are destroyed');
  42. $this->assertFalse(isset($view->area), 'Make sure all handlers are destroyed');
  43. $keys = array('current_display', 'display_handler', 'field', 'argument', 'filter', 'sort', 'relationship', 'header', 'footer', 'empty', 'query', 'result', 'inited', 'style_plugin', 'plugin_name', 'exposed_data', 'exposed_input', 'many_to_one_tables');
  44. foreach ($keys as $key) {
  45. $this->assertFalse(isset($view->{$key}), $key);
  46. }
  47. $this->assertEqual($view->built, FALSE);
  48. $this->assertEqual($view->executed, FALSE);
  49. $this->assertEqual($view->build_info, array());
  50. $this->assertEqual($view->attachment_before, '');
  51. $this->assertEqual($view->attachment_after, '');
  52. }
  53. function testDelete() {
  54. // Delete a database view
  55. $view = $this->view_test_delete();
  56. $view->save();
  57. $view = views_get_view($view->name);
  58. $view->delete();
  59. $view = views_get_view($view->name);
  60. $this->assertNotNull($view, 'Make sure that the old view is still in the static cache.');
  61. $view = views_get_view($view->name, TRUE);
  62. $this->assertNull($view, "Make sure that the old view gets cleared by the reset parameter.");
  63. }
  64. function testValidate() {
  65. // Test a view with multiple displays.
  66. // Validating a view shouldn't change the active display.
  67. // @todo: Create an extra validation view.
  68. $view = $this->view_test_destroy();
  69. $view->set_display('page_1');
  70. $view->validate();
  71. $this->assertEqual('page_1', $view->current_display, "The display should be constant while validating");
  72. // @todo: Write real tests for the validation.
  73. // In general the following things could be tested:
  74. // - Deleted displays shouldn't be validated
  75. // - Multiple displays are validating and the errors are merged together.
  76. }
  77. /**
  78. * This view provides some filters, fields, arguments, relationships, sorts, areas and attachments.
  79. */
  80. function view_test_destroy() {
  81. $view = new view;
  82. $view->name = 'test_destroy';
  83. $view->description = '';
  84. $view->tag = '';
  85. $view->base_table = 'node';
  86. $view->human_name = '';
  87. $view->api_version = '3.0-alpha1';
  88. $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
  89. /* Display: Master */
  90. $handler = $view->new_display('default', 'Master', 'default');
  91. $handler->display->display_options['access']['type'] = 'none';
  92. $handler->display->display_options['cache']['type'] = 'none';
  93. $handler->display->display_options['query']['type'] = 'views_query';
  94. $handler->display->display_options['exposed_form']['type'] = 'basic';
  95. $handler->display->display_options['pager']['type'] = 'full';
  96. $handler->display->display_options['style_plugin'] = 'default';
  97. $handler->display->display_options['row_plugin'] = 'fields';
  98. /* Header: Global: Text area */
  99. $handler->display->display_options['header']['area']['id'] = 'area';
  100. $handler->display->display_options['header']['area']['table'] = 'views';
  101. $handler->display->display_options['header']['area']['field'] = 'area';
  102. $handler->display->display_options['header']['area']['empty'] = FALSE;
  103. /* Header: Global: Text area */
  104. $handler->display->display_options['header']['area_1']['id'] = 'area_1';
  105. $handler->display->display_options['header']['area_1']['table'] = 'views';
  106. $handler->display->display_options['header']['area_1']['field'] = 'area';
  107. $handler->display->display_options['header']['area_1']['empty'] = FALSE;
  108. /* Footer: Global: Text area */
  109. $handler->display->display_options['footer']['area']['id'] = 'area';
  110. $handler->display->display_options['footer']['area']['table'] = 'views';
  111. $handler->display->display_options['footer']['area']['field'] = 'area';
  112. $handler->display->display_options['footer']['area']['empty'] = FALSE;
  113. /* Footer: Global: Text area */
  114. $handler->display->display_options['footer']['area_1']['id'] = 'area_1';
  115. $handler->display->display_options['footer']['area_1']['table'] = 'views';
  116. $handler->display->display_options['footer']['area_1']['field'] = 'area';
  117. $handler->display->display_options['footer']['area_1']['empty'] = FALSE;
  118. /* Empty text: Global: Text area */
  119. $handler->display->display_options['empty']['area']['id'] = 'area';
  120. $handler->display->display_options['empty']['area']['table'] = 'views';
  121. $handler->display->display_options['empty']['area']['field'] = 'area';
  122. $handler->display->display_options['empty']['area']['empty'] = FALSE;
  123. /* Empty text: Global: Text area */
  124. $handler->display->display_options['empty']['area_1']['id'] = 'area_1';
  125. $handler->display->display_options['empty']['area_1']['table'] = 'views';
  126. $handler->display->display_options['empty']['area_1']['field'] = 'area';
  127. $handler->display->display_options['empty']['area_1']['empty'] = FALSE;
  128. /* Relationship: Comment: Node */
  129. $handler->display->display_options['relationships']['nid']['id'] = 'nid';
  130. $handler->display->display_options['relationships']['nid']['table'] = 'comments';
  131. $handler->display->display_options['relationships']['nid']['field'] = 'nid';
  132. /* Relationship: Comment: Parent comment */
  133. $handler->display->display_options['relationships']['pid']['id'] = 'pid';
  134. $handler->display->display_options['relationships']['pid']['table'] = 'comments';
  135. $handler->display->display_options['relationships']['pid']['field'] = 'pid';
  136. /* Relationship: Comment: User */
  137. $handler->display->display_options['relationships']['uid']['id'] = 'uid';
  138. $handler->display->display_options['relationships']['uid']['table'] = 'comments';
  139. $handler->display->display_options['relationships']['uid']['field'] = 'uid';
  140. /* Field: Content: Nid */
  141. $handler->display->display_options['fields']['nid']['id'] = 'nid';
  142. $handler->display->display_options['fields']['nid']['table'] = 'node';
  143. $handler->display->display_options['fields']['nid']['field'] = 'nid';
  144. /* Field: Content: Path */
  145. $handler->display->display_options['fields']['path']['id'] = 'path';
  146. $handler->display->display_options['fields']['path']['table'] = 'node';
  147. $handler->display->display_options['fields']['path']['field'] = 'path';
  148. /* Field: Content: Post date */
  149. $handler->display->display_options['fields']['created']['id'] = 'created';
  150. $handler->display->display_options['fields']['created']['table'] = 'node';
  151. $handler->display->display_options['fields']['created']['field'] = 'created';
  152. /* Sort criterion: Content: In moderation */
  153. $handler->display->display_options['sorts']['moderate']['id'] = 'moderate';
  154. $handler->display->display_options['sorts']['moderate']['table'] = 'node';
  155. $handler->display->display_options['sorts']['moderate']['field'] = 'moderate';
  156. /* Sort criterion: Content: Last comment author */
  157. $handler->display->display_options['sorts']['last_comment_name']['id'] = 'last_comment_name';
  158. $handler->display->display_options['sorts']['last_comment_name']['table'] = 'node_comment_statistics';
  159. $handler->display->display_options['sorts']['last_comment_name']['field'] = 'last_comment_name';
  160. /* Sort criterion: Content: Last comment time */
  161. $handler->display->display_options['sorts']['last_comment_timestamp']['id'] = 'last_comment_timestamp';
  162. $handler->display->display_options['sorts']['last_comment_timestamp']['table'] = 'node_comment_statistics';
  163. $handler->display->display_options['sorts']['last_comment_timestamp']['field'] = 'last_comment_timestamp';
  164. /* Argument: Content: Created date */
  165. $handler->display->display_options['arguments']['created_fulldate']['id'] = 'created_fulldate';
  166. $handler->display->display_options['arguments']['created_fulldate']['table'] = 'node';
  167. $handler->display->display_options['arguments']['created_fulldate']['field'] = 'created_fulldate';
  168. $handler->display->display_options['arguments']['created_fulldate']['style_plugin'] = 'default_summary';
  169. $handler->display->display_options['arguments']['created_fulldate']['default_argument_type'] = 'fixed';
  170. /* Argument: Content: Created day */
  171. $handler->display->display_options['arguments']['created_day']['id'] = 'created_day';
  172. $handler->display->display_options['arguments']['created_day']['table'] = 'node';
  173. $handler->display->display_options['arguments']['created_day']['field'] = 'created_day';
  174. $handler->display->display_options['arguments']['created_day']['style_plugin'] = 'default_summary';
  175. $handler->display->display_options['arguments']['created_day']['default_argument_type'] = 'fixed';
  176. /* Argument: Content: Created month */
  177. $handler->display->display_options['arguments']['created_month']['id'] = 'created_month';
  178. $handler->display->display_options['arguments']['created_month']['table'] = 'node';
  179. $handler->display->display_options['arguments']['created_month']['field'] = 'created_month';
  180. $handler->display->display_options['arguments']['created_month']['style_plugin'] = 'default_summary';
  181. $handler->display->display_options['arguments']['created_month']['default_argument_type'] = 'fixed';
  182. /* Filter: Content: Nid */
  183. $handler->display->display_options['filters']['nid']['id'] = 'nid';
  184. $handler->display->display_options['filters']['nid']['table'] = 'node';
  185. $handler->display->display_options['filters']['nid']['field'] = 'nid';
  186. /* Filter: Content: Published */
  187. $handler->display->display_options['filters']['status']['id'] = 'status';
  188. $handler->display->display_options['filters']['status']['table'] = 'node';
  189. $handler->display->display_options['filters']['status']['field'] = 'status';
  190. /* Filter: Content: Title */
  191. $handler->display->display_options['filters']['title']['id'] = 'title';
  192. $handler->display->display_options['filters']['title']['table'] = 'node';
  193. $handler->display->display_options['filters']['title']['field'] = 'title';
  194. /* Display: Page */
  195. $handler = $view->new_display('page', 'Page', 'page_1');
  196. $handler->display->display_options['path'] = 'test_destroy';
  197. /* Display: Attachment */
  198. $handler = $view->new_display('attachment', 'Attachment', 'attachment_1');
  199. $handler->display->display_options['pager']['type'] = 'some';
  200. $handler->display->display_options['displays'] = array(
  201. 'default' => 'default',
  202. 'page_1' => 'page_1',
  203. );
  204. /* Display: Attachment */
  205. $handler = $view->new_display('attachment', 'Attachment', 'attachment_2');
  206. $handler->display->display_options['pager']['type'] = 'some';
  207. $handler->display->display_options['displays'] = array(
  208. 'default' => 'default',
  209. 'page_1' => 'page_1',
  210. );
  211. // @codingStandardsIgnoreLine
  212. $translatables['test_destroy'] = array(
  213. t('Master'),
  214. t('more'),
  215. t('Apply'),
  216. t('Reset'),
  217. t('Sort By'),
  218. t('Asc'),
  219. t('Desc'),
  220. t('Items per page'),
  221. t('- All -'),
  222. t('Offset'),
  223. t('Text area'),
  224. t('Content'),
  225. t('Parent comment'),
  226. t('User'),
  227. t('Nid'),
  228. t('Path'),
  229. t('Post date'),
  230. t('All'),
  231. t('Page'),
  232. t('Attachment'),
  233. );
  234. return $view;
  235. }
  236. function view_test_delete() {
  237. $view = new view;
  238. $view->name = 'test_view_delete';
  239. $view->description = '';
  240. $view->tag = '';
  241. $view->base_table = 'node';
  242. $view->human_name = 'test_view_delete';
  243. $view->core = 7;
  244. $view->api_version = '3.0-alpha1';
  245. $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
  246. /* Display: Defaults */
  247. $handler = $view->new_display('default', 'Defaults', 'default');
  248. $handler->display->display_options['access']['type'] = 'none';
  249. $handler->display->display_options['cache']['type'] = 'none';
  250. $handler->display->display_options['query']['type'] = 'views_query';
  251. $handler->display->display_options['exposed_form']['type'] = 'basic';
  252. $handler->display->display_options['pager']['type'] = 'full';
  253. $handler->display->display_options['style_plugin'] = 'default';
  254. $handler->display->display_options['row_plugin'] = 'fields';
  255. // @codingStandardsIgnoreLine
  256. $translatables['test_view_delete'] = array(
  257. t('Defaults'),
  258. t('more'),
  259. t('Apply'),
  260. t('Reset'),
  261. t('Sort By'),
  262. t('Asc'),
  263. t('Desc'),
  264. t('Items per page'),
  265. t('- All -'),
  266. t('Offset'),
  267. );
  268. return $view;
  269. }
  270. }