PageRenderTime 101ms CodeModel.GetById 52ms RepoModel.GetById 13ms app.codeStats 0ms

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

https://github.com/msadouni/cakephp2x
PHP | 864 lines | 476 code | 81 blank | 307 comment | 0 complexity | 8fa78b17dcc33369632ede7e720b1095 MD5 | raw file
  1. <?php
  2. /**
  3. * ScaffoldTest file
  4. *
  5. * Long description for file
  6. *
  7. * PHP Version 5.x
  8. *
  9. * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
  10. * Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org)
  11. *
  12. * Licensed under The Open Group Test Suite License
  13. * Redistributions of files must retain the above copyright notice.
  14. *
  15. * @copyright Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org)
  16. * @link https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
  17. * @package cake
  18. * @subpackage cake.tests.cases.libs.controller
  19. * @since CakePHP(tm) v 1.2.0.5436
  20. * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
  21. */
  22. App::import('Core', 'Scaffold');
  23. /**
  24. * ScaffoldMockController class
  25. *
  26. * @package cake
  27. * @subpackage cake.tests.cases.libs.controller
  28. */
  29. class ScaffoldMockController extends Controller {
  30. /**
  31. * name property
  32. *
  33. * @var string 'ScaffoldMock'
  34. * @access public
  35. */
  36. var $name = 'ScaffoldMock';
  37. /**
  38. * scaffold property
  39. *
  40. * @var mixed
  41. * @access public
  42. */
  43. var $scaffold;
  44. }
  45. /**
  46. * ScaffoldMockControllerWithFields class
  47. *
  48. * @package cake
  49. * @subpackage cake.tests.cases.libs.controller
  50. */
  51. class ScaffoldMockControllerWithFields extends Controller {
  52. /**
  53. * name property
  54. *
  55. * @var string 'ScaffoldMock'
  56. * @access public
  57. */
  58. var $name = 'ScaffoldMock';
  59. /**
  60. * scaffold property
  61. *
  62. * @var mixed
  63. * @access public
  64. */
  65. var $scaffold;
  66. /**
  67. * function _beforeScaffold
  68. *
  69. * @param string method
  70. */
  71. function _beforeScaffold($method) {
  72. $this->set('scaffoldFields', array('title'));
  73. return true;
  74. }
  75. }
  76. /**
  77. * TestScaffoldMock class
  78. *
  79. * @package cake
  80. * @subpackage cake.tests.cases.libs.controller
  81. */
  82. class TestScaffoldMock extends Scaffold {
  83. /**
  84. * Overload __scaffold
  85. *
  86. * @param unknown_type $params
  87. */
  88. function __scaffold($params) {
  89. $this->_params = $params;
  90. }
  91. /**
  92. * Get Params from the Controller.
  93. *
  94. * @return unknown
  95. */
  96. function getParams() {
  97. return $this->_params;
  98. }
  99. }
  100. /**
  101. * ScaffoldMock class
  102. *
  103. * @package cake
  104. * @subpackage cake.tests.cases.libs.controller
  105. */
  106. class ScaffoldMock extends CakeTestModel {
  107. /**
  108. * useTable property
  109. *
  110. * @var string 'posts'
  111. * @access public
  112. */
  113. var $useTable = 'articles';
  114. /**
  115. * belongsTo property
  116. *
  117. * @var array
  118. * @access public
  119. */
  120. var $belongsTo = array(
  121. 'User' => array(
  122. 'className' => 'ScaffoldUser',
  123. 'foreignKey' => 'user_id',
  124. )
  125. );
  126. /**
  127. * hasMany property
  128. *
  129. * @var array
  130. * @access public
  131. */
  132. var $hasMany = array(
  133. 'Comment' => array(
  134. 'className' => 'ScaffoldComment',
  135. 'foreignKey' => 'article_id',
  136. )
  137. );
  138. /**
  139. * hasAndBelongsToMany property
  140. *
  141. * @var string
  142. */
  143. var $hasAndBelongsToMany = array(
  144. 'ScaffoldTag' => array(
  145. 'className' => 'ScaffoldTag',
  146. 'foreignKey' => 'post_id',
  147. 'associationForeignKey' => 'tag_id',
  148. 'joinTable' => 'posts_tags'
  149. )
  150. );
  151. }
  152. /**
  153. * ScaffoldUser class
  154. *
  155. * @package cake
  156. * @subpackage cake.tests.cases.libs.controller
  157. */
  158. class ScaffoldUser extends CakeTestModel {
  159. /**
  160. * useTable property
  161. *
  162. * @var string 'posts'
  163. * @access public
  164. */
  165. var $useTable = 'users';
  166. /**
  167. * hasMany property
  168. *
  169. * @var array
  170. * @access public
  171. */
  172. var $hasMany = array(
  173. 'Article' => array(
  174. 'className' => 'ScaffoldMock',
  175. 'foreignKey' => 'article_id',
  176. )
  177. );
  178. }
  179. /**
  180. * ScaffoldComment class
  181. *
  182. * @package cake
  183. * @subpackage cake.tests.cases.libs.controller
  184. */
  185. class ScaffoldComment extends CakeTestModel {
  186. /**
  187. * useTable property
  188. *
  189. * @var string 'posts'
  190. * @access public
  191. */
  192. var $useTable = 'comments';
  193. /**
  194. * belongsTo property
  195. *
  196. * @var array
  197. * @access public
  198. */
  199. var $belongsTo = array(
  200. 'Article' => array(
  201. 'className' => 'ScaffoldMock',
  202. 'foreignKey' => 'article_id',
  203. )
  204. );
  205. }
  206. /**
  207. * ScaffoldTag class
  208. *
  209. * @package cake
  210. * @subpackage cake.tests.cases.libs.controller
  211. */
  212. class ScaffoldTag extends CakeTestModel {
  213. /**
  214. * useTable property
  215. *
  216. * @var string 'posts'
  217. * @access public
  218. */
  219. var $useTable = 'tags';
  220. }
  221. /**
  222. * TestScaffoldView class
  223. *
  224. * @package cake
  225. * @subpackage cake.tests.cases.libs.controller
  226. */
  227. class TestScaffoldView extends ScaffoldView {
  228. /**
  229. * testGetFilename method
  230. *
  231. * @param mixed $action
  232. * @access public
  233. * @return void
  234. */
  235. function testGetFilename($action) {
  236. return $this->_getViewFileName($action);
  237. }
  238. }
  239. /**
  240. * ScaffoldViewTest class
  241. *
  242. * @package cake
  243. * @subpackage cake.tests.cases.libs.controller
  244. */
  245. class ScaffoldViewTest extends CakeTestCase {
  246. /**
  247. * fixtures property
  248. *
  249. * @var array
  250. * @access public
  251. */
  252. var $fixtures = array('core.article', 'core.user', 'core.comment', 'core.posts_tag', 'core.tag');
  253. /**
  254. * startTest method
  255. *
  256. * @access public
  257. * @return void
  258. */
  259. function startTest() {
  260. $this->Controller = new ScaffoldMockController();
  261. App::build(array(
  262. 'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS),
  263. 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
  264. ));
  265. }
  266. /**
  267. * endTest method
  268. *
  269. * @access public
  270. * @return void
  271. */
  272. function endTest() {
  273. unset($this->Controller);
  274. App::build();
  275. }
  276. /**
  277. * testGetViewFilename method
  278. *
  279. * @access public
  280. * @return void
  281. */
  282. function testGetViewFilename() {
  283. $_admin = Configure::read('Routing.prefixes');
  284. Configure::write('Routing.prefixes', array('admin'));
  285. $this->Controller->action = 'index';
  286. $ScaffoldView = new TestScaffoldView($this->Controller);
  287. $result = $ScaffoldView->testGetFilename('index');
  288. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'index.ctp';
  289. $this->assertEqual($result, $expected);
  290. $result = $ScaffoldView->testGetFilename('edit');
  291. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'edit.ctp';
  292. $this->assertEqual($result, $expected);
  293. $result = $ScaffoldView->testGetFilename('add');
  294. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'edit.ctp';
  295. $this->assertEqual($result, $expected);
  296. $result = $ScaffoldView->testGetFilename('view');
  297. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'view.ctp';
  298. $this->assertEqual($result, $expected);
  299. $result = $ScaffoldView->testGetFilename('admin_index');
  300. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'index.ctp';
  301. $this->assertEqual($result, $expected);
  302. $result = $ScaffoldView->testGetFilename('admin_view');
  303. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'view.ctp';
  304. $this->assertEqual($result, $expected);
  305. $result = $ScaffoldView->testGetFilename('admin_edit');
  306. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'edit.ctp';
  307. $this->assertEqual($result, $expected);
  308. $result = $ScaffoldView->testGetFilename('admin_add');
  309. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'scaffolds' . DS . 'edit.ctp';
  310. $this->assertEqual($result, $expected);
  311. $result = $ScaffoldView->testGetFilename('error');
  312. $expected = 'cake' . DS . 'libs' . DS . 'view' . DS . 'errors' . DS . 'scaffold_error.ctp';
  313. $this->assertEqual($result, $expected);
  314. $Controller = new ScaffoldMockController();
  315. $Controller->scaffold = 'admin';
  316. $Controller->viewPath = 'posts';
  317. $Controller->action = 'admin_edit';
  318. $ScaffoldView = new TestScaffoldView($Controller);
  319. $result = $ScaffoldView->testGetFilename('admin_edit');
  320. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' .DS . 'views' . DS . 'posts' . DS . 'scaffold.edit.ctp';
  321. $this->assertEqual($result, $expected);
  322. $result = $ScaffoldView->testGetFilename('edit');
  323. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' .DS . 'views' . DS . 'posts' . DS . 'scaffold.edit.ctp';
  324. $this->assertEqual($result, $expected);
  325. $Controller = new ScaffoldMockController();
  326. $Controller->scaffold = 'admin';
  327. $Controller->viewPath = 'tests';
  328. $Controller->plugin = 'test_plugin';
  329. $Controller->action = 'admin_add';
  330. $ScaffoldView = new TestScaffoldView($Controller);
  331. $result = $ScaffoldView->testGetFilename('admin_add');
  332. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins'
  333. . DS .'test_plugin' . DS . 'views' . DS . 'tests' . DS . 'scaffold.edit.ctp';
  334. $this->assertEqual($result, $expected);
  335. $result = $ScaffoldView->testGetFilename('add');
  336. $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins'
  337. . DS .'test_plugin' . DS . 'views' . DS . 'tests' . DS . 'scaffold.edit.ctp';
  338. $this->assertEqual($result, $expected);
  339. Configure::write('Routing.prefixes', $_admin);
  340. }
  341. /**
  342. * test default index scaffold generation
  343. *
  344. * @access public
  345. * @return void
  346. */
  347. function testIndexScaffold() {
  348. $this->Controller->action = 'index';
  349. $this->Controller->here = '/scaffold_mock';
  350. $this->Controller->webroot = '/';
  351. $params = array(
  352. 'plugin' => null,
  353. 'pass' => array(),
  354. 'form' => array(),
  355. 'named' => array(),
  356. 'url' => array('url' =>'scaffold_mock'),
  357. 'controller' => 'scaffold_mock',
  358. 'action' => 'index',
  359. );
  360. //set router.
  361. Router::reload();
  362. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/scaffold_mock', 'webroot' => '/')));
  363. $this->Controller->params = $params;
  364. $this->Controller->controller = 'scaffold_mock';
  365. $this->Controller->base = '/';
  366. $this->Controller->constructClasses();
  367. ob_start();
  368. new Scaffold($this->Controller, $params);
  369. $result = ob_get_clean();
  370. $this->assertPattern('#<h2>Scaffold Mock</h2>#', $result);
  371. $this->assertPattern('#<table cellpadding="0" cellspacing="0">#', $result);
  372. //TODO: add testing for table generation
  373. $this->assertPattern('#<a href="/scaffold_users/view/1">1</a>#', $result); //belongsTo links
  374. $this->assertPattern('#<li><a href="/scaffold_mock/add/">New Scaffold Mock</a></li>#', $result);
  375. $this->assertPattern('#<li><a href="/scaffold_users/">List Scaffold Users</a></li>#', $result);
  376. $this->assertPattern('#<li><a href="/scaffold_comments/add/">New Comment</a></li>#', $result);
  377. }
  378. /**
  379. * test default view scaffold generation
  380. *
  381. * @access public
  382. * @return void
  383. */
  384. function testViewScaffold() {
  385. $this->Controller->action = 'view';
  386. $this->Controller->here = '/scaffold_mock';
  387. $this->Controller->webroot = '/';
  388. $params = array(
  389. 'plugin' => null,
  390. 'pass' => array(1),
  391. 'form' => array(),
  392. 'named' => array(),
  393. 'url' => array('url' =>'scaffold_mock'),
  394. 'controller' => 'scaffold_mock',
  395. 'action' => 'view',
  396. );
  397. //set router.
  398. Router::reload();
  399. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/scaffold_mock', 'webroot' => '/')));
  400. $this->Controller->params = $params;
  401. $this->Controller->controller = 'scaffold_mock';
  402. $this->Controller->base = '/';
  403. $this->Controller->constructClasses();
  404. ob_start();
  405. new Scaffold($this->Controller, $params);
  406. $result = ob_get_clean();
  407. $this->assertPattern('/<h2>View Scaffold Mock<\/h2>/', $result);
  408. $this->assertPattern('/<dl>/', $result);
  409. //TODO: add specific tests for fields.
  410. $this->assertPattern('/<a href="\/scaffold_users\/view\/1">1<\/a>/', $result); //belongsTo links
  411. $this->assertPattern('/<li><a href="\/scaffold_mock\/edit\/1">Edit Scaffold Mock<\/a>\s<\/li>/', $result);
  412. $this->assertPattern('/<li><a href="\/scaffold_mock\/delete\/1"[^>]*>Delete Scaffold Mock<\/a>\s*<\/li>/', $result);
  413. //check related table
  414. $this->assertPattern('/<div class="related">\s*<h3>Related Scaffold Comments<\/h3>\s*<table cellpadding="0" cellspacing="0">/', $result);
  415. $this->assertPattern('/<li><a href="\/scaffold_comments\/add\/">New Comment<\/a><\/li>/', $result);
  416. }
  417. /**
  418. * test default view scaffold generation
  419. *
  420. * @access public
  421. * @return void
  422. */
  423. function testEditScaffold() {
  424. $this->Controller->action = 'edit';
  425. $this->Controller->here = '/scaffold_mock';
  426. $this->Controller->webroot = '/';
  427. $params = array(
  428. 'plugin' => null,
  429. 'pass' => array(1),
  430. 'form' => array(),
  431. 'named' => array(),
  432. 'url' => array('url' =>'scaffold_mock'),
  433. 'controller' => 'scaffold_mock',
  434. 'action' => 'edit',
  435. );
  436. //set router.
  437. Router::reload();
  438. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/scaffold_mock', 'webroot' => '/')));
  439. $this->Controller->params = $params;
  440. $this->Controller->controller = 'scaffold_mock';
  441. $this->Controller->base = '/';
  442. $this->Controller->constructClasses();
  443. ob_start();
  444. new Scaffold($this->Controller, $params);
  445. $result = ob_get_clean();
  446. $this->assertPattern('/<form id="ScaffoldMockEditForm" method="post" action="\/scaffold_mock\/edit\/1"/', $result);
  447. $this->assertPattern('/<legend>Edit Scaffold Mock<\/legend>/', $result);
  448. $this->assertPattern('/input type="hidden" name="data\[ScaffoldMock\]\[id\]" value="1" id="ScaffoldMockId"/', $result);
  449. $this->assertPattern('/input name="data\[ScaffoldMock\]\[user_id\]" type="text" maxlength="11" value="1" id="ScaffoldMockUserId"/', $result);
  450. $this->assertPattern('/input name="data\[ScaffoldMock\]\[title\]" type="text" maxlength="255" value="First Article" id="ScaffoldMockTitle"/', $result);
  451. $this->assertPattern('/input name="data\[ScaffoldMock\]\[published\]" type="text" maxlength="1" value="Y" id="ScaffoldMockPublished"/', $result);
  452. $this->assertPattern('/textarea name="data\[ScaffoldMock\]\[body\]" cols="30" rows="6" id="ScaffoldMockBody"/', $result);
  453. $this->assertPattern('/<li><a href="\/scaffold_mock\/delete\/1"[^>]*>Delete<\/a>\s*<\/li>/', $result);
  454. }
  455. /**
  456. * Test Admin Index Scaffolding.
  457. *
  458. * @access public
  459. * @return void
  460. */
  461. function testAdminIndexScaffold() {
  462. $_backAdmin = Configure::read('Routing.prefixes');
  463. Configure::write('Routing.prefixes', array('admin'));
  464. $params = array(
  465. 'plugin' => null,
  466. 'pass' => array(),
  467. 'form' => array(),
  468. 'named' => array(),
  469. 'prefix' => 'admin',
  470. 'url' => array('url' =>'admin/scaffold_mock'),
  471. 'controller' => 'scaffold_mock',
  472. 'action' => 'admin_index',
  473. 'admin' => 1,
  474. );
  475. //reset, and set router.
  476. Router::reload();
  477. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/admin/scaffold_mock', 'webroot' => '/')));
  478. $this->Controller->params = $params;
  479. $this->Controller->controller = 'scaffold_mock';
  480. $this->Controller->base = '/';
  481. $this->Controller->action = 'admin_index';
  482. $this->Controller->here = '/tests/admin/scaffold_mock';
  483. $this->Controller->webroot = '/';
  484. $this->Controller->scaffold = 'admin';
  485. $this->Controller->constructClasses();
  486. ob_start();
  487. $Scaffold = new Scaffold($this->Controller, $params);
  488. $result = ob_get_clean();
  489. $this->assertPattern('/<h2>Scaffold Mock<\/h2>/', $result);
  490. $this->assertPattern('/<table cellpadding="0" cellspacing="0">/', $result);
  491. //TODO: add testing for table generation
  492. $this->assertPattern('/<li><a href="\/admin\/scaffold_mock\/add\/">New Scaffold Mock<\/a><\/li>/', $result);
  493. Configure::write('Routing.prefixes', $_backAdmin);
  494. }
  495. /**
  496. * Test Admin Index Scaffolding.
  497. *
  498. * @access public
  499. * @return void
  500. */
  501. function testAdminEditScaffold() {
  502. $_backAdmin = Configure::read('Routing.prefixes');
  503. Configure::write('Routing.prefixes', array('admin'));
  504. $params = array(
  505. 'plugin' => null,
  506. 'pass' => array(),
  507. 'form' => array(),
  508. 'named' => array(),
  509. 'prefix' => 'admin',
  510. 'url' => array('url' =>'admin/scaffold_mock/edit'),
  511. 'controller' => 'scaffold_mock',
  512. 'action' => 'admin_edit',
  513. 'admin' => 1,
  514. );
  515. //reset, and set router.
  516. Router::reload();
  517. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/admin/scaffold_mock/edit', 'webroot' => '/')));
  518. $this->Controller->params = $params;
  519. $this->Controller->controller = 'scaffold_mock';
  520. $this->Controller->base = '/';
  521. $this->Controller->action = 'admin_index';
  522. $this->Controller->here = '/tests/admin/scaffold_mock';
  523. $this->Controller->webroot = '/';
  524. $this->Controller->scaffold = 'admin';
  525. $this->Controller->constructClasses();
  526. ob_start();
  527. $Scaffold = new Scaffold($this->Controller, $params);
  528. $result = ob_get_clean();
  529. $this->assertPattern('#admin/scaffold_mock/edit/1#', $result);
  530. $this->assertPattern('#Scaffold Mock#', $result);
  531. Configure::write('Routing.prefixes', $_backAdmin);
  532. }
  533. /**
  534. * Test Admin Index Scaffolding.
  535. *
  536. * @access public
  537. * @return void
  538. */
  539. function testMultiplePrefixScaffold() {
  540. $_backAdmin = Configure::read('Routing.prefixes');
  541. Configure::write('Routing.prefixes', array('admin', 'member'));
  542. $params = array(
  543. 'plugin' => null,
  544. 'pass' => array(),
  545. 'form' => array(),
  546. 'named' => array(),
  547. 'prefix' => 'member',
  548. 'url' => array('url' =>'member/scaffold_mock'),
  549. 'controller' => 'scaffold_mock',
  550. 'action' => 'member_index',
  551. 'member' => 1,
  552. );
  553. //reset, and set router.
  554. Router::reload();
  555. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/member/scaffold_mock', 'webroot' => '/')));
  556. $this->Controller->params = $params;
  557. $this->Controller->controller = 'scaffold_mock';
  558. $this->Controller->base = '/';
  559. $this->Controller->action = 'member_index';
  560. $this->Controller->here = '/tests/member/scaffold_mock';
  561. $this->Controller->webroot = '/';
  562. $this->Controller->scaffold = 'member';
  563. $this->Controller->constructClasses();
  564. ob_start();
  565. $Scaffold = new Scaffold($this->Controller, $params);
  566. $result = ob_get_clean();
  567. $this->assertPattern('/<h2>Scaffold Mock<\/h2>/', $result);
  568. $this->assertPattern('/<table cellpadding="0" cellspacing="0">/', $result);
  569. //TODO: add testing for table generation
  570. $this->assertPattern('/<li><a href="\/member\/scaffold_mock\/add\/">New Scaffold Mock<\/a><\/li>/', $result);
  571. Configure::write('Routing.prefixes', $_backAdmin);
  572. }
  573. }
  574. /**
  575. * Scaffold Test class
  576. *
  577. * @package cake
  578. * @subpackage cake.tests.cases.libs.controller
  579. */
  580. class ScaffoldTest extends CakeTestCase {
  581. /**
  582. * Controller property
  583. *
  584. * @var SecurityTestController
  585. * @access public
  586. */
  587. var $Controller;
  588. /**
  589. * fixtures property
  590. *
  591. * @var array
  592. * @access public
  593. */
  594. var $fixtures = array('core.article', 'core.user', 'core.comment', 'core.posts_tag', 'core.tag');
  595. /**
  596. * startTest method
  597. *
  598. * @access public
  599. * @return void
  600. */
  601. function startTest() {
  602. $this->Controller = new ScaffoldMockController();
  603. }
  604. /**
  605. * endTest method
  606. *
  607. * @access public
  608. * @return void
  609. */
  610. function endTest() {
  611. unset($this->Controller);
  612. }
  613. /**
  614. * Test the correct Generation of Scaffold Params.
  615. * This ensures that the correct action and view will be generated
  616. *
  617. * @access public
  618. * @return void
  619. */
  620. function testScaffoldParams() {
  621. $this->Controller->action = 'admin_edit';
  622. $this->Controller->here = '/admin/scaffold_mock/edit';
  623. $this->Controller->webroot = '/';
  624. $params = array(
  625. 'plugin' => null,
  626. 'pass' => array(),
  627. 'form' => array(),
  628. 'named' => array(),
  629. 'url' => array('url' =>'admin/scaffold_mock/edit'),
  630. 'controller' => 'scaffold_mock',
  631. 'action' => 'admin_edit',
  632. 'admin' => true,
  633. );
  634. //set router.
  635. Router::setRequestInfo(array($params, array('base' => '/', 'here' => 'admin/scaffold_mock', 'webroot' => '/')));
  636. $this->Controller->params = $params;
  637. $this->Controller->controller = 'scaffold_mock';
  638. $this->Controller->base = '/';
  639. $this->Controller->constructClasses();
  640. $Scaffold = new TestScaffoldMock($this->Controller, $params);
  641. $result = $Scaffold->getParams();
  642. $this->assertEqual($result['action'], 'admin_edit');
  643. }
  644. /**
  645. * test that the proper names and variable values are set by Scaffold
  646. *
  647. * @return void
  648. */
  649. function testScaffoldVariableSetting() {
  650. $this->Controller->action = 'admin_edit';
  651. $this->Controller->here = '/admin/scaffold_mock/edit';
  652. $this->Controller->webroot = '/';
  653. $params = array(
  654. 'plugin' => null,
  655. 'pass' => array(),
  656. 'form' => array(),
  657. 'named' => array(),
  658. 'url' => array('url' =>'admin/scaffold_mock/edit'),
  659. 'controller' => 'scaffold_mock',
  660. 'action' => 'admin_edit',
  661. 'admin' => true,
  662. );
  663. //set router.
  664. Router::setRequestInfo(array($params, array('base' => '/', 'here' => 'admin/scaffold_mock', 'webroot' => '/')));
  665. $this->Controller->params = $params;
  666. $this->Controller->controller = 'scaffold_mock';
  667. $this->Controller->base = '/';
  668. $this->Controller->constructClasses();
  669. $Scaffold = new TestScaffoldMock($this->Controller, $params);
  670. $result = $Scaffold->controller->viewVars;
  671. $this->assertEqual($result['singularHumanName'], 'Scaffold Mock');
  672. $this->assertEqual($result['pluralHumanName'], 'Scaffold Mock');
  673. $this->assertEqual($result['modelClass'], 'ScaffoldMock');
  674. $this->assertEqual($result['primaryKey'], 'id');
  675. $this->assertEqual($result['displayField'], 'title');
  676. $this->assertEqual($result['singularVar'], 'scaffoldMock');
  677. $this->assertEqual($result['pluralVar'], 'scaffoldMock');
  678. $this->assertEqual($result['scaffoldFields'], array('id', 'user_id', 'title', 'body', 'published', 'created', 'updated'));
  679. }
  680. /**
  681. * test that scaffold outputs flash messages when sessions are unset.
  682. *
  683. * @return void
  684. */
  685. function testScaffoldFlashMessages() {
  686. $this->Controller->action = 'edit';
  687. $this->Controller->here = '/scaffold_mock';
  688. $this->Controller->webroot = '/';
  689. $params = array(
  690. 'plugin' => null,
  691. 'pass' => array(1),
  692. 'form' => array(),
  693. 'named' => array(),
  694. 'url' => array('url' =>'scaffold_mock'),
  695. 'controller' => 'scaffold_mock',
  696. 'action' => 'edit',
  697. );
  698. //set router.
  699. Router::reload();
  700. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/scaffold_mock', 'webroot' => '/')));
  701. $this->Controller->params = $params;
  702. $this->Controller->controller = 'scaffold_mock';
  703. $this->Controller->base = '/';
  704. $this->Controller->data = array(
  705. 'ScaffoldMock' => array(
  706. 'id' => 1,
  707. 'title' => 'New title',
  708. 'body' => 'new body'
  709. )
  710. );
  711. $this->Controller->constructClasses();
  712. unset($this->Controller->Session);
  713. ob_start();
  714. new Scaffold($this->Controller, $params);
  715. $result = ob_get_clean();
  716. $this->assertPattern('/Scaffold Mock has been updated/', $result);
  717. }
  718. /**
  719. * test that habtm relationship keys get added to scaffoldFields.
  720. *
  721. * @see http://code.cakephp.org/tickets/view/48
  722. * @return void
  723. */
  724. function testHabtmFieldAdditionWithScaffoldForm() {
  725. $this->Controller->action = 'edit';
  726. $this->Controller->here = '/scaffold_mock';
  727. $this->Controller->webroot = '/';
  728. $params = array(
  729. 'plugin' => null,
  730. 'pass' => array(1),
  731. 'form' => array(),
  732. 'named' => array(),
  733. 'url' => array('url' =>'scaffold_mock'),
  734. 'controller' => 'scaffold_mock',
  735. 'action' => 'edit',
  736. );
  737. //set router.
  738. Router::reload();
  739. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/scaffold_mock', 'webroot' => '/')));
  740. $this->Controller->params = $params;
  741. $this->Controller->controller = 'scaffold_mock';
  742. $this->Controller->base = '/';
  743. $this->Controller->constructClasses();
  744. ob_start();
  745. $Scaffold = new Scaffold($this->Controller, $params);
  746. $result = ob_get_clean();
  747. $this->assertPattern('/name="data\[ScaffoldTag\]\[ScaffoldTag\]"/', $result);
  748. $result = $Scaffold->controller->viewVars;
  749. $this->assertEqual($result['scaffoldFields'], array('id', 'user_id', 'title', 'body', 'published', 'created', 'updated', 'ScaffoldTag'));
  750. }
  751. /**
  752. * test that the proper names and variable values are set by Scaffold
  753. *
  754. * @return void
  755. */
  756. function testEditScaffoldWithScaffoldFields() {
  757. $this->Controller = new ScaffoldMockControllerWithFields();
  758. $this->Controller->action = 'edit';
  759. $this->Controller->here = '/scaffold_mock';
  760. $this->Controller->webroot = '/';
  761. $params = array(
  762. 'plugin' => null,
  763. 'pass' => array(1),
  764. 'form' => array(),
  765. 'named' => array(),
  766. 'url' => array('url' =>'scaffold_mock'),
  767. 'controller' => 'scaffold_mock',
  768. 'action' => 'edit',
  769. );
  770. //set router.
  771. Router::reload();
  772. Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/scaffold_mock', 'webroot' => '/')));
  773. $this->Controller->params = $params;
  774. $this->Controller->controller = 'scaffold_mock';
  775. $this->Controller->base = '/';
  776. $this->Controller->constructClasses();
  777. ob_start();
  778. new Scaffold($this->Controller, $params);
  779. $result = ob_get_clean();
  780. $this->assertNoPattern('/textarea name="data\[ScaffoldMock\]\[body\]" cols="30" rows="6" id="ScaffoldMockBody"/', $result);
  781. }
  782. }
  783. ?>