Browse Source

Implemented deleting a subtree

Jose Lorenzo Rodriguez 12 years ago
parent
commit
70b10c8bf5

+ 4 - 2
src/Model/Behavior/TreeBehavior.php

@@ -118,8 +118,10 @@ class TreeBehavior extends Behavior {
 		$diff = $right - $left + 1;
 
 		if ($diff > 2) {
-			$this->_table->deleteAll(['left >=' => $left + 1, 'left <=' => $right - 1]);
-			return;
+			$this->_table->deleteAll([
+				"{$config['left']} >=" => $left + 1,
+				"{$config['left']} <=" => $right - 1
+			]);
 		}
 
 		$this->_sync($diff, '-' , "> {$right}");

+ 18 - 0
tests/TestCase/Model/Behavior/TreeBehaviorTest.php

@@ -522,4 +522,22 @@ class TreeBehaviorTest extends TestCase {
 		$expected = $table->find()->order('lft')->hydrate(false)->toArray();
 		$this->assertEquals($expected, $result);
 	}
+
+
+/**
+ * Tests deleting a subtree
+ *
+ * @return void
+ */
+	public function testDeleteSubTree() {
+		$table = TableRegistry::get('NumberTrees');
+		$table->addBehavior('Tree');
+		$entity = $table->get(6);
+		$this->assertTrue($table->delete($entity));
+		$result = $table->find()->order('lft')->hydrate(false)->toArray();
+		$table->recover();
+		$expected = $table->find()->order('lft')->hydrate(false)->toArray();
+		$this->assertEquals($expected, $result);
+	}
+
 }