From 8c54a65aa5f50eff52db88fec961fc953fd87d8a Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Tue, 13 Jan 2015 00:48:53 +0100 Subject: [PATCH] #1001 DDC-3005 - Verifying `HydrationCompleteHandler` skips over registered deferred loads that were already handled by `hydrationComplete` --- .../Internal/HydrationCompleteHandlerTest.php | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php b/tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php index bb039eb66..b767bd225 100644 --- a/tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php +++ b/tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php @@ -95,6 +95,33 @@ class HydrationCompleteHandlerTest extends PHPUnit_Framework_TestCase $this->handler->hydrationComplete(); } + + /** + * @dataProvider testGetValidListenerInvocationFlags + * + * @param int $listenersFlag + */ + public function testDefersPostLoadOfEntityOnlyOnce($listenersFlag) + { + /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ + $metadata = $this->getMock('Doctrine\ORM\Mapping\ClassMetadata', array(), array(), '', false); + $entity = new stdClass(); + + $this + ->listenersInvoker + ->expects($this->any()) + ->method('getSubscribedSystems') + ->with($metadata) + ->will($this->returnValue($listenersFlag)); + + $this->handler->deferPostLoadInvoking($metadata, $entity); + + $this->listenersInvoker->expects($this->once())->method('invoke'); + + $this->handler->hydrationComplete(); + $this->handler->hydrationComplete(); + } + /** * @dataProvider testGetValidListenerInvocationFlags * @@ -141,8 +168,8 @@ class HydrationCompleteHandlerTest extends PHPUnit_Framework_TestCase public function testSkipsDeferredPostLoadOfMetadataWithNoInvokedListeners() { /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ - $metadata = $this->getMock('Doctrine\ORM\Mapping\ClassMetadata', array(), array(), '', false); - $entity = new stdClass(); + $metadata = $this->getMock('Doctrine\ORM\Mapping\ClassMetadata', array(), array(), '', false); + $entity = new stdClass(); $this ->listenersInvoker