PageRenderTime 69ms CodeModel.GetById 35ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/include/MVC/Controller/SugarControllerTest.php

https://github.com/mikmagic/sugarcrm_dev
PHP | 357 lines | 245 code | 72 blank | 40 comment | 0 complexity | c0f28cb576fb51b7fcc197d1ca9bf045 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, LGPL-2.1, BSD-3-Clause, AGPL-3.0
  1. <?php
  2. /*********************************************************************************
  3. * SugarCRM Community Edition is a customer relationship management program developed by
  4. * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
  5. *
  6. * This program is free software; you can redistribute it and/or modify it under
  7. * the terms of the GNU Affero General Public License version 3 as published by the
  8. * Free Software Foundation with the addition of the following permission added
  9. * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
  10. * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
  11. * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
  12. *
  13. * This program is distributed in the hope that it will be useful, but WITHOUT
  14. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  15. * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
  16. * details.
  17. *
  18. * You should have received a copy of the GNU Affero General Public License along with
  19. * this program; if not, see http://www.gnu.org/licenses or write to the Free
  20. * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  21. * 02110-1301 USA.
  22. *
  23. * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
  24. * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
  25. *
  26. * The interactive user interfaces in modified source and object code versions
  27. * of this program must display Appropriate Legal Notices, as required under
  28. * Section 5 of the GNU Affero General Public License version 3.
  29. *
  30. * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
  31. * these Appropriate Legal Notices must retain the display of the "Powered by
  32. * SugarCRM" logo. If the display of the logo is not reasonably feasible for
  33. * technical reasons, the Appropriate Legal Notices must display the words
  34. * "Powered by SugarCRM".
  35. ********************************************************************************/
  36. require_once 'include/MVC/Controller/SugarController.php';
  37. class SugarControllerTest extends Sugar_PHPUnit_Framework_TestCase
  38. {
  39. public function setUp()
  40. {
  41. $GLOBALS['current_user'] = SugarTestUserUtilities::createAnonymousUser();
  42. }
  43. public function tearDown()
  44. {
  45. SugarTestUserUtilities::removeAllCreatedAnonymousUsers();
  46. unset($GLOBALS['current_user']);
  47. }
  48. public function testSetup()
  49. {
  50. $controller = new SugarControllerMock;
  51. $controller->setup();
  52. $this->assertEquals('Home',$controller->module);
  53. $this->assertNull($controller->target_module);
  54. }
  55. public function testSetupSpecifyModule()
  56. {
  57. $controller = new SugarControllerMock;
  58. $controller->setup('foo');
  59. $this->assertEquals('foo',$controller->module);
  60. $this->assertNull($controller->target_module);
  61. }
  62. public function testSetupUseRequestVars()
  63. {
  64. $_REQUEST = array(
  65. 'module' => 'dog33434',
  66. 'target_module' => 'dog121255',
  67. 'action' => 'dog3232',
  68. 'record' => 'dog5656',
  69. 'view' => 'dog4343',
  70. 'return_module' => 'dog1312',
  71. 'return_action' => 'dog1212',
  72. 'return_id' => '11212',
  73. );
  74. $controller = new SugarControllerMock;
  75. $controller->setup();
  76. $this->assertEquals($_REQUEST['module'],$controller->module);
  77. $this->assertEquals($_REQUEST['target_module'],$controller->target_module);
  78. $this->assertEquals($_REQUEST['action'],$controller->action);
  79. $this->assertEquals($_REQUEST['record'],$controller->record);
  80. $this->assertEquals($_REQUEST['view'],$controller->view);
  81. $this->assertEquals($_REQUEST['return_module'],$controller->return_module);
  82. $this->assertEquals($_REQUEST['return_action'],$controller->return_action);
  83. $this->assertEquals($_REQUEST['return_id'],$controller->return_id);
  84. }
  85. public function testSetModule()
  86. {
  87. $controller = new SugarControllerMock;
  88. $controller->setModule('cat');
  89. $this->assertEquals('cat',$controller->module);
  90. }
  91. public function testLoadBean()
  92. {
  93. }
  94. public function testCallLegacyCodeIfLegacyDetailViewFound()
  95. {
  96. $module_name = 'TestModule'.mt_rand();
  97. sugar_mkdir("modules/$module_name/",null,true);
  98. sugar_touch("modules/$module_name/DetailView.php");
  99. $controller = new SugarControllerMock;
  100. $controller->setup($module_name);
  101. $controller->do_action = 'DetailView';
  102. $controller->view = 'list';
  103. $controller->callLegacyCode();
  104. $this->assertEquals('classic',$controller->view);
  105. rmdir_recursive("modules/$module_name");
  106. }
  107. public function testCallLegacyCodeIfNewDetailViewFound()
  108. {
  109. $module_name = 'TestModule'.mt_rand();
  110. sugar_mkdir("modules/$module_name/views",null,true);
  111. sugar_touch("modules/$module_name/views/view.detail.php");
  112. $controller = new SugarControllerMock;
  113. $controller->setup($module_name);
  114. $controller->do_action = 'DetailView';
  115. $controller->view = 'list';
  116. $controller->callLegacyCode();
  117. $this->assertEquals('list',$controller->view);
  118. rmdir_recursive("modules/$module_name");
  119. }
  120. public function testCallLegacyCodeIfLegacyDetailViewAndNewDetailViewFound()
  121. {
  122. $module_name = 'TestModule'.mt_rand();
  123. sugar_mkdir("modules/$module_name/views",null,true);
  124. sugar_touch("modules/$module_name/views/view.detail.php");
  125. sugar_touch("modules/$module_name/DetailView.php");
  126. $controller = new SugarControllerMock;
  127. $controller->setup($module_name);
  128. $controller->do_action = 'DetailView';
  129. $controller->view = 'list';
  130. $controller->callLegacyCode();
  131. $this->assertEquals('list',$controller->view);
  132. rmdir_recursive("modules/$module_name");
  133. }
  134. public function testCallLegacyCodeIfCustomLegacyDetailViewAndNewDetailViewFound()
  135. {
  136. $module_name = 'TestModule'.mt_rand();
  137. sugar_mkdir("modules/$module_name/views",null,true);
  138. sugar_touch("modules/$module_name/views/view.detail.php");
  139. sugar_mkdir("custom/modules/$module_name",null,true);
  140. sugar_touch("custom/modules/$module_name/DetailView.php");
  141. $controller = new SugarControllerMock;
  142. $controller->setup($module_name);
  143. $controller->do_action = 'DetailView';
  144. $controller->view = 'list';
  145. $controller->callLegacyCode();
  146. $this->assertEquals('classic',$controller->view);
  147. rmdir_recursive("modules/$module_name");
  148. }
  149. public function testCallLegacyCodeIfLegacyDetailViewAndCustomNewDetailViewFound()
  150. {
  151. $module_name = 'TestModule'.mt_rand();
  152. sugar_mkdir("custom/modules/$module_name/views",null,true);
  153. sugar_touch("custom/modules/$module_name/views/view.detail.php");
  154. sugar_mkdir("modules/$module_name",null,true);
  155. sugar_touch("modules/$module_name/DetailView.php");
  156. $controller = new SugarControllerMock;
  157. $controller->setup($module_name);
  158. $controller->do_action = 'DetailView';
  159. $controller->view = 'list';
  160. $controller->callLegacyCode();
  161. $this->assertEquals('classic',$controller->view);
  162. rmdir_recursive("modules/$module_name");
  163. }
  164. public function testCallLegacyCodeIfLegacyDetailViewAndNewDetailViewFoundAndCustomLegacyDetailViewFound()
  165. {
  166. $module_name = 'TestModule'.mt_rand();
  167. sugar_mkdir("modules/$module_name/views",null,true);
  168. sugar_touch("modules/$module_name/views/view.detail.php");
  169. sugar_touch("modules/$module_name/DetailView.php");
  170. sugar_mkdir("custom/modules/$module_name",null,true);
  171. sugar_touch("custom/modules/$module_name/DetailView.php");
  172. $controller = new SugarControllerMock;
  173. $controller->setup($module_name);
  174. $controller->do_action = 'DetailView';
  175. $controller->view = 'list';
  176. $controller->callLegacyCode();
  177. $this->assertEquals('classic',$controller->view);
  178. rmdir_recursive("modules/$module_name");
  179. }
  180. public function testCallLegacyCodeIfLegacyDetailViewAndNewDetailViewFoundAndCustomNewDetailViewFound()
  181. {
  182. $module_name = 'TestModule'.mt_rand();
  183. sugar_mkdir("custom/modules/$module_name/views",null,true);
  184. sugar_touch("custom/modules/$module_name/views/view.detail.php");
  185. sugar_mkdir("modules/$module_name/views",null,true);
  186. sugar_touch("modules/$module_name/views/view.detail.php");
  187. sugar_touch("modules/$module_name/DetailView.php");
  188. $controller = new SugarControllerMock;
  189. $controller->setup($module_name);
  190. $controller->do_action = 'DetailView';
  191. $controller->view = 'list';
  192. $controller->callLegacyCode();
  193. $this->assertEquals('list',$controller->view);
  194. rmdir_recursive("modules/$module_name");
  195. }
  196. public function testCallLegacyCodeIfLegacyDetailViewAndNewDetailViewFoundAndCustomLegacyDetailViewFoundAndCustomNewDetailViewFound()
  197. {
  198. $module_name = 'TestModule'.mt_rand();
  199. sugar_mkdir("custom/modules/$module_name/views",null,true);
  200. sugar_touch("custom/modules/$module_name/views/view.detail.php");
  201. sugar_touch("custom/modules/$module_name/DetailView.php");
  202. sugar_mkdir("modules/$module_name/views",null,true);
  203. sugar_touch("modules/$module_name/views/view.detail.php");
  204. sugar_touch("modules/$module_name/DetailView.php");
  205. $controller = new SugarControllerMock;
  206. $controller->setup($module_name);
  207. $controller->do_action = 'DetailView';
  208. $controller->view = 'list';
  209. $controller->callLegacyCode();
  210. $this->assertEquals('list',$controller->view);
  211. rmdir_recursive("modules/$module_name");
  212. }
  213. public function testPostDelete()
  214. {
  215. $_REQUEST['return_module'] = 'foo';
  216. $_REQUEST['return_action'] = 'bar';
  217. $_REQUEST['return_id'] = '123';
  218. $controller = new SugarControllerMock;
  219. $controller->post_delete();
  220. unset($_REQUEST['return_module']);
  221. unset($_REQUEST['return_action']);
  222. unset($_REQUEST['return_id']);
  223. $this->assertEquals("index.php?module=foo&action=bar&record=123",$controller->redirect_url);
  224. }
  225. /**
  226. * @ticket 23816
  227. */
  228. public function testPostDeleteWithOffset()
  229. {
  230. $_REQUEST['return_module'] = 'foo';
  231. $_REQUEST['return_action'] = 'bar';
  232. $_REQUEST['return_id'] = '123';
  233. $_REQUEST['offset'] = '2';
  234. $controller = new SugarControllerMock;
  235. $controller->post_delete();
  236. unset($_REQUEST['return_module']);
  237. unset($_REQUEST['return_action']);
  238. unset($_REQUEST['return_id']);
  239. unset($_REQUEST['offset']);
  240. $this->assertEquals("index.php?module=foo&action=bar&record=123&offset=2",$controller->redirect_url);
  241. }
  242. /**
  243. * @ticket 23816
  244. */
  245. public function testPostDeleteWithOffsetAndDuplicateSave()
  246. {
  247. $_REQUEST['return_module'] = 'foo';
  248. $_REQUEST['return_action'] = 'bar';
  249. $_REQUEST['return_id'] = '123';
  250. $_REQUEST['offset'] = '2';
  251. $_REQUEST['duplicateSave'] = true;
  252. $controller = new SugarControllerMock;
  253. $controller->post_delete();
  254. unset($_REQUEST['return_module']);
  255. unset($_REQUEST['return_action']);
  256. unset($_REQUEST['return_id']);
  257. unset($_REQUEST['offset']);
  258. unset($_REQUEST['duplicateSave']);
  259. $this->assertEquals("index.php?module=foo&action=bar&record=123",$controller->redirect_url);
  260. }
  261. public function testPostDeleteWithDefaultValues()
  262. {
  263. $backupDefaultModule = $GLOBALS['sugar_config']['default_module'];
  264. $backupDefaultAction = $GLOBALS['sugar_config']['default_action'];
  265. $GLOBALS['sugar_config']['default_module'] = 'yuck';
  266. $GLOBALS['sugar_config']['default_action'] = 'yuckyuck';
  267. $controller = new SugarControllerMock;
  268. $controller->post_delete();
  269. $GLOBALS['sugar_config']['default_module'] = $backupDefaultModule;
  270. $GLOBALS['sugar_config']['default_action'] = $backupDefaultAction;
  271. $this->assertEquals("index.php?module=yuck&action=yuckyuck&record=",$controller->redirect_url);
  272. }
  273. }
  274. class SugarControllerMock extends SugarController
  275. {
  276. public $do_action;
  277. public function callLegacyCode()
  278. {
  279. return parent::callLegacyCode();
  280. }
  281. public function post_delete()
  282. {
  283. parent::post_delete();
  284. }
  285. }