Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Allow saving new records with pre specified primary key value with tr…
…eebehavior.
  • Loading branch information
ADmad committed Oct 10, 2012
1 parent 4acc687 commit 5de492f
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/Cake/Model/Behavior/TreeBehavior.php
Expand Up @@ -178,7 +178,7 @@ public function beforeSave(Model $Model) {
extract($this->settings[$Model->alias]);

$this->_addToWhitelist($Model, array($left, $right));
if (!$Model->id) {
if (!$Model->id || !$Model->exists()) {
if (array_key_exists($parent, $Model->data[$Model->alias]) && $Model->data[$Model->alias][$parent]) {
$parentNode = $Model->find('first', array(
'conditions' => array($scope, $Model->escapeField() => $Model->data[$Model->alias][$parent]),
Expand Down
30 changes: 30 additions & 0 deletions lib/Cake/Test/Case/Model/Behavior/TreeBehaviorNumberTest.php
Expand Up @@ -369,6 +369,36 @@ public function testAddMiddle() {
$this->assertSame($validTree, true);
}

/**
* testAddWithPreSpecifiedId method
*
* @return void
*/
public function testAddWithPreSpecifiedId() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->initialize(2, 2);

$data = $this->Tree->find('first', array(
'fields' => array('id'),
'conditions' => array($modelClass . '.name' => '1.1')
));

$this->Tree->create();
$result = $this->Tree->save(array($modelClass => array(
'id' => 100,
'name' => 'testAddMiddle',
$parentField => $data[$modelClass]['id'])
));
$expected = array_merge(
array($modelClass => array('id' => 100, 'name' => 'testAddMiddle', $parentField => '2')),
$result
);
$this->assertSame($expected, $result);

$this->assertTrue($this->Tree->verify());
}

/**
* testAddInvalid method
*
Expand Down
32 changes: 32 additions & 0 deletions lib/Cake/Test/Case/Model/Behavior/TreeBehaviorUuidTest.php
Expand Up @@ -21,6 +21,7 @@

App::uses('Model', 'Model');
App::uses('AppModel', 'Model');
App::uses('String', 'Utility');
require_once dirname(dirname(__FILE__)) . DS . 'models.php';

/**
Expand Down Expand Up @@ -56,6 +57,37 @@ class TreeBehaviorUuidTest extends CakeTestCase {
*/
public $fixtures = array('core.uuid_tree');

/**
* testAddWithPreSpecifiedId method
*
* @return void
*/
public function testAddWithPreSpecifiedId() {
extract($this->settings);
$this->Tree = new $modelClass();
$this->Tree->initialize(2, 2);

$data = $this->Tree->find('first', array(
'fields' => array('id'),
'conditions' => array($modelClass . '.name' => '1.1')
));

$id = String::uuid();
$this->Tree->create();
$result = $this->Tree->save(array($modelClass => array(
'id' => $id,
'name' => 'testAddMiddle',
$parentField => $data[$modelClass]['id'])
));
$expected = array_merge(
array($modelClass => array('id' => $id, 'name' => 'testAddMiddle', $parentField => '2')),
$result
);
$this->assertSame($expected, $result);

$this->assertTrue($this->Tree->verify());
}

/**
* testMovePromote method
*
Expand Down

0 comments on commit 5de492f

Please sign in to comment.