diff --git a/tests/TreeStructureTestCase.php b/tests/TreeStructureTestCase.php new file mode 100644 index 000000000..e464c4440 --- /dev/null +++ b/tests/TreeStructureTestCase.php @@ -0,0 +1,72 @@ +hasColumn('parent_id', 'integer'); + $this->hasOne('TreeLeaf as Parent', 'TreeLeaf.parent_id', 'id'); + $this->hasMany('TreeLeaf as Children', 'TreeLeaf.parent_id'); + } +} + +class Doctrine_TreeStructure_TestCase extends Doctrine_UnitTestCase +{ + public function prepareTables() { } /* we don't need the standard tables here */ + public function prepareData() { } /* we don't need the standard data here */ + + public function testSelfReferentialRelationship() + { + $component = new TreeLeaf(); + + try { + $rel = $component->getTable()->getRelation('Parent'); + $rel = $component->getTable()->getRelation('Children'); + $this->pass(); + } catch(Doctrine_Exception $e) { + $this->fail(); + } + } + + public function testTreeLeafRelationships() + { + /* structure: + * + * o1 + * -> o2 + * -> o3 + * + * o4 + * + * thus it would be expected that o1 has 2 children and o4 is a + * leaf with no parents or children. + */ + + $o1 = new TreeLeaf(); + $o1->Parent = null; + $o1->save(); + + $o2 = new TreeLeaf(); + $o2->Parent = $o1; + $o2->save(); + + $o3 = new TreeLeaf(); + $o3->Parent = $o1; + $o3->save(); + + $o1->refresh(); + + $o4 = new TreeLeaf(); + $o4->save(); + + $this->assertFalse(isset($o1->Parent)); + $this->assertTrue(count($o1->Children) == 2); + $this->assertTrue(count($o1->get('Children')) == 2); + + $this->assertTrue(isset($o2->Parent)); + $this->assertTrue($o2->Parent == $o1); + + $this->assertTrue(count($o4->Children) == 0); + $this->assertFalse(isset($o4->Parent)); + } +} + diff --git a/tests/run.php b/tests/run.php index e4817436b..e81775fc4 100644 --- a/tests/run.php +++ b/tests/run.php @@ -136,6 +136,7 @@ $test->addTestCase(new Doctrine_Collection_TestCase()); $test->addTestCase(new Doctrine_Relation_TestCase()); $test->addTestCase(new Doctrine_Relation_Access_TestCase()); $test->addTestCase(new Doctrine_Relation_ManyToMany_TestCase()); +$test->addTestCase(new Doctrine_TreeStructure_TestCase()); // Datatypes