Skip to content

Commit

Permalink
Updating Scaffold to merge hasAndBelongsToMany keys when generating f…
Browse files Browse the repository at this point in the history
…ield lists for scaffolded forms. Fixes #48
  • Loading branch information
markstory committed Aug 26, 2009
1 parent 31ec714 commit 2dca77c
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 2 deletions.
4 changes: 4 additions & 0 deletions cake/libs/controller/scaffold.php
Expand Up @@ -237,6 +237,10 @@ function __scaffoldIndex($params) {
* @access private
*/
function __scaffoldForm($action = 'edit') {
$this->controller->viewVars['scaffoldFields'] = array_merge(
$this->controller->viewVars['scaffoldFields'],
array_keys($this->ScaffoldModel->hasAndBelongsToMany)
);
$this->controller->render($action, $this->layout);
$this->_output();
}
Expand Down
66 changes: 64 additions & 2 deletions cake/tests/cases/libs/controller/scaffold.test.php
Expand Up @@ -140,6 +140,19 @@ class ScaffoldMock extends CakeTestModel {
'foreignKey' => 'article_id',
)
);
/**
* hasAndBelongsToMany property
*
* @var string
**/
var $hasAndBelongsToMany = array(
'ScaffoldTag' => array(
'className' => 'ScaffoldTag',
'foreignKey' => 'post_id',
'associationForeignKey' => 'tag_id',
'joinTable' => 'posts_tags'
)
);
}
/**
* ScaffoldUser class
Expand Down Expand Up @@ -195,6 +208,21 @@ class ScaffoldComment extends CakeTestModel {
)
);
}
/**
* ScaffoldTag class
*
* @package cake
* @subpackage cake.tests.cases.libs.controller
*/
class ScaffoldTag extends CakeTestModel {
/**
* useTable property
*
* @var string 'posts'
* @access public
*/
var $useTable = 'tags';
}
/**
* TestScaffoldView class
*
Expand Down Expand Up @@ -226,7 +254,7 @@ class ScaffoldViewTest extends CakeTestCase {
* @var array
* @access public
*/
var $fixtures = array('core.article', 'core.user', 'core.comment');
var $fixtures = array('core.article', 'core.user', 'core.comment', 'core.posts_tag', 'core.tag');
/**
* startTest method
*
Expand Down Expand Up @@ -559,7 +587,7 @@ class ScaffoldTest extends CakeTestCase {
* @var array
* @access public
*/
var $fixtures = array('core.article', 'core.user', 'core.comment');
var $fixtures = array('core.article', 'core.user', 'core.comment', 'core.posts_tag', 'core.tag');
/**
* startTest method
*
Expand Down Expand Up @@ -648,6 +676,40 @@ function testScaffoldVariableSetting() {
$this->assertEqual($result['pluralVar'], 'scaffoldMock');
$this->assertEqual($result['scaffoldFields'], array('id', 'user_id', 'title', 'body', 'published', 'created', 'updated'));
}
/**
* test that habtm relationship keys get added to scaffoldFields.
*
* @see http://code.cakephp.org/tickets/view/48
* @return void
**/
function testHabtmFieldAdditionWithScaffoldForm() {
$this->Controller->action = 'edit';
$this->Controller->here = '/scaffold_mock';
$this->Controller->webroot = '/';
$params = array(
'plugin' => null,
'pass' => array(1),
'form' => array(),
'named' => array(),
'url' => array('url' =>'scaffold_mock'),
'controller' => 'scaffold_mock',
'action' => 'edit',
);
//set router.
Router::reload();
Router::setRequestInfo(array($params, array('base' => '/', 'here' => '/scaffold_mock', 'webroot' => '/')));
$this->Controller->params = $params;
$this->Controller->controller = 'scaffold_mock';
$this->Controller->base = '/';
$this->Controller->constructClasses();
ob_start();
$Scaffold = new Scaffold($this->Controller, $params);
$result = ob_get_clean();
$this->assertPattern('/name="data\[ScaffoldTag\]\[ScaffoldTag\]"/', $result);

$result = $Scaffold->controller->viewVars;
$this->assertEqual($result['scaffoldFields'], array('id', 'user_id', 'title', 'body', 'published', 'created', 'updated', 'ScaffoldTag'));
}
/**
* test that the proper names and variable values are set by Scaffold
*
Expand Down

0 comments on commit 2dca77c

Please sign in to comment.