From 8c4efbb400a7bd74f91f2be1cddc48a38e72dfdd Mon Sep 17 00:00:00 2001 From: Guillaume Sainthillier Date: Mon, 14 Dec 2020 17:19:21 +0100 Subject: [PATCH 1/3] Fix #39468 issue with date immutable --- .../Doctrine/Form/DoctrineOrmTypeGuesser.php | 2 +- .../Tests/Form/DoctrineOrmTypeGuesserTest.php | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bridge/Doctrine/Form/DoctrineOrmTypeGuesser.php b/src/Symfony/Bridge/Doctrine/Form/DoctrineOrmTypeGuesser.php index d222659e5c080..231b50640f040 100644 --- a/src/Symfony/Bridge/Doctrine/Form/DoctrineOrmTypeGuesser.php +++ b/src/Symfony/Bridge/Doctrine/Form/DoctrineOrmTypeGuesser.php @@ -61,7 +61,7 @@ public function guessType(string $class, string $property) case Types::DATETIMETZ_MUTABLE: case 'vardatetime': return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', [], Guess::HIGH_CONFIDENCE); - case Types::DATE_IMMUTABLE: + case Types::DATETIME_IMMUTABLE: case Types::DATETIMETZ_IMMUTABLE: return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE); case Types::DATEINTERVAL: diff --git a/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php b/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php index 50f222d8e8c59..d24cebb30d302 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php @@ -11,16 +11,40 @@ namespace Symfony\Bridge\Doctrine\Tests\Form; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\ObjectManager; use PHPUnit\Framework\TestCase; use Symfony\Bridge\Doctrine\Form\DoctrineOrmTypeGuesser; use Symfony\Component\Form\Guess\Guess; +use Symfony\Component\Form\Guess\TypeGuess; use Symfony\Component\Form\Guess\ValueGuess; class DoctrineOrmTypeGuesserTest extends TestCase { + /** + * @dataProvider requiredType + */ + public function testTypeGuesser($classMetadata, $expected) + { + $this->assertEquals($expected, $this->getGuesser($classMetadata)->guessType('TestEntity', 'field')); + } + + public function requiredType() + { + $return = []; + + // DateTime field + $classMetadata = $this->getMockBuilder('Doctrine\ORM\Mapping\ClassMetadata')->disableOriginalConstructor()->getMock(); + $classMetadata->fieldMappings['field'] = true; + $classMetadata->expects($this->once())->method('getTypeOfField')->with('field')->willReturn(Types::DATE_IMMUTABLE); + + $return[] = [$classMetadata, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE)]; + + return $return; + } + /** * @dataProvider requiredProvider */ From 2b8b5a4219804fb0dfe3f5ed32e987eb66336c7b Mon Sep 17 00:00:00 2001 From: Guillaume Sainthillier Date: Mon, 14 Dec 2020 18:15:34 +0100 Subject: [PATCH 2/3] Added one more test --- .../Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php b/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php index d24cebb30d302..9f60ae195d5f2 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php @@ -35,13 +35,21 @@ public function requiredType() { $return = []; - // DateTime field + // DateImmutable field $classMetadata = $this->getMockBuilder('Doctrine\ORM\Mapping\ClassMetadata')->disableOriginalConstructor()->getMock(); $classMetadata->fieldMappings['field'] = true; $classMetadata->expects($this->once())->method('getTypeOfField')->with('field')->willReturn(Types::DATE_IMMUTABLE); $return[] = [$classMetadata, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE)]; + + // DateTimeImmutable field + $classMetadata = $this->getMockBuilder('Doctrine\ORM\Mapping\ClassMetadata')->disableOriginalConstructor()->getMock(); + $classMetadata->fieldMappings['field'] = true; + $classMetadata->expects($this->once())->method('getTypeOfField')->with('field')->willReturn(Types::DATETIME_IMMUTABLE); + + $return[] = [$classMetadata, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE)]; + return $return; } From b612f5ec5303fd4cb920eca4e7eaf25a72337eb0 Mon Sep 17 00:00:00 2001 From: Guillaume Sainthillier Date: Mon, 14 Dec 2020 18:56:21 +0100 Subject: [PATCH 3/3] Update src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jérémy Derussé --- .../Tests/Form/DoctrineOrmTypeGuesserTest.php | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php b/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php index 9f60ae195d5f2..458e835d5de70 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php @@ -26,31 +26,27 @@ class DoctrineOrmTypeGuesserTest extends TestCase /** * @dataProvider requiredType */ - public function testTypeGuesser($classMetadata, $expected) + public function testTypeGuesser(string $type, $expected) { + $classMetadata = $this->getMockBuilder('Doctrine\ORM\Mapping\ClassMetadata')->disableOriginalConstructor()->getMock(); + $classMetadata->fieldMappings['field'] = true; + $classMetadata->expects($this->once())->method('getTypeOfField')->with('field')->willReturn($type); + $this->assertEquals($expected, $this->getGuesser($classMetadata)->guessType('TestEntity', 'field')); } public function requiredType() { - $return = []; - - // DateImmutable field - $classMetadata = $this->getMockBuilder('Doctrine\ORM\Mapping\ClassMetadata')->disableOriginalConstructor()->getMock(); - $classMetadata->fieldMappings['field'] = true; - $classMetadata->expects($this->once())->method('getTypeOfField')->with('field')->willReturn(Types::DATE_IMMUTABLE); + yield [Types::DATE_IMMUTABLE, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE)]; + yield [Types::DATE_MUTABLE, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', [], Guess::HIGH_CONFIDENCE)]; - $return[] = [$classMetadata, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE)]; + yield [Types::TIME_IMMUTABLE, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TimeType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE)]; + yield [Types::TIME_MUTABLE, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TimeType', [], Guess::HIGH_CONFIDENCE)]; - - // DateTimeImmutable field - $classMetadata = $this->getMockBuilder('Doctrine\ORM\Mapping\ClassMetadata')->disableOriginalConstructor()->getMock(); - $classMetadata->fieldMappings['field'] = true; - $classMetadata->expects($this->once())->method('getTypeOfField')->with('field')->willReturn(Types::DATETIME_IMMUTABLE); - - $return[] = [$classMetadata, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE)]; - - return $return; + yield [Types::DATETIME_IMMUTABLE, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE)]; + yield [Types::DATETIMETZ_IMMUTABLE, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE)]; + yield [Types::DATETIME_MUTABLE, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', [], Guess::HIGH_CONFIDENCE)]; + yield [Types::DATETIMETZ_MUTABLE, new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', [], Guess::HIGH_CONFIDENCE)]; } /**