From 80dd29a8d394b5797c92a7f07bcf433d4ca639c6 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Wed, 22 Jan 2020 23:31:34 +0100 Subject: [PATCH 1/2] add threaded find --- ...CakePHPModelToDoctrineRepositoryRector.php | 12 ++-- ...trineRepositoryClassMethodManipulator.php} | 59 +++++++++++++------ ...PHPModelToDoctrineRepositoryRectorTest.php | 16 ++--- .../Fixture/threaded.php.inc | 25 ++++++++ .../Source/ExpectedPhoneRepository.php | 19 ++++++ src/PhpParser/Node/Value/ValueResolver.php | 5 ++ 6 files changed, 105 insertions(+), 31 deletions(-) rename packages/CakePHPToSymfony/src/Rector/{NodeFactory/DoctrineRepositoryClassMethodFactory.php => NodeManipulator/DoctrineRepositoryClassMethodManipulator.php} (68%) create mode 100644 packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/threaded.php.inc create mode 100644 packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedPhoneRepository.php diff --git a/packages/CakePHPToSymfony/src/Rector/Class_/CakePHPModelToDoctrineRepositoryRector.php b/packages/CakePHPToSymfony/src/Rector/Class_/CakePHPModelToDoctrineRepositoryRector.php index f98fa08146e1..977d5bb13d9d 100644 --- a/packages/CakePHPToSymfony/src/Rector/Class_/CakePHPModelToDoctrineRepositoryRector.php +++ b/packages/CakePHPToSymfony/src/Rector/Class_/CakePHPModelToDoctrineRepositoryRector.php @@ -12,7 +12,7 @@ use PhpParser\NodeTraverser; use Rector\CakePHPToSymfony\Rector\AbstractCakePHPRector; use Rector\CakePHPToSymfony\Rector\NodeFactory\DoctrineNodeFactory; -use Rector\CakePHPToSymfony\Rector\NodeFactory\DoctrineRepositoryClassMethodFactory; +use Rector\CakePHPToSymfony\Rector\NodeManipulator\DoctrineRepositoryClassMethodManipulator; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\RectorDefinition\CodeSample; use Rector\RectorDefinition\RectorDefinition; @@ -27,9 +27,9 @@ final class CakePHPModelToDoctrineRepositoryRector extends AbstractCakePHPRector { /** - * @var DoctrineRepositoryClassMethodFactory + * @var DoctrineRepositoryClassMethodManipulator */ - private $doctrineRepositoryClassMethodFactory; + private $doctrineRepositoryClassMethodManipulator; /** * @var DoctrineNodeFactory @@ -37,10 +37,10 @@ final class CakePHPModelToDoctrineRepositoryRector extends AbstractCakePHPRector private $doctrineNodeFactory; public function __construct( - DoctrineRepositoryClassMethodFactory $doctrineRepositoryClassMethodFactory, + DoctrineRepositoryClassMethodManipulator $doctrineRepositoryClassMethodManipulator, DoctrineNodeFactory $doctrineNodeFactory ) { - $this->doctrineRepositoryClassMethodFactory = $doctrineRepositoryClassMethodFactory; + $this->doctrineRepositoryClassMethodManipulator = $doctrineRepositoryClassMethodManipulator; $this->doctrineNodeFactory = $doctrineNodeFactory; } @@ -247,7 +247,7 @@ private function createRepositoryClass(Class_ $class, array $repositoryMethods): $repositoryClass->stmts[] = $this->doctrineNodeFactory->createConstructorWithGetRepositoryAssign($entityClass); foreach ($repositoryMethods as $repositoryMethod) { - $doctrineRepositoryClassMethod = $this->doctrineRepositoryClassMethodFactory->createFromCakePHPClassMethod( + $doctrineRepositoryClassMethod = $this->doctrineRepositoryClassMethodManipulator->createFromCakePHPClassMethod( $repositoryMethod, $entityClass ); diff --git a/packages/CakePHPToSymfony/src/Rector/NodeFactory/DoctrineRepositoryClassMethodFactory.php b/packages/CakePHPToSymfony/src/Rector/NodeManipulator/DoctrineRepositoryClassMethodManipulator.php similarity index 68% rename from packages/CakePHPToSymfony/src/Rector/NodeFactory/DoctrineRepositoryClassMethodFactory.php rename to packages/CakePHPToSymfony/src/Rector/NodeManipulator/DoctrineRepositoryClassMethodManipulator.php index 8286d5fd4c81..21542423a832 100644 --- a/packages/CakePHPToSymfony/src/Rector/NodeFactory/DoctrineRepositoryClassMethodFactory.php +++ b/packages/CakePHPToSymfony/src/Rector/NodeManipulator/DoctrineRepositoryClassMethodManipulator.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Rector\CakePHPToSymfony\Rector\NodeFactory; +namespace Rector\CakePHPToSymfony\Rector\NodeManipulator; use Nette\Utils\Strings; use PhpParser\Node; @@ -22,7 +22,7 @@ use Rector\PhpParser\Node\Value\ValueResolver; use Rector\PhpParser\NodeTraverser\CallableNodeTraverser; -final class DoctrineRepositoryClassMethodFactory +final class DoctrineRepositoryClassMethodManipulator { /** * @var CallableNodeTraverser @@ -62,32 +62,37 @@ function (Node $node) use ($entityClass) { return null; } - $this->createMethodByKind($node, $entityClass); + $this->refactorClassMethodByKind($node, $entityClass); } ); return $classMethod; } - private function createMethodByKind(MethodCall $methodCall, string $entityClass): void + private function refactorClassMethodByKind(MethodCall $methodCall, string $entityClass): void { $findKind = $this->valueResolver->getValue($methodCall->args[0]->value); if ($findKind === 'all') { - $methodCall->var = new PropertyFetch(new Variable('this'), 'repository'); - $methodCall->name = new Identifier('findAll'); - $methodCall->args = []; + $this->refactorMethodByAll($methodCall); } elseif ($findKind === 'first') { - $methodCall->name = new Identifier('findOneBy'); + $this->refactorMethodByFirst($methodCall, $entityClass); + } elseif ($findKind === 'threaded') { + $methodCall->name = new Identifier('findBy'); unset($methodCall->args[0]); if (! isset($methodCall->args[1])) { return; } + $possibleArray = $methodCall->args[1]->value; + if (! $possibleArray instanceof Array_) { + return; + } + $conditionsArrayItem = $this->getItemByKey($possibleArray, 'conditions'); + if ($conditionsArrayItem === null) { + return; + } - $firstArgument = $methodCall->args[1]->value; - assert($firstArgument instanceof Array_); - - $methodCall->args = $this->createFindOneByArgs($entityClass, $firstArgument); + $methodCall->args = [new Arg($conditionsArrayItem->value)]; } else { throw new NotImplementedException(); } @@ -100,7 +105,7 @@ private function getItemByKey(Array_ $array, string $key): ?ArrayItem continue; } - if ($this->valueResolver->getValue($arrayItem->key) !== $key) { + if (! $this->valueResolver->isValue($arrayItem->key, $key)) { continue; } @@ -110,11 +115,9 @@ private function getItemByKey(Array_ $array, string $key): ?ArrayItem return null; } - private function clearStringFromEntityPrefix(String_ $string, string $entityClass): String_ + private function clearStringFromEntityPrefix(String_ $string, string $entityClass): void { $string->value = Strings::replace($string->value, '#^' . $entityClass . '\.#'); - - return $string; } /** @@ -155,7 +158,29 @@ private function removeEntityPrefixFromConditionKeys(Array_ $conditionArray, str continue; } - $conditionArrayItem->key = $this->clearStringFromEntityPrefix($conditionArrayItem->key, $entityClass); + $this->clearStringFromEntityPrefix($conditionArrayItem->key, $entityClass); + } + } + + private function refactorMethodByFirst(MethodCall $methodCall, string $entityClass): void + { + $methodCall->name = new Identifier('findOneBy'); + unset($methodCall->args[0]); + + if (! isset($methodCall->args[1])) { + return; } + + $firstArgument = $methodCall->args[1]->value; + assert($firstArgument instanceof Array_); + + $methodCall->args = $this->createFindOneByArgs($entityClass, $firstArgument); + } + + private function refactorMethodByAll(MethodCall $methodCall): void + { + $methodCall->var = new PropertyFetch(new Variable('this'), 'repository'); + $methodCall->name = new Identifier('findAll'); + $methodCall->args = []; } } diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/CakePHPModelToDoctrineRepositoryRectorTest.php b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/CakePHPModelToDoctrineRepositoryRectorTest.php index 7da29e00b796..2fe261546c9c 100644 --- a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/CakePHPModelToDoctrineRepositoryRectorTest.php +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/CakePHPModelToDoctrineRepositoryRectorTest.php @@ -4,27 +4,27 @@ namespace Rector\CakePHPToSymfony\Tests\Rector\Class_\CakePHPModelToDoctrineRepositoryRector; -use Iterator; use Rector\CakePHPToSymfony\Rector\Class_\CakePHPModelToDoctrineRepositoryRector; use Rector\Testing\PHPUnit\AbstractRectorTestCase; final class CakePHPModelToDoctrineRepositoryRectorTest extends AbstractRectorTestCase { - /** - * @dataProvider provideDataForTest() - */ - public function test(string $file): void + public function test(): void { - $this->doTestFile($file); + $this->doTestFile(__DIR__ . '/Fixture/fixture.php.inc'); $repositoryFilePath = $this->getTempPath() . '/ActivityRepository.php'; $this->assertFileExists($repositoryFilePath); $this->assertFileEquals(__DIR__ . '/Source/ExpectedActivityRepository.php', $repositoryFilePath); } - public function provideDataForTest(): Iterator + public function testThreaded(): void { - return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture'); + $this->doTestFile(__DIR__ . '/Fixture/threaded.php.inc'); + + $repositoryFilePath = $this->getTempPath() . '/PhoneRepository.php'; + $this->assertFileExists($repositoryFilePath); + $this->assertFileEquals(__DIR__ . '/Source/ExpectedPhoneRepository.php', $repositoryFilePath); } protected function getRectorClass(): string diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/threaded.php.inc b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/threaded.php.inc new file mode 100644 index 000000000000..d8c060dd1d4f --- /dev/null +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/threaded.php.inc @@ -0,0 +1,25 @@ +find('threaded', [ + 'conditions' => ['article_id' => 50] + ]); + } +} + +?> +----- + diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedPhoneRepository.php b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedPhoneRepository.php new file mode 100644 index 000000000000..ccf2256ac2eb --- /dev/null +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedPhoneRepository.php @@ -0,0 +1,19 @@ +repository = $entityManager->getRepository(\Phone::class); + } + public function getAll() + { + return $this->findBy(['article_id' => 50]); + } +} diff --git a/src/PhpParser/Node/Value/ValueResolver.php b/src/PhpParser/Node/Value/ValueResolver.php index 8e25c256fe85..58fc621c4153 100644 --- a/src/PhpParser/Node/Value/ValueResolver.php +++ b/src/PhpParser/Node/Value/ValueResolver.php @@ -55,6 +55,11 @@ public function __construct( $this->nodeTypeResolver = $nodeTypeResolver; } + public function isValue(Expr $expr, $value): bool + { + return $this->getValue($expr) === $value; + } + /** * @return mixed|null */ From d5bf9bd183baaf1ed48ce5a2b664287315cb3013 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Wed, 22 Jan 2020 23:42:32 +0100 Subject: [PATCH 2/2] add count, add data provider --- ...CakePHPModelToDoctrineRepositoryRector.php | 1 + ...ctrineRepositoryClassMethodManipulator.php | 93 +++++++++++++------ ...PHPModelToDoctrineRepositoryRectorTest.php | 43 ++++++--- .../Fixture/find_all.php.inc | 25 +++++ .../Fixture/find_count.php.inc | 25 +++++ .../{fixture.php.inc => find_first.inc} | 15 +-- ...threaded.php.inc => find_threaded.php.inc} | 4 +- .../Fixture/list.php.inc | 27 ++++++ ...tory.php => ExpectedFindAllRepository.php} | 9 +- .../Source/ExpectedFindCountRepository.php | 19 ++++ .../Source/ExpectedFindFirstRepository.php | 20 ++++ .../Source/ExpectedFindThreadedRepository.php | 19 ++++ ...ository.php => ExpectedListRepository.php} | 6 +- .../RemoveDelegatingParentCallRector.php | 3 +- 14 files changed, 246 insertions(+), 63 deletions(-) create mode 100644 packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_all.php.inc create mode 100644 packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_count.php.inc rename packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/{fixture.php.inc => find_first.inc} (64%) rename packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/{threaded.php.inc => find_threaded.php.inc} (87%) create mode 100644 packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/list.php.inc rename packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/{ExpectedActivityRepository.php => ExpectedFindAllRepository.php} (58%) create mode 100644 packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindCountRepository.php create mode 100644 packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindFirstRepository.php create mode 100644 packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindThreadedRepository.php rename packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/{ExpectedPhoneRepository.php => ExpectedListRepository.php} (67%) diff --git a/packages/CakePHPToSymfony/src/Rector/Class_/CakePHPModelToDoctrineRepositoryRector.php b/packages/CakePHPToSymfony/src/Rector/Class_/CakePHPModelToDoctrineRepositoryRector.php index 977d5bb13d9d..5b598dc778d4 100644 --- a/packages/CakePHPToSymfony/src/Rector/Class_/CakePHPModelToDoctrineRepositoryRector.php +++ b/packages/CakePHPToSymfony/src/Rector/Class_/CakePHPModelToDoctrineRepositoryRector.php @@ -20,6 +20,7 @@ /** * @see https://book.cakephp.org/2/en/models/retrieving-your-data.html#find + * ↓ * @see https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/tutorials/getting-started.html#entity-repositories * * @see \Rector\CakePHPToSymfony\Tests\Rector\Class_\CakePHPModelToDoctrineRepositoryRector\CakePHPModelToDoctrineRepositoryRectorTest diff --git a/packages/CakePHPToSymfony/src/Rector/NodeManipulator/DoctrineRepositoryClassMethodManipulator.php b/packages/CakePHPToSymfony/src/Rector/NodeManipulator/DoctrineRepositoryClassMethodManipulator.php index 21542423a832..d2c4f3bd311d 100644 --- a/packages/CakePHPToSymfony/src/Rector/NodeManipulator/DoctrineRepositoryClassMethodManipulator.php +++ b/packages/CakePHPToSymfony/src/Rector/NodeManipulator/DoctrineRepositoryClassMethodManipulator.php @@ -18,6 +18,7 @@ use PhpParser\Node\Scalar\String_; use PhpParser\Node\Stmt\ClassMethod; use Rector\Exception\NotImplementedException; +use Rector\Exception\ShouldNotHappenException; use Rector\PhpParser\Node\Resolver\NameResolver; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\PhpParser\NodeTraverser\CallableNodeTraverser; @@ -77,24 +78,27 @@ private function refactorClassMethodByKind(MethodCall $methodCall, string $entit } elseif ($findKind === 'first') { $this->refactorMethodByFirst($methodCall, $entityClass); } elseif ($findKind === 'threaded') { - $methodCall->name = new Identifier('findBy'); + $this->refactorToRepositoryMethod($methodCall, 'findBy'); + unset($methodCall->args[0]); - if (! isset($methodCall->args[1])) { - return; - } - $possibleArray = $methodCall->args[1]->value; - if (! $possibleArray instanceof Array_) { + $conditionsArray = $this->findConfigurationByKey($methodCall, 'conditions', $entityClass); + if ($conditionsArray === null) { return; } - $conditionsArrayItem = $this->getItemByKey($possibleArray, 'conditions'); - if ($conditionsArrayItem === null) { + + $methodCall->args = [new Arg($conditionsArray)]; + } elseif ($findKind === 'count') { + $this->refactorToRepositoryMethod($methodCall, 'count'); + + $conditionsArray = $this->findConfigurationByKey($methodCall, 'conditions', $entityClass); + if ($conditionsArray === null) { return; } - $methodCall->args = [new Arg($conditionsArrayItem->value)]; + $methodCall->args = [new Arg($conditionsArray)]; } else { - throw new NotImplementedException(); + throw new NotImplementedException(__METHOD__); } } @@ -123,28 +127,24 @@ private function clearStringFromEntityPrefix(String_ $string, string $entityClas /** * @return Arg[] */ - private function createFindOneByArgs(string $entityClass, Array_ $firstArgument): array + private function createFindOneByArgs(string $entityClass, MethodCall $methodCall): array { $args = []; - /** @var Array_ $firstArgument */ - $conditionsArrayItem = $this->getItemByKey($firstArgument, 'conditions'); - if ($conditionsArrayItem !== null && $conditionsArrayItem->value instanceof Array_) { - $conditionArray = $conditionsArrayItem->value; - $this->removeEntityPrefixFromConditionKeys($conditionArray, $entityClass); - $args[] = new Arg($conditionArray); + $conditionsArray = $this->findConfigurationByKey($methodCall, 'conditions', $entityClass); + if ($conditionsArray !== null) { + $args[] = new Arg($conditionsArray); } - $orderItem = $this->getItemByKey($firstArgument, 'order'); - if ($orderItem !== null) { + $orderArray = $this->findConfigurationByKey($methodCall, 'order', $entityClass); + + if ($orderArray !== null) { if (count($args) === 0) { $args[] = new Arg(new ConstFetch(new Name('null'))); } - /** @var Array_ $orderArray */ - $orderArray = $orderItem->value; assert(isset($orderArray->items[0])); - $args[] = new Arg($orderArray->items[0]->value); + $args[] = new Arg($orderArray->items[0]); } return $args; @@ -164,23 +164,60 @@ private function removeEntityPrefixFromConditionKeys(Array_ $conditionArray, str private function refactorMethodByFirst(MethodCall $methodCall, string $entityClass): void { - $methodCall->name = new Identifier('findOneBy'); - unset($methodCall->args[0]); + $this->refactorToRepositoryMethod($methodCall, 'findOneBy'); + unset($methodCall->args[0]); if (! isset($methodCall->args[1])) { return; } $firstArgument = $methodCall->args[1]->value; - assert($firstArgument instanceof Array_); + if (! $firstArgument instanceof Array_) { + return; + } - $methodCall->args = $this->createFindOneByArgs($entityClass, $firstArgument); + $methodCall->args = $this->createFindOneByArgs($entityClass, $methodCall); } private function refactorMethodByAll(MethodCall $methodCall): void { - $methodCall->var = new PropertyFetch(new Variable('this'), 'repository'); - $methodCall->name = new Identifier('findAll'); + $this->refactorToRepositoryMethod($methodCall, 'findAll'); + $methodCall->args = []; } + + private function refactorToRepositoryMethod(MethodCall $methodCall, string $methodName): void + { + $methodCall->var = new PropertyFetch(new Variable('this'), 'repository'); + $methodCall->name = new Identifier($methodName); + } + + private function findConfigurationByKey( + MethodCall $methodCall, + string $configurationKey, + string $entityClass + ): ?Array_ { + if (! isset($methodCall->args[1])) { + return null; + } + + $possibleArray = $methodCall->args[1]->value; + if (! $possibleArray instanceof Array_) { + return null; + } + + $conditionsArrayItem = $this->getItemByKey($possibleArray, $configurationKey); + if ($conditionsArrayItem === null) { + return null; + } + + $conditionsArrayItemArray = $conditionsArrayItem->value; + if (! $conditionsArrayItemArray instanceof Array_) { + throw new ShouldNotHappenException(); + } + + $this->removeEntityPrefixFromConditionKeys($conditionsArrayItemArray, $entityClass); + + return $conditionsArrayItemArray; + } } diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/CakePHPModelToDoctrineRepositoryRectorTest.php b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/CakePHPModelToDoctrineRepositoryRectorTest.php index 2fe261546c9c..326cbb881534 100644 --- a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/CakePHPModelToDoctrineRepositoryRectorTest.php +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/CakePHPModelToDoctrineRepositoryRectorTest.php @@ -4,27 +4,48 @@ namespace Rector\CakePHPToSymfony\Tests\Rector\Class_\CakePHPModelToDoctrineRepositoryRector; +use Iterator; use Rector\CakePHPToSymfony\Rector\Class_\CakePHPModelToDoctrineRepositoryRector; use Rector\Testing\PHPUnit\AbstractRectorTestCase; final class CakePHPModelToDoctrineRepositoryRectorTest extends AbstractRectorTestCase { - public function test(): void + /** + * @dataProvider provideDataForTest() + */ + public function test(string $file, string $expectedRepositoryFilePath, string $expectedRepositoryContentFile): void { - $this->doTestFile(__DIR__ . '/Fixture/fixture.php.inc'); + $this->doTestFile($file); - $repositoryFilePath = $this->getTempPath() . '/ActivityRepository.php'; - $this->assertFileExists($repositoryFilePath); - $this->assertFileEquals(__DIR__ . '/Source/ExpectedActivityRepository.php', $repositoryFilePath); + $this->assertFileExists($expectedRepositoryFilePath); + $this->assertFileEquals($expectedRepositoryContentFile, $expectedRepositoryFilePath); } - public function testThreaded(): void + public function provideDataForTest(): Iterator { - $this->doTestFile(__DIR__ . '/Fixture/threaded.php.inc'); - - $repositoryFilePath = $this->getTempPath() . '/PhoneRepository.php'; - $this->assertFileExists($repositoryFilePath); - $this->assertFileEquals(__DIR__ . '/Source/ExpectedPhoneRepository.php', $repositoryFilePath); + yield [ + __DIR__ . '/Fixture/find_first.inc', + $this->getTempPath() . '/FindFirstRepository.php', + __DIR__ . '/Source/ExpectedFindFirstRepository.php', + ]; + + yield [ + __DIR__ . '/Fixture/find_all.php.inc', + $this->getTempPath() . '/FindAllRepository.php', + __DIR__ . '/Source/ExpectedFindAllRepository.php', + ]; + + yield [ + __DIR__ . '/Fixture/find_threaded.php.inc', + $this->getTempPath() . '/FindThreadedRepository.php', + __DIR__ . '/Source/ExpectedFindThreadedRepository.php', + ]; + + yield [ + __DIR__ . '/Fixture/find_count.php.inc', + $this->getTempPath() . '/FindCountRepository.php', + __DIR__ . '/Source/ExpectedFindCountRepository.php', + ]; } protected function getRectorClass(): string diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_all.php.inc b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_all.php.inc new file mode 100644 index 000000000000..72758f626329 --- /dev/null +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_all.php.inc @@ -0,0 +1,25 @@ +find('all'); + + return $result; + } +} + +?> +----- + diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_count.php.inc b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_count.php.inc new file mode 100644 index 000000000000..9185d34330b5 --- /dev/null +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_count.php.inc @@ -0,0 +1,25 @@ +find('count', [ + 'conditions' => ['article_id' => 50] + ]); + } +} + +?> +----- + diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/fixture.php.inc b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_first.inc similarity index 64% rename from packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/fixture.php.inc rename to packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_first.inc index 971d7099d6d7..46cd874422ac 100644 --- a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/fixture.php.inc +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_first.inc @@ -2,21 +2,14 @@ namespace Rector\CakePHPToSymfony\Tests\Rector\Class_\CakePHPModelToDoctrineRepositoryRector\Fixture; -class Activity extends \AppModel +class FindFirst extends \AppModel { - public function getAll() - { - $result = $this->find('all'); - - return $result; - } - public function getOne() { $result = $this->find('first', [ 'conditions' => [ - 'Activity.revision_number' => $versionId, - 'Activity.document_id' => $documentId, + 'FindFirst.revision_number' => $versionId, + 'FindFirst.document_id' => $documentId, ], 'order' => [ 'created DESC', @@ -33,7 +26,7 @@ class Activity extends \AppModel namespace Rector\CakePHPToSymfony\Tests\Rector\Class_\CakePHPModelToDoctrineRepositoryRector\Fixture; -class Activity +class FindFirst { } diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/threaded.php.inc b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_threaded.php.inc similarity index 87% rename from packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/threaded.php.inc rename to packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_threaded.php.inc index d8c060dd1d4f..1f06aff4e6ca 100644 --- a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/threaded.php.inc +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/find_threaded.php.inc @@ -2,7 +2,7 @@ namespace Rector\CakePHPToSymfony\Tests\Rector\Class_\CakePHPModelToDoctrineRepositoryRector\Fixture; -class Phone extends \AppModel +class FindThreaded extends \AppModel { public function getAll() { @@ -18,7 +18,7 @@ class Phone extends \AppModel namespace Rector\CakePHPToSymfony\Tests\Rector\Class_\CakePHPModelToDoctrineRepositoryRector\Fixture; -class Phone +class FindThreaded { } diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/list.php.inc b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/list.php.inc new file mode 100644 index 000000000000..935c3f3cb2b1 --- /dev/null +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Fixture/list.php.inc @@ -0,0 +1,27 @@ +find('list', [ + 'conditions' => ['List_.status' => 'pending'], + ]); + + return $result; + } +} + +?> +----- + diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedActivityRepository.php b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindAllRepository.php similarity index 58% rename from packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedActivityRepository.php rename to packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindAllRepository.php index 830f96616b38..ca97baa2621b 100644 --- a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedActivityRepository.php +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindAllRepository.php @@ -2,7 +2,7 @@ namespace Rector\CakePHPToSymfony\Tests\Rector\Class_\CakePHPModelToDoctrineRepositoryRector\Fixture; -class ActivityRepository +class FindAllRepository { /** * @var \Doctrine\ORM\EntityRepository @@ -10,16 +10,11 @@ class ActivityRepository private $repository; public function __construct(\Doctrine\ORM\EntityManagerInterface $entityManager) { - $this->repository = $entityManager->getRepository(\Activity::class); + $this->repository = $entityManager->getRepository(\FindAll::class); } public function getAll() { $result = $this->repository->findAll(); return $result; } - public function getOne() - { - $result = $this->findOneBy(['revision_number' => $versionId, 'document_id' => $documentId], 'created DESC'); - return $result; - } } diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindCountRepository.php b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindCountRepository.php new file mode 100644 index 000000000000..8fd7fd48a93d --- /dev/null +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindCountRepository.php @@ -0,0 +1,19 @@ +repository = $entityManager->getRepository(\FindCount::class); + } + public function getAll() + { + return $this->repository->count(['article_id' => 50]); + } +} diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindFirstRepository.php b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindFirstRepository.php new file mode 100644 index 000000000000..1f3c328878d5 --- /dev/null +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindFirstRepository.php @@ -0,0 +1,20 @@ +repository = $entityManager->getRepository(\FindFirst::class); + } + public function getOne() + { + $result = $this->repository->findOneBy(['revision_number' => $versionId, 'document_id' => $documentId], 'created DESC'); + return $result; + } +} diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindThreadedRepository.php b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindThreadedRepository.php new file mode 100644 index 000000000000..bc4250794f35 --- /dev/null +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedFindThreadedRepository.php @@ -0,0 +1,19 @@ +repository = $entityManager->getRepository(\FindThreaded::class); + } + public function getAll() + { + return $this->repository->findBy(['article_id' => 50]); + } +} diff --git a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedPhoneRepository.php b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedListRepository.php similarity index 67% rename from packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedPhoneRepository.php rename to packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedListRepository.php index ccf2256ac2eb..4a4c5f62ef80 100644 --- a/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedPhoneRepository.php +++ b/packages/CakePHPToSymfony/tests/Rector/Class_/CakePHPModelToDoctrineRepositoryRector/Source/ExpectedListRepository.php @@ -2,7 +2,7 @@ namespace Rector\CakePHPToSymfony\Tests\Rector\Class_\CakePHPModelToDoctrineRepositoryRector\Fixture; -class PhoneRepository +class FindListRepository { /** * @var \Doctrine\ORM\EntityRepository @@ -10,10 +10,10 @@ class PhoneRepository private $repository; public function __construct(\Doctrine\ORM\EntityManagerInterface $entityManager) { - $this->repository = $entityManager->getRepository(\Phone::class); + $this->repository = $entityManager->getRepository(\FindList::class); } public function getAll() { - return $this->findBy(['article_id' => 50]); + return $this->repository->count(['article_id' => 50]); } } diff --git a/packages/DeadCode/src/Rector/ClassMethod/RemoveDelegatingParentCallRector.php b/packages/DeadCode/src/Rector/ClassMethod/RemoveDelegatingParentCallRector.php index 38f10a05f123..137e42f3637f 100644 --- a/packages/DeadCode/src/Rector/ClassMethod/RemoveDelegatingParentCallRector.php +++ b/packages/DeadCode/src/Rector/ClassMethod/RemoveDelegatingParentCallRector.php @@ -275,7 +275,8 @@ private function areParameterDefaultsDifferent( return true; } if ($parameter->isDefaultValueAvailable() && $methodParam->default !== null && - $parameter->getDefaultValue() !== $this->valueResolver->getValue($methodParam->default)) { + ! $this->valueResolver->isValue($methodParam->default, $parameter->getDefaultValue()) + ) { return true; } }