8000 Run high-deps tests with ORM 3 and DBAL 4 · symfony/symfony@f5266ab · GitHub
[go: up one dir, main page]

Skip to content

Commit f5266ab

Browse files
committed
Run high-deps tests with ORM 3 and DBAL 4
1 parent 7aaa92a commit f5266ab

File tree

16 files changed

+171
-80
lines changed

16 files changed

+171
-80
lines changed

src/Symfony/Bridge/Doctrine/Test/TestRepositoryFactory.php

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,51 @@
1212
namespace Symfony\Bridge\Doctrine\Test;
1313

1414
use Doctrine\ORM\EntityManagerInterface;
15+
use Doctrine\ORM\EntityRepository;
1516
use Doctrine\ORM\Mapping\ClassMetadata;
1617
use Doctrine\ORM\Repository\RepositoryFactory;
1718
use Doctrine\Persistence\ObjectRepository;
1819

20+
if ((new \ReflectionMethod(RepositoryFactory::class, 'getRepository'))->hasReturnType()) {
21+
/** @internal */
22+
trait GetRepositoryTrait
23+
{
24+
public function getRepository(EntityManagerInterface $entityManager, string $entityName): EntityRepository
25+
{
26+
return $this->doGetRepository($entityManager, $entityName);
27+
}
28+
}
29+
} else {
30+
/** @internal */
31+
trait GetRepositoryTrait
32+
{
33+
/**
34+
* {@inheritdoc}
35+
*
36+
* @return ObjectRepository
37+
*/
38+
public function getRepository(EntityManagerInterface $entityManager, $entityName)
39+
{
40+
return $this->doGetRepository($entityManager, $entityName);
41+
}
42+
}
43+
}
44+
1945
/**
2046
* @author Andreas Braun <alcaeus@alcaeus.org>
2147
*
2248
* @deprecated since Symfony 5.3
2349
*/
2450
class TestRepositoryFactory implements RepositoryFactory
2551
{
52+
use GetRepositoryTrait;
53+
2654
/**
2755
* @var ObjectRepository[]
2856
*/
2957
private $repositoryList = [];
3058

31-
/**
32-
* {@inheritdoc}
33-
*
34-
* @return ObjectRepository
35-
*/
36-
public function getRepository(EntityManagerInterface $entityManager, $entityName)
59+
private function doGetRepository(EntityManagerInterface $entityManager, string $entityName): ObjectRepository
3760
{
3861
if (__CLASS__ === static::class) {
3962
trigger_deprecation('symfony/doctrine-bridge', '5.3', '"%s" is deprecated and will be removed in 6.0.', __CLASS__);

src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
use Doctrine\DBAL\Types\Types;
1515
use Doctrine\ORM\Mapping\ClassMetadata;
16+
use Doctrine\ORM\Mapping\JoinColumnMapping;
17+
use Doctrine\ORM\Mapping\ManyToOneAssociationMapping;
1618
use Doctrine\Persistence\ManagerRegistry;
1719
use Doctrine\Persistence\ObjectManager;
1820
use PHPUnit\Framework\TestCase;
@@ -69,33 +71,49 @@ public function testRequiredGuesserSimpleFieldNullable()
6971

7072
public function testRequiredGuesserOneToOneNullable()
7173
{
72-
$classMetadata = $this->createMock(ClassMetadata::class);
73-
$classMetadata->expects($this->once())->method('isAssociationWithSingleJoinColumn')->with('field')->willReturn(true);
74+
$classMetadata = new ClassMetadata('Acme\Entity\Foo');
7475

75-
$mapping = ['joinColumns' => [[]]];
76-
$classMetadata->expects($this->once())->method('getAssociationMapping')->with('field')->willReturn($mapping);
76+
if (class_exists(ManyToOneAssociationMapping::class)) {
77+
$associationMapping = new ManyToOneAssociationMapping('field', 'Acme\Entity\Foo', 'Acme\Entity\Bar');
78+
$associationMapping->joinColumns[] = new JoinColumnMapping('field', 'field');
79+
} else {
80+
$associationMapping = ['joinColumns' => [[]]];
81+
}
82+
$classMetadata->associationMappings['field'] = $associationMapping;
7783

7884
$this->assertEquals(new ValueGuess(false, Guess::HIGH_CONFIDENCE), $this->getGuesser($classMetadata)->guessRequired('TestEntity', 'field'));
7985
}
8086

8187
public function testRequiredGuesserOneToOneExplicitNullable()
8288
{
83-
$classMetadata = $this->createMock(ClassMetadata::class);
84-
$classMetadata->expects($this->once())->method('isAssociationWithSingleJoinColumn')->with('field')->willReturn(true);
85-
86-
$mapping = ['joinColumns' => [['nullable' => true]]];
87-
$classMetadata->expects($this->once())->method('getAssociationMapping')->with('field')->willReturn($mapping);
89+
$classMetadata = new ClassMetadata('Acme\Entity\Foo');
90+
91+
if (class_exists(ManyToOneAssociationMapping::class)) {
92+
$associationMapping = new ManyToOneAssociationMapping('field', 'Acme\Entity\Foo', 'Acme\Entity\Bar');
93+
$joinColumnMapping = new JoinColumnMapping('field', 'field');
94+
$joinColumnMapping->nullable = true;
95+
$associationMapping->joinColumns[] = $joinColumnMapping;
96+
} else {
97+
$associationMapping = ['joinColumns' => [['nullable' => true]]];
98+
}
99+
$classMetadata->associationMappings['field'] = $associationMapping;
88100

89101
$this->assertEquals(new ValueGuess(false, Guess::HIGH_CONFIDENCE), $this->getGuesser($classMetadata)->guessRequired('TestEntity', 'field'));
90102
}
91103

92104
public function testRequiredGuesserOneToOneNotNullable()
93105
{
94-
$classMetadata = $this->createMock(ClassMetadata::class);
95-
$classMetadata->expects($this->once())->method('isAssociationWithSingleJoinColumn')->with('field')->willReturn(true);
96-
97-
$mapping = ['joinColumns' => [['nullable' => false]]];
98-
$classMetadata->expects($this->once())->method('getAssociationMapping')->with('field')->willReturn($mapping);
106+
$classMetadata = new ClassMetadata('Acme\Entity\Foo');
107+
108+
if (class_exists(ManyToOneAssociationMapping::class)) {
109+
$associationMapping = new ManyToOneAssociationMapping('field', 'Acme\Entity\Foo', 'Acme\Entity\Bar');
110+
$joinColumnMapping = new JoinColumnMapping('field', 'field');
111+
$joinColumnMapping->nullable = false;
112+
$associationMapping->joinColumns[] = $joinColumnMapping;
113+
} else {
114+
$associationMapping = ['joinColumns' => [['nullable' => false]]];
115+
}
116+
$classMetadata->associationMappings['field'] = $associationMapping;
99117

100118
$this->assertEquals(new ValueGuess(true, Guess::HIGH_CONFIDENCE), $this->getGuesser($classMetadata)->guessRequired('TestEntity', 'field'));
101119
}

src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
use PHPUnit\Framework\TestCase;
2727
use Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor;
2828
use Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\DoctrineDummy;
29+
use Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\DoctrineEmbeddable;
2930
use Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\DoctrineEnum;
3031
use Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\DoctrineGeneratedValue;
3132
use Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\DoctrineRelation;
33+
use Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\DoctrineWithEmbedded;
3234
use Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\EnumInt;
3335
use Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\EnumString;
3436
use Symfony\Component\PropertyInfo\Type;
@@ -38,7 +40,7 @@
3840
*/
3941
class DoctrineExtractorTest extends TestCase
4042
{
41-
private function createExtractor()
43+
private function createExtractor(): DoctrineExtractor
4244
{
4345
$config = class_exists(ORMSetup::class)
4446
? ORMSetup::createConfiguration(true)
@@ -109,10 +111,6 @@ public function testGetProperties()
109111

110112
public function testTestGetPropertiesWithEmbedded()
111113
{
112-
if (!class_exists(\Doctrine\ORM\Mapping\Embedded::class)) {
113-
$this->markTestSkipped('@Embedded is not available in Doctrine ORM lower than 2.5.');
114-
}
115-
116114
$this->assertEquals(
117115
[
118116
'id',
@@ -132,18 +130,14 @@ public function testExtract($property, array $type = null)
132130

133131
public function testExtractWithEmbedded()
134132
{
135-
if (!class_exists(\Doctrine\ORM\Mapping\Embedded::class)) {
136-
$this->markTestSkipped('@Embedded is not available in Doctrine ORM lower than 2.5.');
137-
}
138-
139133
$expectedTypes = [new Type(
140134
Type::BUILTIN_TYPE_OBJECT,
141135
false,
142-
'Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\DoctrineEmbeddable'
136+
DoctrineEmbeddable::class
143137
)];
144138

145139
$actualTypes = $this->createExtractor()->getTypes(
146-
'Symfony\Bridge\Doctrine\Tests\PropertyInfo\Fixtures\DoctrineWithEmbedded',
140+
DoctrineWithEmbedded::class,
147141
'embedded',
148142
[]
149143
);

src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Bridge\Doctrine\Tests\Security\User;
1313

1414
use Doctrine\ORM\EntityManager;
15+
use Doctrine\ORM\EntityRepository;
1516
use Doctrine\ORM\Tools\SchemaTool;
1617
use Doctrine\Persistence\ManagerRegistry;
1718
use Doctrine\Persistence\ObjectManager;
@@ -251,12 +252,12 @@ private function createSchema($em)
251252
}
252253
}
253254

254-
abstract class UserLoaderRepository implements ObjectRepository, UserLoaderInterface
255+
abstract class UserLoaderRepository extends EntityRepository implements UserLoaderInterface
255256
{
256257
abstract public function loadUserByIdentifier(string $identifier): ?UserInterface;
257258
}
258259

259-
abstract class PasswordUpgraderRepository implements ObjectRepository, PasswordUpgraderInterface
260+
abstract class PasswordUpgraderRepository extends EntityRepository implements PasswordUpgraderInterface
260261
{
261262
abstract public function upgradePassword(PasswordAuthenticatedUserInterface $user, string $newHashedPassword): void;
262263
}

src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Doctrine\Common\Collections\ArrayCollection;
1515
use Doctrine\DBAL\Types\Type;
1616
use Doctrine\ORM\EntityRepository;
17+
use Doctrine\ORM\Mapping\ClassMetadata;
1718
use Doctrine\ORM\Mapping\ClassMetadataInfo;
1819
use Doctrine\ORM\Tools\SchemaTool;
1920
use Doctrine\Persistence\ManagerRegistry;
@@ -114,7 +115,9 @@ protected function createEntityManagerMock($repositoryMock)
114115
->willReturn($repositoryMock)
115116
;
116117

117-
$classMetadata = $this->createMock(ClassMetadataInfo::class);
118+
$classMetadata = $this->createMock(
119+
class_exists(ClassMetadataInfo::class) ? ClassMetadataInfo::class : ClassMetadata::class
120+
);
118121
$classMetadata
119122
->expects($this->any())
120123
->method('hasField')

src/Symfony/Bridge/Doctrine/Tests/Validator/DoctrineLoaderTest.php

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Bridge\Doctrine\Tests\Validator;
1313

1414
use Doctrine\ORM\Mapping\Column;
15+
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
1516
use PHPUnit\Framework\TestCase;
1617
use Symfony\Bridge\Doctrine\Tests\DoctrineTestHelper;
1718
use Symfony\Bridge\Doctrine\Tests\Fixtures\BaseUser;
@@ -47,9 +48,12 @@ protected function setUp(): void
4748

4849
public function testLoadClassMetadata()
4950
{
50-
$validator = Validation::createValidatorBuilder()
51-
->enableAnnotationMapping(true)
52-
->addDefaultDoctrineAnnotationReader()
51+
$validatorBuilder = Validation::createValidatorBuilder()->enableAnnotationMapping(true);
52+
if (class_exists(AnnotationDriver::class) && method_exists($validatorBuilder, 'addDefaultDoctrineAnnotationReader')) {
53+
$validatorBuilder->addDefaultDoctrineAnnotationReader();
54+
}
55+
56+
$validator = $validatorBuilder
5357
->addLoader(new DoctrineLoader(DoctrineTestHelper::createTestEntityManager(), '{^Symfony\\\\Bridge\\\\Doctrine\\\\Tests\\\\Fixtures\\\\DoctrineLoader}'))
5458
->getValidator()
5559
;
@@ -157,10 +161,15 @@ public function testExtractEnum()
157161
$this->markTestSkipped('The "enumType" requires doctrine/orm 2.11.');
158162
}
159163

160-
$validator = Validation::createValidatorBuilder()
164+
$validatorBuilder = Validation::createValidatorBuilder()
161165
->addMethodMapping('loadValidatorMetadata')
162-
->enableAnnotationMapping(true)
163-
->addDefaultDoctrineAnnotationReader()
166+
->enableAnnotationMapping(true);
167+
168+
if (class_exists(AnnotationDriver::class) && method_exists($validatorBuilder, 'addDefaultDoctrineAnnotationReader')) {
169+
$validatorBuilder->addDefaultDoctrineAnnotationReader();
170+
}
171+
172+
$validator = $validatorBuilder
164173
->addLoader(new DoctrineLoader(DoctrineTestHelper::createTestEntityManager(), '{^Symfony\\\\Bridge\\\\Doctrine\\\\Tests\\\\Fixtures\\\\DoctrineLoader}'))
165174
->getValidator()
166175
;
@@ -176,9 +185,13 @@ public function testExtractEnum()
176185

177186
public function testFieldMappingsConfiguration()
178187
{
179-
$validator = Validation::createValidatorBuilder()
180-
->enableAnnotationMapping(true)
181-
->addDefaultDoctrineAnnotationReader()
188+
$validatorBuilder = Validation::createValidatorBuilder()->enableAnnotationMapping(true);
189+
190+
if (class_exists(AnnotationDriver::class) && method_exists($validatorBuilder, 'addDefaultDoctrineAnnotationReader')) {
191+
$validatorBuilder->addDefaultDoctrineAnnotationReader();
192+
}
193+
194+
$validator = $validatorBuilder
182195
->addXmlMappi 4E34 ngs([__DIR__.'/../Resources/validator/BaseUser.xml'])
183196
->addLoader(
184197
new DoctrineLoader(
@@ -206,7 +219,7 @@ public function testClassValidator(bool $expected, string $classValidatorRegexp
206219
$this->assertSame($expected, $doctrineLoader->loadClassMetadata($classMetadata));
207220
}
208221

209-
public static function regexpProvider()
222+
public static function regexpProvider(): array
210223
{
211224
return [
212225
[false, null],
@@ -218,9 +231,13 @@ public static function regexpProvider()
218231

219232
public function testClassNoAutoMapping()
220233
{
221-
$validator = Validation::createValidatorBuilder()
222-
->enableAnnotationMapping(true)
223-
->addDefaultDoctrineAnnotationReader()
234+
$validatorBuilder = Validation::createValidatorBuilder()->enableAnnotationMapping(true);
235+
236+
if (class_exists(AnnotationDriver::class) && method_exists($validatorBuilder, 'addDefaultDoctrineAnnotationReader')) {
237+
$validatorBuilder->addDefaultDoctrineAnnotationReader();
238+
}
239+
240+
$validator = $validatorBuilder
224241
->addLoader(new DoctrineLoader(DoctrineTestHelper::createTestEntityManager(), '{.*}'))
225242
->getValidator();
226243

src/Symfony/Bridge/Doctrine/Validator/DoctrineLoader.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
namespace Symfony\Bridge\Doctrine\Validator;
1313

1414
use Doctrine\ORM\EntityManagerInterface;
15-
use Doctrine\ORM\Mapping\ClassMetadataInfo;
15+
use Doctrine\ORM\Mapping\ClassMetadata as OrmClassMetadata;
1616
use Doctrine\ORM\Mapping\MappingException as OrmMappingException;
1717
use Doctrine\Persistence\Mapping\MappingException;
1818
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
@@ -54,7 +54,7 @@ public function loadClassMetadata(ClassMetadata $metadata): bool
5454
return false;
5555
}
5656

57-
if (!$doctrineMetadata instanceof ClassMetadataInfo) {
57+
if (!$doctrineMetadata instanceof OrmClassMetadata) {
5858
return false;
5959
}
6060

src/Symfony/Bridge/Doctrine/composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646
"doctrine/annotations": "^1.10.4|^2",
4747
"doctrine/collections": "^1.0|^2.0",
4848
"doctrine/data-fixtures": "^1.1",
49-
"doctrine/dbal": "^2.13.1|^3.0",
50-
"doctrine/orm": "^2.7.4",
49+
"doctrine/dbal": "^2.13.1|^3|^4",
50+
"doctrine/orm": "^2.7.4|^3",
5151
"psr/log": "^1|^2|^3"
5252
},
5353
"conflict": {

src/Symfony/Component/Cache/Tests/Fixtures/DriverWrapper.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Doctrine\DBAL\Driver;
1616
use Doctrine\DBAL\Platforms\AbstractPlatform;
1717
use Doctrine\DBAL\Schema\AbstractSchemaManager;
18+
use Doctrine\DBAL\ServerVersionProvider;
1819

1920
class DriverWrapper implements Driver
2021
{
@@ -31,9 +32,9 @@ public function connect(array $params, $username = null, $password = null, array
3132
return $this->driver->connect($params, $username, $password, $driverOptions);
3233
}
3334

34-
public function getDatabasePlatform(): AbstractPlatform
35+
public function getDatabasePlatform(ServerVersionProvider $versionProvider = null): AbstractPlatform
3536
{
36-
return $this->driver->getDatabasePlatform();
37+
return $this->driver->getDatabasePlatform($versionProvider);
3738
}
3839

3940
public function getSchemaManager(Connection $conn, AbstractPlatform $platform): AbstractSchemaManager

src/Symfony/Component/Cache/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
"require-dev": {
3535
"cache/integration-tests": "dev-master",
3636
"doctrine/cache": "^1.6|^2.0",
37-
"doctrine/dbal": "^2.13.1|^3.0",
37+
"doctrine/dbal": "^2.13.1|^3|^4",
3838
"predis/predis": "^1.1",
3939
"psr/simple-cache": "^1.0|^2.0",
4040
"symfony/config": "^4.4|^5.0|^6.0",

src/Symfony/Component/Lock/Tests/Store/DoctrineDbalStoreTest.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,22 @@ public function testCreatesTableInTransaction(string $platform)
150150
$store->save($key);
151151
}
152152

153-
public static function providePlatforms()
153+
public static function providePlatforms(): \Generator
154154
{
155155
yield [\Doctrine\DBAL\Platforms\PostgreSQLPlatform::class];
156-
yield [\Doctrine\DBAL\Platforms\PostgreSQL94Platform::class];
156+
157+
// DBAL < 4
158+
if (class_exists(\Doctrine\DBAL\Platforms\PostgreSQL94Platform::class)) {
159+
yield [\Doctrine\DBAL\Platforms\PostgreSQL94Platform::class];
160+
}
161+
157162
yield [\Doctrine\DBAL\Platforms\SqlitePlatform::class];
158163
yield [\Doctrine\DBAL\Platforms\SQLServerPlatform::class];
159-
yield [\Doctrine\DBAL\Platforms\SQLServer2012Platform::class];
164+
165+
// DBAL < 4
166+
if (class_exists(\Doctrine\DBAL\Platforms\SQLServer2012Platform::class)) {
167+
yield [\Doctrine\DBAL\Platforms\SQLServer2012Platform::class];
168+
}
160169
}
161170

162171
public function testTableCreationInTransactionNotSupported()

0 commit comments

Comments
 (0)
0