Skip to content

Commit 71e8815

Browse files
committed
[DoctrineBridge] Remove DoctrineTestHelper and TestRepositoryFactory
Signed-off-by: Alexander M. Turek <me@derrabus.de>
1 parent 096fc6a commit 71e8815

File tree

5 files changed

+106
-179
lines changed

5 files changed

+106
-179
lines changed

src/Symfony/Bridge/Doctrine/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
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

Lines changed: 0 additions & 102 deletions
This file was deleted.

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

Lines changed: 0 additions & 73 deletions
This file was deleted.

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

Lines changed: 63 additions & 2 deletions
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

Lines changed: 38 additions & 2 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy