Skip to content

Commit a776ffd

Browse files
feature #42925 [DoctrineBridge] Remove DoctrineTestHelper and TestRepositoryFactory (derrabus)
This PR was merged into the 6.0 branch. Discussion ---------- [DoctrineBridge] Remove DoctrineTestHelper and TestRepositoryFactory | Q | A | ------------- | --- | Branch? | 6.0 | Bug fix? | no | New feature? | yes | Deprecations? | no | Tickets | Follows #39696 | License | MIT | Doc PR | N/A Commits ------- 71e8815 [DoctrineBridge] Remove DoctrineTestHelper and TestRepositoryFactory
2 parents 096fc6a + 71e8815 commit a776ffd

File tree

5 files changed

+106
-179
lines changed

5 files changed

+106
-179
lines changed

src/Symfony/Bridge/Doctrine/CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
6.0
5+
---
6+
7+
* Remove `DoctrineTestHelper` and `TestRepositoryFactory`
8+
49
5.3
510
---
611

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

-102
This file was deleted.

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

-73
This file was deleted.

src/Symfony/Bridge/Doctrine/Tests/DoctrineTestHelper.php

+63-2
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,74 @@
1111

1212
namespace Symfony\Bridge\Doctrine\Tests;
1313

14-
use Symfony\Bridge\Doctrine\Test\DoctrineTestHelper as TestDoctrineTestHelper;
14+
use Doctrine\Common\Annotations\AnnotationReader;
15+
use Doctrine\ORM\Configuration;
16+
use Doctrine\ORM\EntityManager;
17+
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
18+
use Doctrine\ORM\Mapping\Driver\XmlDriver;
19+
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
20+
use Doctrine\Persistence\Mapping\Driver\SymfonyFileLocator;
21+
use PHPUnit\Framework\TestCase;
1522

1623
/**
1724
* Provides utility functions needed in tests.
1825
*
1926
* @author Bernhard Schussek <bschussek@gmail.com>
2027
*/
21-
final class DoctrineTestHelper extends TestDoctrineTestHelper
28+
final class DoctrineTestHelper
2229
{
30+
/**
31+
* Returns an entity manager for testing.
32+
*/
33+
public static function createTestEntityManager(Configuration $config = null): EntityManager
34+
{
35+
if (!\extension_loaded('pdo_sqlite')) {
36+
TestCase::markTestSkipped('Extension pdo_sqlite is required.');
37+
}
38+
39+
$params = [
40+
'driver' => 'pdo_sqlite',
41+
'memory' => true,
42+
];
43+
44+
return EntityManager::create($params, $config ?? self::createTestConfiguration());
45+
}
46+
47+
public static function createTestConfiguration(): Configuration
48+
{
49+
$config = new Configuration();
50+
$config->setEntityNamespaces(['SymfonyTestsDoctrine' => 'Symfony\Bridge\Doctrine\Tests\Fixtures']);
51+
$config->setAutoGenerateProxyClasses(true);
52+
$config->setProxyDir(sys_get_temp_dir());
53+
$config->setProxyNamespace('SymfonyTests\Doctrine');
54+
$config->setMetadataDriverImpl(new AnnotationDriver(new AnnotationReader()));
55+
56+
return $config;
57+
}
58+
59+
public static function createTestConfigurationWithXmlLoader(): Configuration
60+
{
61+
$config = self::createTestConfiguration();
62+
63+
$driverChain = new MappingDriverChain();
64+
$driverChain->addDriver(
65+
new XmlDriver(
66+
new SymfonyFileLocator(
67+
[__DIR__.'/../Tests/Resources/orm' => 'Symfony\\Bridge\\Doctrine\\Tests\\Fixtures'], '.orm.xml'
68+
)
69+
),
70+
'Symfony\\Bridge\\Doctrine\\Tests\\Fixtures'
71+
);
72+
73+
$config->setMetadataDriverImpl($driverChain);
74+
75+
return $config;
76+
}
77+
78+
/**
79+
* This class cannot be instantiated.
80+
*/
81+
private function __construct()
82+
{
83+
}
2384
}

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

+38-2
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,47 @@
1111

1212
namespace Symfony\Bridge\Doctrine\Tests;
1313

14-
use Symfony\Bridge\Doctrine\Test\TestRepositoryFactory as TestTestRepositoryFactory;
14+
use Doctrine\ORM\EntityManagerInterface;
15+
use Doctrine\ORM\Repository\RepositoryFactory;
16+
use Doctrine\Persistence\ObjectRepository;
1517

1618
/**
1719
* @author Andreas Braun <alcaeus@alcaeus.org>
1820
*/
19-
final class TestRepositoryFactory extends TestTestRepositoryFactory
21+
final class TestRepositoryFactory implements RepositoryFactory
2022
{
23+
/**
24+
* @var array<string, ObjectRepository>
25+
*/
26+
private array $repositoryList = [];
27+
28+
/**
29+
* {@inheritdoc}
30+
*/
31+
public function getRepository(EntityManagerInterface $entityManager, $entityName): ObjectRepository
32+
{
33+
$repositoryHash = $this->getRepositoryHash($entityManager, $entityName);
34+
35+
return $this->repositoryList[$repositoryHash] ??= $this->createRepository($entityManager, $entityName);
36+
}
37+
38+
public function setRepository(EntityManagerInterface $entityManager, string $entityName, ObjectRepository $repository): void
39+
{
40+
$repositoryHash = $this->getRepositoryHash($entityManager, $entityName);
41+
42+
$this->repositoryList[$repositoryHash] = $repository;
43+
}
44+
45+
private function createRepository(EntityManagerInterface $entityManager, string $entityName): ObjectRepository
46+
{
47+
$metadata = $entityManager->getClassMetadata($entityName);
48+
$repositoryClassName = $metadata->customRepositoryClassName ?: $entityManager->getConfiguration()->getDefaultRepositoryClassName();
49+
50+
return new $repositoryClassName($entityManager, $metadata);
51+
}
52+
53+
private function getRepositoryHash(EntityManagerInterface $entityManager, string $entityName): string
54+
{
55+
return $entityManager->getClassMetadata($entityName)->getName().spl_object_hash($entityManager);
56+
}
2157
}

0 commit comments

Comments
 (0)