Skip to content

Commit cccda85

Browse files
committed
Make PurgerFactory generic
This allows us to remove assertions and natively provide the right type information.
1 parent 42a0cbe commit cccda85

File tree

5 files changed

+10
-13
lines changed

5 files changed

+10
-13
lines changed

phpstan-baseline.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
parameters:
22
ignoreErrors:
33
-
4-
message: "#^Method class@anonymous/src/Command/LoadDataFixturesDoctrineCommand\\.php\\:121\\:\\:log\\(\\) has parameter \\$message with no type specified\\.$#"
4+
message: "#^Method class@anonymous/src/Command/LoadDataFixturesDoctrineCommand\\.php\\:120\\:\\:log\\(\\) has parameter \\$message with no type specified\\.$#"
55
count: 1
66
path: src/Command/LoadDataFixturesDoctrineCommand.php
77

src/Command/LoadDataFixturesDoctrineCommand.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use Doctrine\Bundle\FixturesBundle\Purger\ORMPurgerFactory;
1111
use Doctrine\Bundle\FixturesBundle\Purger\PurgerFactory;
1212
use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
13-
use Doctrine\Common\DataFixtures\Purger\ORMPurgerInterface;
1413
use Doctrine\ORM\EntityManagerInterface;
1514
use Doctrine\Persistence\ManagerRegistry;
1615
use Psr\Log\AbstractLogger;
@@ -32,6 +31,7 @@ class LoadDataFixturesDoctrineCommand extends DoctrineCommand
3231
public function __construct(
3332
private SymfonyFixturesLoader $fixturesLoader,
3433
ManagerRegistry $doctrine,
34+
/** @var array<string, ORMPurgerFactory> $purgerFactories */
3535
private array $purgerFactories = [],
3636
) {
3737
parent::__construct($doctrine);
@@ -110,13 +110,12 @@ protected function execute(InputInterface $input, OutputInterface $output): int
110110
$factory = $this->purgerFactories[$input->getOption('purger')];
111111
}
112112

113-
$purger = $factory->createForEntityManager(
113+
$purger = $factory->createForEntityManager(
114114
$input->getOption('em'),
115115
$em,
116116
$input->getOption('purge-exclusions'),
117117
$input->getOption('purge-with-truncate'),
118118
);
119-
assert($purger instanceof ORMPurgerInterface);
120119
$executor = new ORMExecutor($em, $purger);
121120
$executor->setLogger(new class ($ui) extends AbstractLogger {
122121
public function __construct(private SymfonyStyle $ui)

src/Purger/ORMPurgerFactory.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
88
use Doctrine\ORM\EntityManagerInterface;
99

10+
/** @template-implements PurgerFactory<ORMPurger> */
1011
final class ORMPurgerFactory implements PurgerFactory
1112
{
1213
/**

src/Purger/PurgerFactory.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,14 @@
77
use Doctrine\Common\DataFixtures\Purger\PurgerInterface;
88
use Doctrine\ORM\EntityManagerInterface;
99

10+
/** @template T of PurgerInterface */
1011
interface PurgerFactory
1112
{
12-
/** @phpstan-param list<string> $excluded */
13+
/**
14+
* @phpstan-param list<string> $excluded
15+
*
16+
* @return T
17+
*/
1318
public function createForEntityManager(
1419
string|null $emName,
1520
EntityManagerInterface $em,

tests/Purger/ORMPurgerFactoryTest.php

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
use PHPUnit\Framework\MockObject\MockObject;
1111
use PHPUnit\Framework\TestCase;
1212

13-
use function assert;
14-
1513
class ORMPurgerFactoryTest extends TestCase
1614
{
1715
private ORMPurgerFactory $factory;
@@ -28,9 +26,7 @@ protected function setUp(): void
2826
public function testCreateDefault(): void
2927
{
3028
$purger = $this->factory->createForEntityManager(null, $this->em);
31-
assert($purger instanceof ORMPurger);
3229

33-
self::assertInstanceOf(ORMPurger::class, $purger);
3430
self::assertSame(ORMPurger::PURGE_MODE_DELETE, $purger->getPurgeMode());
3531
self::assertSame([], (function () {
3632
return $this->excluded;
@@ -40,9 +36,7 @@ public function testCreateDefault(): void
4036
public function testCreateWithExclusions(): void
4137
{
4238
$purger = $this->factory->createForEntityManager(null, $this->em, ['tableName']);
43-
assert($purger instanceof ORMPurger);
4439

45-
self::assertInstanceOf(ORMPurger::class, $purger);
4640
self::assertSame(ORMPurger::PURGE_MODE_DELETE, $purger->getPurgeMode());
4741
self::assertSame(['tableName'], (function () {
4842
return $this->excluded;
@@ -52,9 +46,7 @@ public function testCreateWithExclusions(): void
5246
public function testCreateWithTruncate(): void
5347
{
5448
$purger = $this->factory->createForEntityManager(null, $this->em, [], true);
55-
assert($purger instanceof ORMPurger);
5649

57-
self::assertInstanceOf(ORMPurger::class, $purger);
5850
self::assertSame(ORMPurger::PURGE_MODE_TRUNCATE, $purger->getPurgeMode());
5951
self::assertSame([], (function () {
6052
return $this->excluded;

0 commit comments

Comments
 (0)