From 9ef3285ebbd1d4398124d9b2895fd1104ba72777 Mon Sep 17 00:00:00 2001
From: Marco Pivetta <ocramius@gmail.com>
Date: Tue, 14 Oct 2014 01:35:51 +0200
Subject: [PATCH] #1159 - verifying that
 `Doctrine\ORM\Repository\DefaultRepositoryFactory` considers custom
 repository class from metadata when instantiating repositories

---
 .../DefaultRepositoryFactoryTest.php          | 39 +++++++++++++++----
 1 file changed, 32 insertions(+), 7 deletions(-)

diff --git a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php
index e886cf88c..1d02659a6 100644
--- a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php
+++ b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php
@@ -37,12 +37,6 @@ class DefaultRepositoryFactoryTest extends PHPUnit_Framework_TestCase
         $this->configuration     = $this->getMock('Doctrine\\ORM\\Configuration');
         $this->repositoryFactory = new DefaultRepositoryFactory();
 
-        $this
-            ->entityManager
-            ->expects($this->any())
-            ->method('getClassMetadata')
-            ->will($this->returnCallback(array($this, 'buildClassMetadata')));
-
         $this
             ->entityManager
             ->expects($this->any())
@@ -58,6 +52,12 @@ class DefaultRepositoryFactoryTest extends PHPUnit_Framework_TestCase
 
     public function testCreatesRepositoryFromDefaultRepositoryClass()
     {
+        $this
+            ->entityManager
+            ->expects($this->any())
+            ->method('getClassMetadata')
+            ->will($this->returnCallback(array($this, 'buildClassMetadata')));
+
         $this->assertInstanceOf(
             'Doctrine\\Tests\\Models\\DDC869\\DDC869PaymentRepository',
             $this->repositoryFactory->getRepository($this->entityManager, __CLASS__)
@@ -66,21 +66,46 @@ class DefaultRepositoryFactoryTest extends PHPUnit_Framework_TestCase
 
     public function testCreatedRepositoriesAreCached()
     {
+        $this
+            ->entityManager
+            ->expects($this->any())
+            ->method('getClassMetadata')
+            ->will($this->returnCallback(array($this, 'buildClassMetadata')));
+
         $this->assertSame(
             $this->repositoryFactory->getRepository($this->entityManager, __CLASS__),
             $this->repositoryFactory->getRepository($this->entityManager, __CLASS__)
         );
     }
 
+    public function testCreatesRepositoryFromCustomClassMetadata()
+    {
+        $customMetadata = $this->buildClassMetadata(__DIR__);
+
+        $customMetadata->customRepositoryClassName = 'Doctrine\\Tests\\Models\\DDC753\\DDC753DefaultRepository';
+
+        $this
+            ->entityManager
+            ->expects($this->any())
+            ->method('getClassMetadata')
+            ->will($this->returnValue($customMetadata));
+
+        $this->assertInstanceOf(
+            'Doctrine\\Tests\\Models\\DDC753\\DDC753DefaultRepository',
+            $this->repositoryFactory->getRepository($this->entityManager, __CLASS__)
+        );
+    }
+
     /**
      * @private
      *
      * @param string $className
      *
-     * @return \PHPUnit_Framework_MockObject_MockObject|\Doctrine\Common\Persistence\Mapping\ClassMetadata
+     * @return \PHPUnit_Framework_MockObject_MockObject|\Doctrine\ORM\Mapping\ClassMetadata
      */
     public function buildClassMetadata($className)
     {
+        /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata|\PHPUnit_Framework_MockObject_MockObject */
         $metadata = $this
             ->getMockBuilder('Doctrine\ORM\Mapping\ClassMetadata')
             ->disableOriginalConstructor()