public function testRebuildRecomputesDepth()
 {
     $this->assertTrue(Category::isValidNestedSet());
     Category::query()->update(array('lft' => null, 'rgt' => null, 'depth' => 0));
     $this->assertFalse(Category::isValidNestedSet());
     Category::rebuild();
     $expected = array(0, 1, 1, 2, 1, 0);
     $this->assertEquals($expected, Category::all()->map(function ($n) {
         return $n->getDepth();
     })->all());
 }
 public function testMakeTreePrunesAndInserts()
 {
     with(new CategorySeeder())->run();
     $parent = Category::find(3);
     $subtree = array(array('id' => 4, 'name' => 'Child 2.1'), array('name' => 'Child 2.2'), array('name' => 'Child 2.3', 'children' => array(array('name' => 'Child 2.3.1', 'children' => array(array('name' => 'Child 2.3.1.1'), array('name' => 'Child 2.3.1.1'))), array('name' => 'Child 2.3.2'), array('name' => 'Child 2.3.3'))), array('name' => 'Child 2.4'));
     $this->assertTrue($parent->makeTree($subtree));
     $this->assertTrue(Category::isValidNestedSet());
     $expected = array(array('id' => 4, 'name' => 'Child 2.1'), array('id' => 7, 'name' => 'Child 2.2'), array('id' => 8, 'name' => 'Child 2.3', 'children' => array(array('id' => 9, 'name' => 'Child 2.3.1', 'children' => array(array('id' => 10, 'name' => 'Child 2.3.1.1'), array('id' => 11, 'name' => 'Child 2.3.1.1'))), array('id' => 12, 'name' => 'Child 2.3.2'), array('id' => 13, 'name' => 'Child 2.3.3'))), array('id' => 14, 'name' => 'Child 2.4'));
     $hierarchy = $parent->reload()->getDescendants()->toHierarchy()->toArray();
     $this->assertArraysAreEqual($expected, array_ints_keys(hmap($hierarchy, array('id', 'name'))));
     $modified = array(array('id' => 7, 'name' => 'Child 2.2'), array('id' => 8, 'name' => 'Child 2.3'), array('id' => 14, 'name' => 'Child 2.4'), array('name' => 'Child 2.5', 'children' => array(array('name' => 'Child 2.5.1', 'children' => array(array('name' => 'Child 2.5.1.1'), array('name' => 'Child 2.5.1.1'))), array('name' => 'Child 2.5.2'), array('name' => 'Child 2.5.3'))));
     $this->assertTrue($parent->makeTree($modified));
     $this->assertTrue(Category::isValidNestedSet());
     $expected = array(array('id' => 7, 'name' => 'Child 2.2'), array('id' => 8, 'name' => 'Child 2.3'), array('id' => 14, 'name' => 'Child 2.4'), array('id' => 15, 'name' => 'Child 2.5', 'children' => array(array('id' => 16, 'name' => 'Child 2.5.1', 'children' => array(array('id' => 17, 'name' => 'Child 2.5.1.1'), array('id' => 18, 'name' => 'Child 2.5.1.1'))), array('id' => 19, 'name' => 'Child 2.5.2'), array('id' => 20, 'name' => 'Child 2.5.3'))));
     $hierarchy = $parent->reload()->getDescendants()->toHierarchy()->toArray();
     $this->assertArraysAreEqual($expected, array_ints_keys(hmap($hierarchy, array('id', 'name'))));
 }
 public function testToHierarchyNestsCorrectlyNotSequential()
 {
     $parent = $this->categories('Child 1');
     $parent->children()->create(array('name' => 'Child 1.1'));
     $parent->children()->create(array('name' => 'Child 1.2'));
     $this->assertTrue(Category::isValidNestedSet());
     $expected = array('Child 1' => array('Child 1.1' => null, 'Child 1.2' => null));
     $parent->reload();
     $this->assertArraysAreEqual($expected, hmap($parent->getDescendantsAndSelf()->toHierarchy()->toArray()));
 }
 public function testNodeDeletionWithSubtreeDoesNotMakeTreeInvalid()
 {
     $this->assertTrue(Category::isValidNestedSet());
     $this->categories('Child 2')->delete();
     $this->assertTrue(Category::isValidNestedSet());
 }
 public function testMakeLastChildOfSwappingRootsWithSubtrees()
 {
     $newRoot = Category::create(array('name' => 'Root 3'));
     $this->categories('Root 1')->makeLastChildOf($newRoot);
     $this->assertTrue(Category::isValidNestedSet());
     $this->assertEquals($newRoot->getKey(), $this->categories('Root 1')->getParentId());
     $this->assertEquals(4, $this->categories('Root 1')->getLeft());
     $this->assertEquals(13, $this->categories('Root 1')->getRight());
     $this->assertEquals(8, $this->categories('Child 2.1')->getLeft());
     $this->assertEquals(9, $this->categories('Child 2.1')->getRight());
 }