diff --git a/src/Rules/Doctrine/NoDocumentMockingRule.php b/src/Rules/Doctrine/NoDocumentMockingRule.php index 48911d1e4..50a0f5719 100644 --- a/src/Rules/Doctrine/NoDocumentMockingRule.php +++ b/src/Rules/Doctrine/NoDocumentMockingRule.php @@ -85,6 +85,11 @@ private function shouldSkipDocumentClass(ConstantStringType $constantStringType) if ($classReflection->isInterface()) { return true; } + + // repositories live in the Entity/Document namespace too, but cannot be created directly + if ($classReflection->isSubclassOf('Doctrine\\Persistence\\ObjectRepository')) { + return true; + } } return false; diff --git a/stubs/Doctrine/Bundle/DoctrineBundle/Repository/ServiceEntityRepository.php b/stubs/Doctrine/Bundle/DoctrineBundle/Repository/ServiceEntityRepository.php index 2edfbee84..2355ebb7d 100644 --- a/stubs/Doctrine/Bundle/DoctrineBundle/Repository/ServiceEntityRepository.php +++ b/stubs/Doctrine/Bundle/DoctrineBundle/Repository/ServiceEntityRepository.php @@ -2,10 +2,12 @@ namespace Doctrine\Bundle\DoctrineBundle\Repository; +use Doctrine\Persistence\ObjectRepository; + if (class_exists('Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository')) { return; } -abstract class ServiceEntityRepository +abstract class ServiceEntityRepository implements ObjectRepository { } diff --git a/stubs/Doctrine/Persistence/ObjectRepository.php b/stubs/Doctrine/Persistence/ObjectRepository.php new file mode 100644 index 000000000..04b9e6612 --- /dev/null +++ b/stubs/Doctrine/Persistence/ObjectRepository.php @@ -0,0 +1,11 @@ +createMock(SomeRepository::class); + } +} diff --git a/tests/Rules/Doctrine/NoDocumentMockingRule/NoDocumentMockingRuleTest.php b/tests/Rules/Doctrine/NoDocumentMockingRule/NoDocumentMockingRuleTest.php index 3056d503c..5a5f2026b 100644 --- a/tests/Rules/Doctrine/NoDocumentMockingRule/NoDocumentMockingRuleTest.php +++ b/tests/Rules/Doctrine/NoDocumentMockingRule/NoDocumentMockingRuleTest.php @@ -33,6 +33,8 @@ public static function provideData(): Iterator ]]]; yield [__DIR__ . '/Fixture/SomeAbstractEntityMocking.php', []]; + + yield [__DIR__ . '/Fixture/SomeRepositoryMocking.php', []]; } /** diff --git a/tests/Rules/Doctrine/NoDocumentMockingRule/Source/Entity/SomeRepository.php b/tests/Rules/Doctrine/NoDocumentMockingRule/Source/Entity/SomeRepository.php new file mode 100644 index 000000000..7bb60d096 --- /dev/null +++ b/tests/Rules/Doctrine/NoDocumentMockingRule/Source/Entity/SomeRepository.php @@ -0,0 +1,9 @@ +