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
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.