diff --git a/tests/Relation/CircularSavingTestCase.php b/tests/Relation/CircularSavingTestCase.php new file mode 100644 index 000000000..8c26f36d4 --- /dev/null +++ b/tests/Relation/CircularSavingTestCase.php @@ -0,0 +1,108 @@ +. + */ + +/** + * Doctrine_Relation_CircularSaving_TestCase + * + * @package Doctrine + * @author Konsta Vesterinen + * @author Jan Schaefer + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @since 1.0 + * @version $Revision$ + */ +class Doctrine_Relation_CircularSaving_TestCase extends Doctrine_UnitTestCase +{ + + public function prepareData() + { } + public function prepareTables() + { + $this->tables = array('NestTest', 'NestReference'); + + parent::prepareTables(); + } + + public function testMultiplePrimaryKeys() + { + $r = new Doctrine_Collection('NestReference'); + $r[0]->parent_id = 1; + $r[0]->child_id = 2; + $r[1]->parent_id = 2; + $r[1]->child_id = 3; + $r->save(); + + $r->delete(); + $this->conn->clear(); + $q = new Doctrine_Query(); + $coll = $q->from('NestReference')->execute(); + $this->assertEqual(count($coll), 0); + } + + public function testCircularNonEqualSelfReferencingRelationSaving() + { + $n1 = new NestTest(); + $n1->set('name', 'node1'); + $n1->save(); + $n2 = new NestTest(); + $n2->set('name', 'node2'); + $n2->save(); + + $n1->get('Children')->add($n2); + $n1->save(); + $n2->get('Children')->add($n1); + $n2->save(); + + $q = new Doctrine_Query(); + $coll = $q->from('NestReference')->execute(); + + $this->assertEqual(count($coll), 2); + + $coll->delete(); + $this->conn->clear(); + + $q = new Doctrine_Query(); + $coll = $q->from('NestReference')->execute(); + $this->assertEqual(count($coll), 0); + } + + public function testCircularEqualSelfReferencingRelationSaving() + { + $n1 = new NestTest(); + $n1->set('name', 'node1'); + $n1->save(); + $n2 = new NestTest(); + $n2->set('name', 'node2'); + $n2->save(); + + $n1->get('Relatives')->add($n2); + $n1->save(); + $n2->get('Relatives')->add($n1); + $n2->save(); + + $q = new Doctrine_Query(); + $coll = $q->from('NestReference')->execute(array(), Doctrine::FETCH_ARRAY); + + $this->assertEqual(count($coll), 1); + } +}