From 810a129a3273a3826ecedb4b744a55e33a54a3ff Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Wed, 15 Sep 2010 22:11:09 +0200 Subject: [PATCH] DDC-767 - Add testcase that shows described behavior works and not produces notices. --- .../ORM/Functional/Ticket/DDC767Test.php | 74 +++++++++++++++++++ .../Doctrine/Tests/OrmFunctionalTestCase.php | 2 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php new file mode 100644 index 000000000..e3c3975ac --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php @@ -0,0 +1,74 @@ +useModelSet('cms'); + parent::setUp(); + } + + /** + * @group DDC-767 + */ + public function testCollectionChangesInsideTransaction() + { + $user = new CmsUser(); + $user->name = "beberlei"; + $user->status = "active"; + $user->username = "beberlei"; + + $group1 = new CmsGroup(); + $group1->name = "foo"; + + $group2 = new CmsGroup(); + $group2->name = "bar"; + + $group3 = new CmsGroup(); + $group3->name = "baz"; + + $user->addGroup($group1); + $user->addGroup($group2); + + $this->_em->persist($user); + $this->_em->persist($group1); + $this->_em->persist($group2); + $this->_em->persist($group3); + + $this->_em->flush(); + $this->_em->clear(); + + /* @var $pUser CmsUser */ + $pUser = $this->_em->find(get_class($user), $user->id); + + $this->assertNotNull($pUser, "User not retrieved from database."); + + $groups = array(2, 3); + + try { + $this->_em->beginTransaction(); + + $pUser->groups->clear(); + + $this->_em->flush(); + + // Add new + foreach ($groups as $groupId) { + $pUser->addGroup($this->_em->find(get_class($group1), $groupId)); + } + + $this->_em->flush(); + $this->_em->commit(); + } catch(\Exception $e) { + $this->_em->rollback(); + } + } +} diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index a1bf2b2bf..2f305f9a8 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -264,7 +264,7 @@ abstract class OrmFunctionalTestCase extends OrmTestCase if(isset($this->_sqlLoggerStack->queries) && count($this->_sqlLoggerStack->queries)) { $queries = ""; - for($i = count($this->_sqlLoggerStack->queries)-1; $i > max(count($this->_sqlLoggerStack->queries)-25, 0); $i--) { + for($i = count($this->_sqlLoggerStack->queries)-1; $i > max(count($this->_sqlLoggerStack->queries)-25, 0) && isset($this->_sqlLoggerStack->queries[$i]); $i--) { $query = $this->_sqlLoggerStack->queries[$i]; $params = array_map(function($p) { if (is_object($p)) return get_class($p); else return "'".$p."'"; }, $query['params'] ?: array()); $queries .= ($i+1).". SQL: '".$query['sql']."' Params: ".implode(", ", $params).PHP_EOL;