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()); }