PageRenderTime 45ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/cake/tests/cases/libs/controller/scaffold.test.php

https://github.com/hardsshah/bookmarks
PHP | 584 lines | 315 code | 30 blank | 239 comment | 0 complexity | ac7bc2eaac119e98509acd63818e4a66 MD5 | raw file
  1. <?php
  2. /* SVN FILE: $Id$ */
  3. /**
  4. * ScaffoldTest file
  5. *
  6. * Long description for file
  7. *
  8. * PHP versions 4 and 5
  9. *
  10. * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
  11. * Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
  12. *
  13. * Licensed under The Open Group Test Suite License
  14. * Redistributions of files must retain the above copyright notice.
  15. *
  16. * @filesource
  17. * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
  18. * @link https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
  19. * @package cake
  20. * @subpackage cake.tests.cases.libs.controller
  21. * @since CakePHP(tm) v 1.2.0.5436
  22. * @version $Revision$
  23. * @modifiedby $LastChangedBy$
  24. * @lastmodified $Date$
  25. * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
  26. */
  27. App::import('Core', 'Scaffold');
  28. /**
  29. * ScaffoldMockController class
  30. *
  31. * @package cake
  32. * @subpackage cake.tests.cases.libs.controller
  33. */
  34. class ScaffoldMockController extends Controller {
  35. /**
  36. * name property
  37. *
  38. * @var string 'ScaffoldMock'
  39. * @access public
  40. */
  41. var $name = 'ScaffoldMock';
  42. /**
  43. * scaffold property
  44. *
  45. * @var mixed
  46. * @access public
  47. */
  48. var $scaffold;
  49. }
  50. /**
  51. * TestScaffoldMock class
  52. *
  53. * @package cake
  54. * @subpackage cake.tests.cases.libs.controller
  55. */
  56. class TestScaffoldMock extends Scaffold {
  57. /**
  58. * Overload __scaffold
  59. *
  60. * @param unknown_type $params
  61. */
  62. function __scaffold($params) {
  63. $this->_params = $params;
  64. }
  65. /**
  66. * Get Params from the Controller.
  67. *
  68. * @return unknown
  69. */
  70. function getParams() {
  71. return $this->_params;
  72. }
  73. }
  74. /**
  75. * ScaffoldMock class
  76. *
  77. * @package cake
  78. * @subpackage cake.tests.cases.libs.controller
  79. */
  80. class ScaffoldMock extends CakeTestModel {
  81. /**
  82. * useTable property
  83. *
  84. * @var string 'posts'
  85. * @access public
  86. */
  87. var $useTable = 'articles';
  88. /**
  89. * belongsTo property
  90. *
  91. * @var array
  92. * @access public
  93. */
  94. var $belongsTo = array(
  95. 'User' => array(
  96. 'className' => 'ScaffoldUser',
  97. 'foreignKey' => 'user_id',
  98. )
  99. );
  100. /**
  101. * hasMany property
  102. *
  103. * @var array
  104. * @access public
  105. */
  106. var $hasMany = array(
  107. 'Comment' => array(
  108. 'className' => 'ScaffoldComment',
  109. 'foreignKey' => 'article_id',
  110. )
  111. );
  112. }
  113. /**
  114. * ScaffoldUser class
  115. *
  116. * @package cake
  117. * @subpackage cake.tests.cases.libs.controller
  118. */
  119. class ScaffoldUser extends CakeTestModel {
  120. /**
  121. * useTable property
  122. *
  123. * @var string 'posts'
  124. * @access public
  125. */
  126. var $useTable = 'users';
  127. /**
  128. * hasMany property
  129. *
  130. * @var array
  131. * @access public
  132. */
  133. var $hasMany = array(
  134. 'Article' => array(
  135. 'className' => 'ScaffoldMock',
  136. 'foreignKey' => 'article_id',
  137. )
  138. );
  139. }
  140. /**
  141. * ScaffoldComment class
  142. *
  143. * @package cake
  144. * @subpackage cake.tests.cases.libs.controller
  145. */
  146. class ScaffoldComment extends CakeTestModel {
  147. /**
  148. * useTable property
  149. *
  150. * @var string 'posts'
  151. * @access public
  152. */
  153. var $useTable = 'comments';
  154. /**
  155. * belongsTo property
  156. *
  157. * @var array
  158. * @access public
  159. */
  160. var $belongsTo = array(
  161. 'Article' => array(
  162. 'className' => 'ScaffoldMock',
  163. 'foreignKey' => 'article_id',
  164. )
  165. );
  166. }
  167. /**
  168. * TestScaffoldView class
  169. *
  170. * @package cake
  171. * @subpackage cake.tests.cases.libs.controller
  172. */
  173. class TestScaffoldView extends ScaffoldView {
  174. /**
  175. * testGetFilename method
  176. *
  177. * @param mixed $action
  178. * @access public
  179. * @return void
  180. */
  181. function testGetFilename($action) {
  182. return $this->_getViewFileName($action);
  183. }
  184. }
  185. /**
  186. * ScaffoldViewTest class
  187. *
  188. * @package cake
  189. * @subpackage cake.tests.cases.libs.controller
  190. */
  191. class ScaffoldViewTest extends CakeTestCase {
  192. /**
  193. * fixtures property
  194. *
  195. * @var array
  196. * @access public
  197. */
  198. var $fixtures = array('core.article', 'core.user', 'core.comment');
  199. /**
  200. * setUp method
  201. *
  202. * @access public
  203. * @return void
  204. */
  205. function setUp() {
  206. $this->Controller =& new ScaffoldMockController();
  207. }
  208. /**
  209. * tearDown method
  210. *
  211. * @access public
  212. * @return void
  213. */
  214. function tearDown() {
  215. unset($this->Controller);
  216. }
  217. /**
  218. * testGetViewFilename method
  219. *
  220. * @access public
  221. * @return void
  222. */
  223. function testGetViewFilename() {
  224. $_admin = Configure::read('Routing.admin');
  225. Configure::write('Routing.admin', 'admin');
  226. $this->Controller->action = 'index';
  227. $ScaffoldView =& new TestScaffoldView($this->Controller);
  228. $result = $ScaffoldView->testGetFilename('index');
  229. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'index.ctp';
  230. $this->assertEqual($result, $expected);
  231. $result = $ScaffoldView->testGetFilename('edit');
  232. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'edit.ctp';
  233. $this->assertEqual($result, $expected);
  234. $result = $ScaffoldView->testGetFilename('add');
  235. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'edit.ctp';
  236. $this->assertEqual($result, $expected);
  237. $result = $ScaffoldView->testGetFilename('view');
  238. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'view.ctp';
  239. $this->assertEqual($result, $expected);
  240. $result = $ScaffoldView->testGetFilename('admin_index');
  241. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'index.ctp';
  242. $this->assertEqual($result, $expected);
  243. $result = $ScaffoldView->testGetFilename('admin_view');
  244. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'view.ctp';
  245. $this->assertEqual($result, $expected);
  246. $result = $ScaffoldView->testGetFilename('admin_edit');
  247. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'edit.ctp';
  248. $this->assertEqual($result, $expected);
  249. $result = $ScaffoldView->testGetFilename('admin_add');
  250. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'edit.ctp';
  251. $this->assertEqual($result, $expected);
  252. $result = $ScaffoldView->testGetFilename('error');
  253. $expected = 'cake' . DS . 'libs' . DS . 'view' . DS . 'errors' . DS . 'scaffold_error.ctp';
  254. $this->assertEqual($result, $expected);
  255. $_back = array(
  256. 'viewPaths' => Configure::read('viewPaths'),
  257. 'pluginPaths' => Configure::read('pluginPaths'),
  258. );
  259. Configure::write('viewPaths', array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS));
  260. Configure::write('pluginPaths', array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS));
  261. $Controller =& new ScaffoldMockController();
  262. $Controller->scaffold = 'admin';
  263. $Controller->viewPath = 'posts';
  264. $Controller->action = 'admin_edit';
  265. $ScaffoldView =& new TestScaffoldView($Controller);
  266. $result = $ScaffoldView->testGetFilename('admin_edit');
  267. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' .DS . 'views' . DS . 'posts' . DS . 'scaffold.edit.ctp';
  268. $this->assertEqual($result, $expected);
  269. $result = $ScaffoldView->testGetFilename('edit');
  270. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' .DS . 'views' . DS . 'posts' . DS . 'scaffold.edit.ctp';
  271. $this->assertEqual($result, $expected);
  272. $Controller =& new ScaffoldMockController();
  273. $Controller->scaffold = 'admin';
  274. $Controller->viewPath = 'tests';
  275. $Controller->plugin = 'test_plugin';
  276. $Controller->action = 'admin_add';
  277. $ScaffoldView =& new TestScaffoldView($Controller);
  278. $result = $ScaffoldView->testGetFilename('admin_add');
  279. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins'
  280. . DS .'test_plugin' . DS . 'views' . DS . 'tests' . DS . 'scaffold.edit.ctp';
  281. $this->assertEqual($result, $expected);
  282. $result = $ScaffoldView->testGetFilename('add');
  283. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins'
  284. . DS .'test_plugin' . DS . 'views' . DS . 'tests' . DS . 'scaffold.edit.ctp';
  285. $this->assertEqual($result, $expected);
  286. Configure::write('viewPaths', $_back['viewPaths']);
  287. Configure::write('pluginPaths', $_back['pluginPaths']);
  288. Configure::write('Routing.admin', $_admin);
  289. }
  290. /**
  291. * test default index scaffold generation
  292. *
  293. * @access public
  294. * @return void
  295. **/
  296. function testIndexScaffold() {
  297. $this->Controller->action = 'index';
  298. $this->Controller->here = '/scaffold_mock';
  299. $this->Controller->webroot = '/';
  300. $params = array(
  301. 'plugin' => null,
  302. 'pass' => array(),
  303. 'form' => array(),
  304. 'named' => array(),
  305. 'url' => array('url' =>'scaffold_mock'),
  306. 'controller' => 'scaffold_mock',
  307. 'action' => 'index',
  308. );
  309. //set router.
  310. Router::reload();
  311. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/scaffold_mock', 'webroot' => '/')));
  312. $this->Controller->params = $params;
  313. $this->Controller->controller = 'scaffold_mock';
  314. $this->Controller->base = '/';
  315. $this->Controller->constructClasses();
  316. ob_start();
  317. new Scaffold($this->Controller, $params);
  318. $result = ob_get_clean();
  319. $this->assertPattern('#<h2>ScaffoldMock</h2>#', $result);
  320. $this->assertPattern('#<table cellpadding="0" cellspacing="0">#', $result);
  321. //TODO: add testing for table generation
  322. $this->assertPattern('#<a href="/scaffold_users/view/1">1</a>#', $result); //belongsTo links
  323. $this->assertPattern('#<li><a href="/scaffold_mock/add/">New ScaffoldMock</a></li>#', $result);
  324. $this->assertPattern('#<li><a href="/scaffold_users/">List Scaffold Users</a></li>#', $result);
  325. $this->assertPattern('#<li><a href="/scaffold_comments/add/">New Comment</a></li>#', $result);
  326. }
  327. /**
  328. * test default view scaffold generation
  329. *
  330. * @access public
  331. * @return void
  332. **/
  333. function testViewScaffold() {
  334. $this->Controller->action = 'view';
  335. $this->Controller->here = '/scaffold_mock';
  336. $this->Controller->webroot = '/';
  337. $params = array(
  338. 'plugin' => null,
  339. 'pass' => array(1),
  340. 'form' => array(),
  341. 'named' => array(),
  342. 'url' => array('url' =>'scaffold_mock'),
  343. 'controller' => 'scaffold_mock',
  344. 'action' => 'view',
  345. );
  346. //set router.
  347. Router::reload();
  348. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/scaffold_mock', 'webroot' => '/')));
  349. $this->Controller->params = $params;
  350. $this->Controller->controller = 'scaffold_mock';
  351. $this->Controller->base = '/';
  352. $this->Controller->constructClasses();
  353. ob_start();
  354. new Scaffold($this->Controller, $params);
  355. $result = ob_get_clean();
  356. $this->assertPattern('/<h2>View ScaffoldMock<\/h2>/', $result);
  357. $this->assertPattern('/<dl>/', $result);
  358. //TODO: add specific tests for fields.
  359. $this->assertPattern('/<a href="\/scaffold_users\/view\/1">1<\/a>/', $result); //belongsTo links
  360. $this->assertPattern('/<li><a href="\/scaffold_mock\/edit\/1">Edit ScaffoldMock<\/a>\s<\/li>/', $result);
  361. $this->assertPattern('/<li><a href="\/scaffold_mock\/delete\/1"[^>]*>Delete ScaffoldMock<\/a>\s*<\/li>/', $result);
  362. //check related table
  363. $this->assertPattern('/<div class="related">\s*<h3>Related Scaffold Comments<\/h3>\s*<table cellpadding="0" cellspacing="0">/', $result);
  364. $this->assertPattern('/<li><a href="\/scaffold_comments\/add\/">New Comment<\/a><\/li>/', $result);
  365. }
  366. /**
  367. * test default view scaffold generation
  368. *
  369. * @access public
  370. * @return void
  371. **/
  372. function testEditScaffold() {
  373. $this->Controller->action = 'edit';
  374. $this->Controller->here = '/scaffold_mock';
  375. $this->Controller->webroot = '/';
  376. $params = array(
  377. 'plugin' => null,
  378. 'pass' => array(1),
  379. 'form' => array(),
  380. 'named' => array(),
  381. 'url' => array('url' =>'scaffold_mock'),
  382. 'controller' => 'scaffold_mock',
  383. 'action' => 'edit',
  384. );
  385. //set router.
  386. Router::reload();
  387. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/scaffold_mock', 'webroot' => '/')));
  388. $this->Controller->params = $params;
  389. $this->Controller->controller = 'scaffold_mock';
  390. $this->Controller->base = '/';
  391. $this->Controller->constructClasses();
  392. ob_start();
  393. new Scaffold($this->Controller, $params);
  394. $result = ob_get_clean();
  395. $this->assertPattern('/<form id="ScaffoldMockEditForm" method="post" action="\/scaffold_mock\/edit\/1">/', $result);
  396. $this->assertPattern('/<legend>Edit Scaffold Mock<\/legend>/', $result);
  397. $this->assertPattern('/input type="hidden" name="data\[ScaffoldMock\]\[id\]" value="1" id="ScaffoldMockId"/', $result);
  398. $this->assertPattern('/input name="data\[ScaffoldMock\]\[user_id\]" type="text" maxlength="11" value="1" id="ScaffoldMockUserId"/', $result);
  399. $this->assertPattern('/input name="data\[ScaffoldMock\]\[title\]" type="text" maxlength="255" value="First Article" id="ScaffoldMockTitle"/', $result);
  400. $this->assertPattern('/input name="data\[ScaffoldMock\]\[published\]" type="text" maxlength="1" value="Y" id="ScaffoldMockPublished"/', $result);
  401. $this->assertPattern('/textarea name="data\[ScaffoldMock\]\[body\]" cols="30" rows="6" id="ScaffoldMockBody"/', $result);
  402. $this->assertPattern('/<li><a href="\/scaffold_mock\/delete\/1"[^>]*>Delete<\/a>\s*<\/li>/', $result);
  403. }
  404. /**
  405. * Test Admin Index Scaffolding.
  406. *
  407. * @access public
  408. * @return void
  409. **/
  410. function testAdminIndexScaffold() {
  411. $_backAdmin = Configure::read('Routing.admin');
  412. Configure::write('Routing.admin', 'admin');
  413. $params = array(
  414. 'plugin' => null,
  415. 'pass' => array(),
  416. 'form' => array(),
  417. 'named' => array(),
  418. 'prefix' => 'admin',
  419. 'url' => array('url' =>'admin/scaffold_mock'),
  420. 'controller' => 'scaffold_mock',
  421. 'action' => 'admin_index',
  422. 'admin' => 1,
  423. );
  424. //reset, and set router.
  425. Router::reload();
  426. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/admin/scaffold_mock', 'webroot' => '/')));
  427. $this->Controller->params = $params;
  428. $this->Controller->controller = 'scaffold_mock';
  429. $this->Controller->base = '/';
  430. $this->Controller->action = 'admin_index';
  431. $this->Controller->here = '/tests/admin/scaffold_mock';
  432. $this->Controller->webroot = '/';
  433. $this->Controller->scaffold = 'admin';
  434. $this->Controller->constructClasses();
  435. ob_start();
  436. $Scaffold = new Scaffold($this->Controller, $params);
  437. $result = ob_get_clean();
  438. $this->assertPattern('/<h2>ScaffoldMock<\/h2>/', $result);
  439. $this->assertPattern('/<table cellpadding="0" cellspacing="0">/', $result);
  440. //TODO: add testing for table generation
  441. $this->assertPattern('/<li><a href="\/admin\/scaffold_mock\/add\/">New ScaffoldMock<\/a><\/li>/', $result);
  442. Configure::write('Routing.admin', $_backAdmin);
  443. }
  444. /**
  445. * Test Admin Index Scaffolding.
  446. *
  447. * @access public
  448. * @return void
  449. **/
  450. function testAdminEditScaffold() {
  451. $_backAdmin = Configure::read('Routing.admin');
  452. Configure::write('Routing.admin', 'admin');
  453. $params = array(
  454. 'plugin' => null,
  455. 'pass' => array(),
  456. 'form' => array(),
  457. 'named' => array(),
  458. 'prefix' => 'admin',
  459. 'url' => array('url' =>'admin/scaffold_mock/edit'),
  460. 'controller' => 'scaffold_mock',
  461. 'action' => 'admin_edit',
  462. 'admin' => 1,
  463. );
  464. //reset, and set router.
  465. Router::reload();
  466. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/admin/scaffold_mock/edit', 'webroot' => '/')));
  467. $this->Controller->params = $params;
  468. $this->Controller->controller = 'scaffold_mock';
  469. $this->Controller->base = '/';
  470. $this->Controller->action = 'admin_index';
  471. $this->Controller->here = '/tests/admin/scaffold_mock';
  472. $this->Controller->webroot = '/';
  473. $this->Controller->scaffold = 'admin';
  474. $this->Controller->constructClasses();
  475. ob_start();
  476. $Scaffold = new Scaffold($this->Controller, $params);
  477. $result = ob_get_clean();
  478. $this->assertPattern('#admin/scaffold_mock/edit/1#', $result);
  479. $this->assertPattern('#Scaffold Mock#', $result);
  480. Configure::write('Routing.admin', $_backAdmin);
  481. }
  482. }
  483. /**
  484. * Scaffold Test class
  485. *
  486. * @package cake
  487. * @subpackage cake.tests.cases.libs.controller
  488. */
  489. class ScaffoldTest extends CakeTestCase {
  490. /**
  491. * Controller property
  492. *
  493. * @var SecurityTestController
  494. * @access public
  495. */
  496. var $Controller;
  497. /**
  498. * fixtures property
  499. *
  500. * @var array
  501. * @access public
  502. */
  503. var $fixtures = array('core.article', 'core.user', 'core.comment');
  504. /**
  505. * setUp method
  506. *
  507. * @access public
  508. * @return void
  509. */
  510. function setUp() {
  511. $this->Controller =& new ScaffoldMockController();
  512. }
  513. /**
  514. * tearDown method
  515. *
  516. * @access public
  517. * @return void
  518. */
  519. function tearDown() {
  520. unset($this->Controller);
  521. }
  522. /**
  523. * Test the correct Generation of Scaffold Params.
  524. * This ensures that the correct action and view will be generated
  525. *
  526. * @access public
  527. * @return void
  528. */
  529. function testScaffoldParams() {
  530. $this->Controller->action = 'admin_edit';
  531. $this->Controller->here = '/admin/scaffold_mock/edit';
  532. $this->Controller->webroot = '/';
  533. $params = array(
  534. 'plugin' => null,
  535. 'pass' => array(),
  536. 'form' => array(),
  537. 'named' => array(),
  538. 'url' => array('url' =>'admin/scaffold_mock/edit'),
  539. 'controller' => 'scaffold_mock',
  540. 'action' => 'admin_edit',
  541. 'admin' => true,
  542. );
  543. //set router.
  544. Router::setRequestInfo(array($params, array('base' => '/', 'here' => 'admin/scaffold_mock', 'webroot' => '/')));
  545. $this->Controller->params = $params;
  546. $this->Controller->controller = 'scaffold_mock';
  547. $this->Controller->base = '/';
  548. $this->Controller->constructClasses();
  549. $Scaffold =& new TestScaffoldMock($this->Controller, $params);
  550. $result = $Scaffold->getParams();
  551. $this->assertEqual($result['action'], 'admin_edit');
  552. }
  553. }
  554. ?>