PageRenderTime 250ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

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

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