From fccd08afa5015b18f010b6a6c43d38c6cd446606 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Tue, 13 Jan 2015 00:29:50 +0100 Subject: [PATCH] #1001 DDC-3005 - Basic coverage for the `HydrationCompleteHandler` --- .../Internal/HydrationCompleteHandlerTest.php | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php diff --git a/tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php b/tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php new file mode 100644 index 000000000..60ad85116 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php @@ -0,0 +1,103 @@ +. + */ + +namespace Doctrine\Tests\ORM\Internal; + +use Doctrine\Common\Persistence\Event\LifecycleEventArgs; +use Doctrine\ORM\Event\ListenersInvoker; +use Doctrine\ORM\Events; +use Doctrine\ORM\Internal\HydrationCompleteHandler; +use PHPUnit_Framework_TestCase; +use stdClass; + +/** + * Tests for {@see \Doctrine\ORM\Internal\HydrationCompleteHandler} + * + * @covers \Doctrine\ORM\Internal\HydrationCompleteHandler + */ +class HydrationCompleteHandlerTest extends PHPUnit_Framework_TestCase +{ + /** + * @var \Doctrine\ORM\UnitOfWork|\PHPUnit_Framework_MockObject_MockObject + */ + private $unitOfWork; + + /** + * @var \Doctrine\ORM\Event\ListenersInvoker|\PHPUnit_Framework_MockObject_MockObject + */ + private $listenersInvoker; + + /** + * @var \Doctrine\ORM\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $entityManager; + + /** + * @var HydrationCompleteHandler + */ + private $handler; + + /** + * {@inheritDoc} + */ + protected function setUp() + { + $this->unitOfWork = $this->getMock('Doctrine\ORM\UnitOfWork', array(), array(), '', false); + $this->listenersInvoker = $this->getMock('Doctrine\ORM\Event\ListenersInvoker', array(), array(), '', false); + $this->entityManager = $this->getMock('Doctrine\ORM\EntityManagerInterface'); + $this->handler = new HydrationCompleteHandler( + $this->unitOfWork, + $this->listenersInvoker, + $this->entityManager + ); + } + + public function testDefersPostLoadOfEntity() + { + /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ + $metadata = $this->getMock('Doctrine\ORM\Mapping\ClassMetadata', array(), array(), '', false); + $entity = new stdClass(); + $entityManager = $this->entityManager; + + $this + ->listenersInvoker + ->expects($this->any()) + ->method('getSubscribedSystems') + ->with($metadata) + ->will($this->returnValue(ListenersInvoker::INVOKE_LISTENERS)); + + $this->handler->deferPostLoadInvoking($metadata, $entity); + + $this + ->listenersInvoker + ->expects($this->once()) + ->method('invoke') + ->with( + $metadata, + Events::postLoad, + $entity, + $this->callback(function (LifecycleEventArgs $args) use ($entityManager, $entity) { + return $entity === $args->getEntity() && $entityManager === $args->getObjectManager(); + }), + ListenersInvoker::INVOKE_LISTENERS + ); + + $this->handler->hydrationComplete(); + } +}