Newer
Older
<?php
declare(strict_types=1);
namespace IQDEV\Tests\Packages\DoctrineHttpFilter;
use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
use Doctrine\Common\DataFixtures\Loader;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Doctrine\DBAL\DriverManager;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\ORMSetup;
use Doctrine\ORM\Tools\SchemaTool;
use DoctrineExtensions\Query\Sqlite\StrfTime;
use Faker\Factory;
use Faker\Generator;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilterEntityRepository;
use IQDEV\Tests\Packages\DoctrineHttpFilter\Fixture\BaseFixture;
use IQDEV\Tests\Packages\DoctrineHttpFilter\Fixture\CommentFixture;
use IQDEV\Tests\Packages\DoctrineHttpFilter\Fixture\PostFixture;
use PHPUnit\Framework\TestCase as BaseTestCase;
use Symfony\Component\HttpFoundation\Request;
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
abstract class TestCase extends BaseTestCase
{
protected EntityManagerInterface $em;
protected Generator $faker;
protected function setUp(): void
{
$this->em = $this->makeEntityManager();
$schemaTool = new SchemaTool($this->em);
$schemaTool->createSchema($this->em->getMetadataFactory()->getAllMetadata());
$this->faker = Factory::create();
$this->loadFixtures([
new PostFixture(count: 20),
new CommentFixture(200),
]);
$this->em->getConnection()->beginTransaction();
}
protected function tearDown(): void
{
if ($this->em->isOpen()) {
$this->em->getConnection()->rollBack();
$this->em->close();
}
unset($this->em);
}
protected function makeEntityManager(): EntityManagerInterface
{
$config = ORMSetup::createAttributeMetadataConfiguration(
[__DIR__ . '/Entity'],
true,
);
$config->addCustomStringFunction('strftime', StrfTime::class);
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
$connection = DriverManager::getConnection([
'driver' => 'pdo_sqlite',
'memory' => true,
], $config);
return new EntityManager(
$connection,
$config,
);
}
protected function makeRepositoryWithRequest(string $repositoryClass, Request $request): HttpFilterEntityRepository
{
/** @var HttpFilterEntityRepository $repoMock */
$repoMock = $this->getMockBuilder($repositoryClass)
->setConstructorArgs([$this->em])
->onlyMethods(['getRequest'])
->getMock();
$repoMock
->method('getRequest')
->willReturn($request);
return $repoMock;
}
/** @param iterable<BaseFixture> $fixtures */
protected function loadFixtures(iterable $fixtures): void
{
$fixtureLoader = new Loader();
/** @var BaseFixture $fixture */
foreach ($fixtures as $fixture) {
$fixtureLoader->addFixture($fixture);
}
$purger = new ORMPurger();
$executor = new ORMExecutor($this->em, $purger);
$executor->execute($fixtureLoader->getFixtures());
}
}