Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

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
2  lib/Cake/Model/Behavior/TreeBehavior.php
View
@@ -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]),
30 lib/Cake/Test/Case/Model/Behavior/TreeBehaviorNumberTest.php
View
@@ -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
32 lib/Cake/Test/Case/Model/Behavior/TreeBehaviorUuidTest.php
View
@@ -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.