Build support for multiple parents (graph of scenes instead of tree)

This commit is contained in:
Austen McDonald
2016-09-17 06:52:35 +00:00
parent 570ce2cdaf
commit 4c5e1429b6
7 changed files with 88 additions and 96 deletions
+17 -15
View File
@@ -3,6 +3,8 @@ declare(strict_types=1);
namespace LotGD\Core\Tests\Models;
use Doctrine\Common\Collections\ArrayCollection;
use LotGD\Core\Models\Scene;
use LotGD\Core\Tests\CoreModelTestCase;
@@ -29,9 +31,9 @@ class SceneModelTest extends CoreModelTestCase
$this->assertEquals("The Forest", $scene->getTitle());
$this->assertEquals("This is a very dangerous and dark forest", $scene->getDescription());
$this->assertInstanceOf(Scene::class, $scene->getParent());
$this->assertEquals(true, $scene->hasParent());
$this->assertEquals(false, $scene->hasChildren());
$this->assertInstanceOf(Scene::class, $scene->getParents()[0]);
$this->assertCount(1, $scene->getParents());
$this->assertCount(0, $scene->getChildren());
$em->flush();
}
@@ -46,7 +48,7 @@ class SceneModelTest extends CoreModelTestCase
$parentScene = $em->getRepository(Scene::class)->find(1);
$childScene = $em->getRepository(Scene::class)->find(2);
$this->assertEquals($parentScene, $childScene->getParent());
$this->assertContains($parentScene, $childScene->getParents());
$this->assertContains($childScene, $parentScene->getChildren());
$em->flush();
@@ -63,31 +65,31 @@ class SceneModelTest extends CoreModelTestCase
$parentScene2 = $em->getRepository(Scene::class)->find(4);
$orphanScene = $em->getRepository(scene::class)->find(5);
$this->assertEquals(false, $orphanScene->hasParent());
$this->assertEquals(false, $orphanScene->hasChildren());
$this->assertCount(0, $orphanScene->getParents());
$this->assertCount(0, $orphanScene->getChildren());
// Assign orphanScene to parentScene1 and check relationships
$orphanScene->setParent($parentScene1);
$orphanScene->addParent($parentScene1);
$this->assertEquals(true, $orphanScene->hasParent());
$this->assertCount(1, $orphanScene->getParents());
$this->assertCount(3, $parentScene1->getChildren());
$this->assertEquals($parentScene1, $orphanScene->getParent());
$this->assertContains($parentScene1, $orphanScene->getParents());
$this->assertContains($orphanScene, $parentScene1->getChildren());
// Move the scene now to parentScene2 and check relationships
$orphanScene->setParent($parentScene2);
// Add the scene now to parentScene2 and check relationships
$orphanScene->addParent($parentScene2);
$this->assertCount(2, $parentScene1->getChildren());
$this->assertCount(3, $parentScene1->getChildren());
$this->assertCount(1, $parentScene2->getChildren());
$this->assertEquals($parentScene2, $orphanScene->getParent());
$this->assertContains($parentScene2, $orphanScene->getParents());
$this->assertContains($orphanScene, $parentScene2->getChildren());
// Make an orphan out of it again
$orphanScene->setParent(null);
$orphanScene->setParents(new ArrayCollection());
$this->assertCount(2, $parentScene1->getChildren());
$this->assertCount(0, $parentScene2->getChildren());
$this->assertEquals(false, $orphanScene->hasParent());
$this->assertCount(0, $orphanScene->getParents());
$this->assertNotContains($orphanScene, $parentScene1->getChildren());
$this->assertNotContains($orphanScene, $parentScene2->getChildren());