You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
769 lines
30 KiB
769 lines
30 KiB
<?php |
|
/** |
|
* @link https://github.com/paulzi/yii2-nested-sets |
|
* @copyright Copyright (c) 2015 PaulZi <pavel.zimakoff@gmail.com> |
|
* @license MIT (https://github.com/paulzi/yii2-nested-sets/blob/master/LICENSE) |
|
*/ |
|
|
|
namespace paulzi\nestedsets\tests; |
|
|
|
use paulzi\nestedsets\tests\migrations\TestMigration; |
|
use paulzi\nestedsets\tests\models\MultipleTreeNode; |
|
use paulzi\nestedsets\tests\models\Node; |
|
use Yii; |
|
|
|
/** |
|
* @author PaulZi <pavel.zimakoff@gmail.com> |
|
*/ |
|
class NestedSetsBehaviorTestCase extends BaseTestCase |
|
{ |
|
public function testGetParents() |
|
{ |
|
$data = [1, 4, 9]; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, Node::findOne(21)->parents)); |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(21)->parents)); |
|
|
|
$data = []; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, Node::findOne(1)->parents)); |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(1)->parents)); |
|
|
|
$data = [2, 7]; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, Node::findOne(17)->getParents(2)->all())); |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(17)->getParents(2)->all())); |
|
|
|
$data = [26, 30]; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(38)->parents)); |
|
} |
|
|
|
public function testGetParent() |
|
{ |
|
$this->assertEquals(5, Node::findOne(12)->parent->id); |
|
$this->assertEquals(5, MultipleTreeNode::findOne(12)->parent->id); |
|
|
|
$this->assertEquals(1, Node::findOne(4)->getParent()->one()->getAttribute('id')); |
|
$this->assertEquals(26, MultipleTreeNode::findOne(29)->getParent()->one()->getAttribute('id')); |
|
|
|
$this->assertEquals(null, Node::findOne(1)->parent); |
|
$this->assertEquals(null, MultipleTreeNode::findOne(1)->parent); |
|
} |
|
|
|
public function testGetRoot() |
|
{ |
|
$this->assertEquals(1, Node::findOne(16)->root->id); |
|
$this->assertEquals(26, MultipleTreeNode::findOne(28)->root->id); |
|
|
|
$this->assertEquals(1, Node::findOne(1)->getRoot()->one()->getAttribute('id')); |
|
$this->assertEquals(26, MultipleTreeNode::findOne(26)->getRoot()->one()->getAttribute('id')); |
|
} |
|
|
|
public function testGetDescendants() |
|
{ |
|
$data = [8, 9, 20, 21, 22, 10, 23, 24, 25]; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, Node::findOne(4)->descendants)); |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(4)->descendants)); |
|
|
|
$data = [2, 5, 6, 7]; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, Node::findOne(2)->getDescendants(1, true)->all())); |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(2)->getDescendants(1, true)->all())); |
|
|
|
$data = [10, 25, 24, 23, 9, 22, 21, 20, 8]; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, Node::findOne(4)->getDescendants(3, false, true)->all())); |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(4)->getDescendants(3, false, true)->all())); |
|
|
|
$data = []; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, Node::findOne(8)->descendants)); |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(8)->descendants)); |
|
} |
|
|
|
public function testGetChildren() |
|
{ |
|
$data = [8, 9, 10]; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, Node::findOne(4)->children)); |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(4)->children)); |
|
|
|
$data = []; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, Node::findOne(3)->getChildren()->all())); |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(28)->getChildren()->all())); |
|
} |
|
|
|
public function testGetLeaves() |
|
{ |
|
$data = [8, 20, 21, 22, 23, 24, 25]; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, Node::findOne(4)->leaves)); |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(4)->leaves)); |
|
|
|
$data = [3, 8]; |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, Node::findOne(1)->getLeaves(2)->all())); |
|
$this->assertEquals($data, array_map(function ($value) { return $value->id; }, MultipleTreeNode::findOne(1)->getLeaves(2)->all())); |
|
} |
|
|
|
public function testGetPrev() |
|
{ |
|
$this->assertEquals(11, Node::findOne(12)->prev->id); |
|
$this->assertEquals(11, MultipleTreeNode::findOne(12)->prev->id); |
|
|
|
$this->assertEquals(null, Node::findOne(20)->getPrev()->one()); |
|
$this->assertEquals(null, MultipleTreeNode::findOne(20)->getPrev()->one()); |
|
} |
|
|
|
public function testGetNext() |
|
{ |
|
$this->assertEquals(13, Node::findOne(12)->next->id); |
|
$this->assertEquals(13, MultipleTreeNode::findOne(12)->next->id); |
|
|
|
$this->assertEquals(null, Node::findOne(19)->getNext()->one()); |
|
$this->assertEquals(null, MultipleTreeNode::findOne(19)->getNext()->one()); |
|
} |
|
|
|
public function testPopulateTree() |
|
{ |
|
$node = Node::findOne(2); |
|
$node->populateTree(); |
|
$this->assertEquals(true, $node->isRelationPopulated('children')); |
|
$this->assertEquals(true, $node->children[0]->isRelationPopulated('children')); |
|
$this->assertEquals(11, $node->children[0]->children[0]->id); |
|
|
|
$node = MultipleTreeNode::findOne(2); |
|
$node->populateTree(1); |
|
$this->assertEquals(true, $node->isRelationPopulated('children')); |
|
$this->assertEquals(false, $node->children[0]->isRelationPopulated('children')); |
|
$this->assertEquals(5, $node->children[0]->id); |
|
|
|
$node = Node::findOne(19); |
|
$node->populateTree(); |
|
$this->assertEquals(true, $node->isRelationPopulated('children')); |
|
} |
|
|
|
public function testIsRoot() |
|
{ |
|
$this->assertTrue(Node::findOne(1)->isRoot()); |
|
$this->assertTrue(MultipleTreeNode::findOne(1)->isRoot()); |
|
$this->assertTrue(MultipleTreeNode::findOne(26)->isRoot()); |
|
|
|
$this->assertFalse(Node::findOne(3)->isRoot()); |
|
$this->assertFalse(MultipleTreeNode::findOne(3)->isRoot()); |
|
$this->assertFalse(MultipleTreeNode::findOne(37)->isRoot()); |
|
} |
|
|
|
public function testIsChildOf() |
|
{ |
|
$this->assertTrue(Node::findOne(10)->isChildOf(Node::findOne(1))); |
|
$this->assertTrue(MultipleTreeNode::findOne(10)->isChildOf(MultipleTreeNode::findOne(1))); |
|
|
|
$this->assertTrue(Node::findOne(9)->isChildOf(Node::findOne(4))); |
|
$this->assertTrue(MultipleTreeNode::findOne(9)->isChildOf(MultipleTreeNode::findOne(4))); |
|
|
|
$this->assertFalse(Node::findOne(12)->isChildOf(Node::findOne(15))); |
|
$this->assertFalse(MultipleTreeNode::findOne(12)->isChildOf(MultipleTreeNode::findOne(15))); |
|
|
|
$this->assertFalse(Node::findOne(21)->isChildOf(Node::findOne(22))); |
|
$this->assertFalse(MultipleTreeNode::findOne(21)->isChildOf(MultipleTreeNode::findOne(22))); |
|
|
|
$this->assertFalse(Node::findOne(8)->isChildOf(Node::findOne(8))); |
|
$this->assertFalse(MultipleTreeNode::findOne(8)->isChildOf(MultipleTreeNode::findOne(8))); |
|
|
|
$this->assertFalse(MultipleTreeNode::findOne(6)->isChildOf(MultipleTreeNode::findOne(27))); |
|
} |
|
|
|
public function testIsLeaf() |
|
{ |
|
$this->assertTrue(Node::findOne(3)->isLeaf()); |
|
$this->assertTrue(MultipleTreeNode::findOne(3)->isLeaf()); |
|
|
|
$this->assertFalse(Node::findOne(4)->isLeaf()); |
|
$this->assertFalse(MultipleTreeNode::findOne(4)->isLeaf()); |
|
} |
|
|
|
public function testMakeRootInsert() |
|
{ |
|
(new TestMigration())->up(); |
|
$dataSet = new ArrayDataSet(require(__DIR__ . '/data/empty.php')); |
|
$this->getDatabaseTester()->setDataSet($dataSet); |
|
$this->getDatabaseTester()->onSetUp(); |
|
|
|
$node = new Node(['slug' => 'r']); |
|
$this->assertTrue($node->makeRoot()->save()); |
|
|
|
$node = new MultipleTreeNode(['slug' => 'r1']); |
|
$this->assertTrue($node->makeRoot()->save()); |
|
|
|
$node = new MultipleTreeNode([ |
|
'slug' => 'r2', |
|
'tree' => 100, |
|
]); |
|
$this->assertTrue($node->makeRoot()->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-make-root-insert.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testMakeRootUpdate() |
|
{ |
|
$node = MultipleTreeNode::findOne(9); |
|
$this->assertTrue($node->makeRoot()->save()); |
|
|
|
$node = MultipleTreeNode::findOne(27); |
|
$node->setAttribute('tree', 100); |
|
$this->assertTrue($node->makeRoot()->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-make-root-update.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testMakeRootNewExceptionIsRaisedWhenTreeAttributeIsFalseAndRootIsExists() |
|
{ |
|
$node = new Node(['slug' => 'r']); |
|
$node->makeRoot()->save(); |
|
} |
|
|
|
public function testPrependToInsertInNoEmpty() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$this->assertTrue($node->prependTo(Node::findOne(1))->save()); |
|
|
|
$node = new MultipleTreeNode(['slug' => 'new']); |
|
$this->assertTrue($node->prependTo(MultipleTreeNode::findOne(1))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-prepend-to-insert-in-no-empty.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testPrependToInsertInEmpty() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$this->assertTrue($node->prependTo(Node::findOne(15))->save()); |
|
|
|
$node = new MultipleTreeNode(['slug' => 'new']); |
|
$this->assertTrue($node->prependTo(MultipleTreeNode::findOne(15))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-prepend-to-insert-in-empty.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testPrependToUpdateSameNode() |
|
{ |
|
$node = Node::findOne(4); |
|
$this->assertTrue($node->prependTo(Node::findOne(1))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(4); |
|
$this->assertTrue($node->prependTo(MultipleTreeNode::findOne(1))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-prepend-to-update-same-node.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testPrependToUpdateDeep() |
|
{ |
|
$node = Node::findOne(10); |
|
$this->assertTrue($node->prependTo(Node::findOne(18))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(10); |
|
$this->assertTrue($node->prependTo(MultipleTreeNode::findOne(18))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-prepend-to-update-deep.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testPrependToUpdateOut() |
|
{ |
|
$node = Node::findOne(6); |
|
$this->assertTrue($node->prependTo(Node::findOne(1))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(6); |
|
$this->assertTrue($node->prependTo(MultipleTreeNode::findOne(1))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-prepend-to-update-out.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testPrependToUpdateAnotherTree() |
|
{ |
|
$node = MultipleTreeNode::findOne(30); |
|
$this->assertTrue($node->prependTo(MultipleTreeNode::findOne(4))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-prepend-to-update-another-tree.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testPrependToUpdateSelf() |
|
{ |
|
$node = Node::findOne(2); |
|
$this->assertTrue($node->prependTo(Node::findOne(1))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(2); |
|
$this->assertTrue($node->prependTo(MultipleTreeNode::findOne(1))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/data.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testPrependToInsertExceptionIsRaisedWhenTargetIsNewRecord() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$node->prependTo(new Node())->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testPrependToUpdateExceptionIsRaisedWhenTargetIsNewRecord() |
|
{ |
|
$node = Node::findOne(2); |
|
$node->prependTo(new Node())->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testPrependToUpdateExceptionIsRaisedWhenTargetIsSame() |
|
{ |
|
$node = Node::findOne(3); |
|
$node->prependTo(Node::findOne(3))->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testPrependToUpdateExceptionIsRaisedWhenTargetIsChild() |
|
{ |
|
$node = Node::findOne(5); |
|
$node->prependTo(Node::findOne(11))->save(); |
|
} |
|
|
|
public function testAppendToInsertInNoEmpty() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$this->assertTrue($node->appendTo(Node::findOne(1))->save()); |
|
|
|
$node = new MultipleTreeNode(['slug' => 'new']); |
|
$this->assertTrue($node->appendTo(MultipleTreeNode::findOne(1))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-append-to-insert-in-no-empty.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testAppendToInsertInEmpty() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$this->assertTrue($node->appendTo(Node::findOne(15))->save()); |
|
|
|
$node = new MultipleTreeNode(['slug' => 'new']); |
|
$this->assertTrue($node->appendTo(MultipleTreeNode::findOne(15))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-append-to-insert-in-empty.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testAppendToUpdateSameNode() |
|
{ |
|
$node = Node::findOne(2); |
|
$this->assertTrue($node->appendTo(Node::findOne(1))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(2); |
|
$this->assertTrue($node->appendTo(MultipleTreeNode::findOne(1))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-append-to-update-same-node.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testAppendToUpdateDeep() |
|
{ |
|
$node = Node::findOne(10); |
|
$this->assertTrue($node->appendTo(Node::findOne(18))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(10); |
|
$this->assertTrue($node->appendTo(MultipleTreeNode::findOne(18))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-append-to-update-deep.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testAppendToUpdateOut() |
|
{ |
|
$node = Node::findOne(6); |
|
$this->assertTrue($node->appendTo(Node::findOne(1))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(6); |
|
$this->assertTrue($node->appendTo(MultipleTreeNode::findOne(1))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-append-to-update-out.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testAppendToUpdateAnotherTree() |
|
{ |
|
$node = MultipleTreeNode::findOne(30); |
|
$this->assertTrue($node->appendTo(MultipleTreeNode::findOne(4))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-append-to-update-another-tree.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testAppendToUpdateSelf() |
|
{ |
|
$node = Node::findOne(4); |
|
$this->assertTrue($node->appendTo(Node::findOne(1))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(4); |
|
$this->assertTrue($node->appendTo(MultipleTreeNode::findOne(1))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/data.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testAppendToInsertExceptionIsRaisedWhenTargetIsNewRecord() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$node->appendTo(new Node())->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testAppendToUpdateExceptionIsRaisedWhenTargetIsNewRecord() |
|
{ |
|
$node = Node::findOne(2); |
|
$node->appendTo(new Node())->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testAppendToUpdateExceptionIsRaisedWhenTargetIsSame() |
|
{ |
|
$node = Node::findOne(3); |
|
$node->appendTo(Node::findOne(3))->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testAppendToUpdateExceptionIsRaisedWhenTargetIsChild() |
|
{ |
|
$node = Node::findOne(5); |
|
$node->appendTo(Node::findOne(11))->save(); |
|
} |
|
|
|
public function testInsertBeforeMiddle() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$this->assertTrue($node->insertBefore(Node::findOne(16))->save()); |
|
|
|
$node = new MultipleTreeNode(['slug' => 'new']); |
|
$this->assertTrue($node->insertBefore(MultipleTreeNode::findOne(33))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-insert-before-insert-middle.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testInsertBeforeInsertBegin() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$this->assertTrue($node->insertBefore(Node::findOne(20))->save()); |
|
|
|
$node = new MultipleTreeNode(['slug' => 'new']); |
|
$this->assertTrue($node->insertBefore(MultipleTreeNode::findOne(31))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-insert-before-insert-begin.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testInsertBeforeUpdateSameNode() |
|
{ |
|
$node = Node::findOne(4); |
|
$this->assertTrue($node->insertBefore(Node::findOne(2))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(38); |
|
$this->assertTrue($node->insertBefore(MultipleTreeNode::findOne(37))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-insert-before-update-same-node.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testInsertBeforeUpdateOtherNode() |
|
{ |
|
$node = Node::findOne(9); |
|
$this->assertTrue($node->insertBefore(Node::findOne(16))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(35); |
|
$this->assertTrue($node->insertBefore(MultipleTreeNode::findOne(28))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-insert-before-update-other-node.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testInsertBeforeUpdateNext() |
|
{ |
|
$node = Node::findOne(12); |
|
$this->assertTrue($node->insertBefore(Node::findOne(13))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(33); |
|
$this->assertTrue($node->insertBefore(MultipleTreeNode::findOne(34))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/data.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testInsertBeforeUpdateAnotherTree() |
|
{ |
|
$node = MultipleTreeNode::findOne(26); |
|
$this->assertTrue($node->insertBefore(MultipleTreeNode::findOne(15))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-insert-before-update-another-tree.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testInsertBeforeInsertExceptionIsRaisedWhenTargetIsNewRecord() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$node->insertBefore(new Node())->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testInsertBeforeInsertExceptionIsRaisedWhenTargetIsRoot() |
|
{ |
|
$node = new Node(['name' => 'new']); |
|
$node->insertBefore(Node::findOne(1))->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testInsertBeforeUpdateExceptionIsRaisedWhenTargetIsSame() |
|
{ |
|
$node = Node::findOne(3); |
|
$node->insertBefore(Node::findOne(3))->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testInsertBeforeUpdateExceptionIsRaisedWhenTargetIsChild() |
|
{ |
|
$node = Node::findOne(10); |
|
$node->insertBefore(Node::findOne(23))->save(); |
|
} |
|
|
|
public function testInsertAfterInsertMiddle() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$this->assertTrue($node->insertAfter(Node::findOne(21))->save()); |
|
|
|
$node = new MultipleTreeNode(['slug' => 'new']); |
|
$this->assertTrue($node->insertAfter(MultipleTreeNode::findOne(37))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-insert-after-insert-middle.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testInsertAfterInsertEnd() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$this->assertTrue($node->insertAfter(Node::findOne(19))->save()); |
|
|
|
$node = new MultipleTreeNode(['slug' => 'new']); |
|
$this->assertTrue($node->insertAfter(MultipleTreeNode::findOne(33))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-insert-after-insert-end.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testInsertAfterUpdateSameNode() |
|
{ |
|
$node = Node::findOne(2); |
|
$this->assertTrue($node->insertAfter(Node::findOne(4))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(36); |
|
$this->assertTrue($node->insertAfter(MultipleTreeNode::findOne(37))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-insert-after-update-same-node.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testInsertAfterUpdateOtherNode() |
|
{ |
|
$node = Node::findOne(6); |
|
$this->assertTrue($node->insertAfter(Node::findOne(21))->save()); |
|
|
|
$node = MultipleTreeNode::findOne(32); |
|
$this->assertTrue($node->insertAfter(MultipleTreeNode::findOne(30))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-insert-after-update-other-node.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testInsertAfterUpdatePrev() |
|
{ |
|
$node = Node::findOne(16); |
|
$this->assertTrue($node->insertAfter(Node::findOne(15))->save()); |
|
|
|
|
|
$node = MultipleTreeNode::findOne(38); |
|
$this->assertTrue($node->insertAfter(MultipleTreeNode::findOne(37))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/data.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testInsertAfterUpdateAnotherTree() |
|
{ |
|
$node = MultipleTreeNode::findOne(26); |
|
$this->assertTrue($node->insertAfter(MultipleTreeNode::findOne(21))->save()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-insert-after-update-another-tree.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testInsertAfterInsertExceptionIsRaisedWhenTargetIsNewRecord() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$node->insertAfter(new Node())->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testInsertAfterInsertExceptionIsRaisedWhenTargetIsRoot() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$node->insertAfter(Node::findOne(1))->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testInsertAfterUpdateExceptionIsRaisedWhenTargetIsSame() |
|
{ |
|
$node = Node::findOne(3); |
|
$node->insertAfter(Node::findOne(3))->save(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testInsertAfterUpdateExceptionIsRaisedWhenTargetIsChild() |
|
{ |
|
$node = Node::findOne(10); |
|
$node->insertAfter(Node::findOne(23))->save(); |
|
} |
|
|
|
public function testDelete() |
|
{ |
|
$this->assertEquals(1, Node::findOne(2)->delete()); |
|
|
|
$this->assertEquals(1, MultipleTreeNode::findOne(30)->delete()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-delete.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testDeleteRoot() |
|
{ |
|
Node::findOne(1)->delete(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testDeleteExceptionIsRaisedWhenNodeIsNewRecord() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$node->delete(); |
|
} |
|
|
|
public function testDeleteWithChildren() |
|
{ |
|
$this->assertEquals(4, Node::findOne(6)->deleteWithChildren()); |
|
|
|
$this->assertEquals(1, MultipleTreeNode::findOne(28)->deleteWithChildren()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-delete-with-children.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
public function testDeleteWithChildrenRoot() |
|
{ |
|
$this->assertEquals(25, Node::findOne(1)->deleteWithChildren()); |
|
|
|
$this->assertEquals(14, MultipleTreeNode::findOne(26)->deleteWithChildren()); |
|
|
|
$dataSet = $this->getConnection()->createDataSet(['tree', 'multiple_tree']); |
|
$expectedDataSet = new ArrayDataSet(require(__DIR__ . '/data/test-delete-with-children-root.php')); |
|
$this->assertDataSetsEqual($expectedDataSet, $dataSet); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\Exception |
|
*/ |
|
public function testDeleteWithChildrenExceptionIsRaisedWhenNodeIsNewRecord() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$node->deleteWithChildren(); |
|
} |
|
|
|
/** |
|
* @expectedException \yii\base\NotSupportedException |
|
*/ |
|
public function testExceptionIsRaisedWhenInsertIsCalled() |
|
{ |
|
$node = new Node(['slug' => 'new']); |
|
$node->insert(); |
|
} |
|
|
|
public function testUpdate() |
|
{ |
|
$node = Node::findOne(3); |
|
$node->slug = 'update'; |
|
$this->assertEquals(1, $node->update()); |
|
} |
|
} |