Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Allow saving new records with pre specified primary key value with tr…

…eebehavior.
  • Loading branch information...
commit 5de492fb25d441837bdc36f8596acd461faff82a 1 parent 4acc687
@ADmad ADmad authored
View
2  lib/Cake/Model/Behavior/TreeBehavior.php
@@ -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]),
View
30 lib/Cake/Test/Case/Model/Behavior/TreeBehaviorNumberTest.php
@@ -370,6 +370,36 @@ public function testAddMiddle() {
}
/**
+ * 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
*
* @return void
View
32 lib/Cake/Test/Case/Model/Behavior/TreeBehaviorUuidTest.php
@@ -21,6 +21,7 @@
App::uses('Model', 'Model');
App::uses('AppModel', 'Model');
+App::uses('String', 'Utility');
require_once dirname(dirname(__FILE__)) . DS . 'models.php';
/**
@@ -57,6 +58,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
*
* @return void
Please sign in to comment.
Something went wrong with that request. Please try again.