setParent($parent); $grandChild = (new SocialIssue())->setParent($child); $grandGrandChild = (new SocialIssue())->setParent($grandChild); $unrelated = new SocialIssue(); $this->assertTrue($grandGrandChild->isDescendantOf($parent)); $this->assertTrue($grandGrandChild->isDescendantOf($grandChild)); $this->assertTrue($grandGrandChild->isDescendantOf($child)); $this->assertFalse($grandGrandChild->isDescendantOf($unrelated)); $this->assertTrue($grandChild->isDescendantOf($parent)); $this->assertTrue($grandChild->isDescendantOf($child)); $this->assertFalse($grandChild->isDescendantOf($unrelated)); $this->assertFalse($grandChild->isDescendantOf($grandChild)); $this->assertFalse($unrelated->isDescendantOf($parent)); $this->assertFalse($child->isDescendantOf($grandChild)); } public function testFindSocialIssuesAncestors() { $socialIssues = new ArrayCollection([ $parent = new SocialIssue(), $child = (new SocialIssue())->setParent($parent), $grandChild = (new SocialIssue())->setParent($child), $grandGrandChild = (new SocialIssue())->setParent($grandChild), $unrelated = new SocialIssue(), ]); $ancestors = SocialIssue::findAncestorSocialIssues($socialIssues); $this->assertCount(3, $ancestors); $this->assertContains($parent, $ancestors); $this->assertContains($child, $ancestors); $this->assertContains($grandChild, $ancestors); } }