Skip to content

Commit 2583d5d

Browse files
committed
Merge branch 'remove-provider'
2 parents 52e4028 + fe33bb8 commit 2583d5d

14 files changed

Lines changed: 279 additions & 62 deletions

src/Doctrine/EventListener/PackageListener.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,29 @@
44

55
use CodedMonkey\Dirigent\Doctrine\Entity\Package;
66
use CodedMonkey\Dirigent\Doctrine\Repository\PackageRepository;
7+
use CodedMonkey\Dirigent\Message\RemovePackageProvider;
78
use Doctrine\Bundle\DoctrineBundle\Attribute\AsEntityListener;
89
use Doctrine\ORM\Event\PreRemoveEventArgs;
910
use Doctrine\ORM\Events;
11+
use Symfony\Component\Messenger\MessageBusInterface;
1012

1113
#[AsEntityListener(Events::preRemove, entity: Package::class)]
12-
class PackageListener
14+
readonly class PackageListener
1315
{
16+
public function __construct(
17+
private MessageBusInterface $messenger,
18+
) {
19+
}
20+
1421
public function preRemove(Package $package, PreRemoveEventArgs $event): void
1522
{
1623
/** @var PackageRepository $repository */
1724
$repository = $event->getObjectManager()->getRepository(Package::class);
1825

1926
// Delete existing package links
2027
$repository->deletePackageLinks($package);
28+
29+
// Remove package provider
30+
$this->messenger->dispatch(new RemovePackageProvider($package->getId()));
2131
}
2232
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace CodedMonkey\Dirigent\Message;
4+
5+
use Symfony\Component\Messenger\Attribute\AsMessage;
6+
7+
#[AsMessage]
8+
readonly class RemovePackageProvider
9+
{
10+
public function __construct(
11+
public int $packageId,
12+
) {
13+
}
14+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace CodedMonkey\Dirigent\Message;
4+
5+
use CodedMonkey\Dirigent\Doctrine\Repository\PackageRepository;
6+
use CodedMonkey\Dirigent\Package\PackageProviderManager;
7+
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
8+
9+
#[AsMessageHandler]
10+
readonly class RemovePackageProviderHandler
11+
{
12+
use PackageHandlerTrait;
13+
14+
public function __construct(
15+
private PackageRepository $packageRepository,
16+
private PackageProviderManager $providerManager,
17+
) {
18+
}
19+
20+
public function __invoke(RemovePackageProvider $message): void
21+
{
22+
$package = $this->getPackage($this->packageRepository, $message->packageId);
23+
24+
$this->providerManager->remove($package);
25+
}
26+
}

src/Package/PackageProviderManager.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ public function dump(Package $package): void
4444
$package->setDumpedAt(new \DateTimeImmutable());
4545
}
4646

47+
public function remove(Package $package): void
48+
{
49+
$packageName = $package->getName();
50+
51+
$this->filesystem->remove($this->path($packageName));
52+
$this->filesystem->remove($this->path("$packageName~dev"));
53+
}
54+
4755
public function exists(string $packageName): bool
4856
{
4957
return $this->filesystem->exists($this->path($packageName));

tests/FunctionalTests/Controller/ApiControllerPublicTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use CodedMonkey\Dirigent\Doctrine\Entity\Registry;
77
use CodedMonkey\Dirigent\Doctrine\Entity\RegistryPackageMirroring;
88
use CodedMonkey\Dirigent\Tests\FunctionalTests\PublicKernel;
9+
use CodedMonkey\Dirigent\Tests\Helper\EntityManagerTestTrait;
910
use CodedMonkey\Dirigent\Tests\Helper\KernelTestCaseTrait;
1011
use CodedMonkey\Dirigent\Tests\Helper\MockEntityFactoryTrait;
1112
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
@@ -14,6 +15,7 @@
1415

1516
class ApiControllerPublicTest extends KernelTestCase
1617
{
18+
use EntityManagerTestTrait;
1719
use KernelTestCaseTrait;
1820
use MockEntityFactoryTrait;
1921

tests/FunctionalTests/Controller/Dashboard/DashboardAccountControllerTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use CodedMonkey\Dirigent\Controller\Dashboard\DashboardAccountController;
66
use CodedMonkey\Dirigent\Doctrine\Entity\User;
7+
use CodedMonkey\Dirigent\Tests\Helper\EntityManagerTestTrait;
78
use CodedMonkey\Dirigent\Tests\Helper\MockEntityFactoryTrait;
89
use CodedMonkey\Dirigent\Tests\Helper\WebTestCaseTrait;
910
use Doctrine\ORM\EntityManagerInterface;
@@ -15,6 +16,7 @@
1516
#[CoversClass(DashboardAccountController::class)]
1617
class DashboardAccountControllerTest extends WebTestCase
1718
{
19+
use EntityManagerTestTrait;
1820
use MockEntityFactoryTrait;
1921
use WebTestCaseTrait;
2022

tests/FunctionalTests/Controller/Dashboard/DashboardCredentialsControllerTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use CodedMonkey\Dirigent\Controller\Dashboard\DashboardCredentialsController;
66
use CodedMonkey\Dirigent\Doctrine\Entity\Credentials;
77
use CodedMonkey\Dirigent\Doctrine\Entity\CredentialsType;
8+
use CodedMonkey\Dirigent\Tests\Helper\EntityManagerTestTrait;
89
use CodedMonkey\Dirigent\Tests\Helper\MockEntityFactoryTrait;
910
use CodedMonkey\Dirigent\Tests\Helper\WebTestCaseTrait;
1011
use PHPUnit\Framework\Attributes\CoversClass;
@@ -14,6 +15,7 @@
1415
#[CoversClass(DashboardCredentialsController::class)]
1516
class DashboardCredentialsControllerTest extends WebTestCase
1617
{
18+
use EntityManagerTestTrait;
1719
use MockEntityFactoryTrait;
1820
use WebTestCaseTrait;
1921

tests/FunctionalTests/Controller/Dashboard/DashboardPackagesControllerTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
use CodedMonkey\Dirigent\Doctrine\Entity\Package;
66
use CodedMonkey\Dirigent\Doctrine\Repository\PackageRepository;
77
use CodedMonkey\Dirigent\Doctrine\Repository\RegistryRepository;
8+
use CodedMonkey\Dirigent\Tests\Helper\EntityManagerTestTrait;
89
use CodedMonkey\Dirigent\Tests\Helper\MockEntityFactoryTrait;
910
use CodedMonkey\Dirigent\Tests\Helper\WebTestCaseTrait;
1011
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
1112
use Symfony\Component\HttpFoundation\Response;
1213

1314
class DashboardPackagesControllerTest extends WebTestCase
1415
{
16+
use EntityManagerTestTrait;
1517
use MockEntityFactoryTrait;
1618
use WebTestCaseTrait;
1719

tests/FunctionalTests/Controller/Dashboard/DashboardPackagesInfoControllerTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
namespace CodedMonkey\Dirigent\Tests\FunctionalTests\Controller\Dashboard;
44

55
use CodedMonkey\Dirigent\Doctrine\Repository\PackageRepository;
6+
use CodedMonkey\Dirigent\Tests\Helper\EntityManagerTestTrait;
67
use CodedMonkey\Dirigent\Tests\Helper\MockEntityFactoryTrait;
78
use CodedMonkey\Dirigent\Tests\Helper\WebTestCaseTrait;
89
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
910
use Symfony\Component\HttpFoundation\Response;
1011

1112
class DashboardPackagesInfoControllerTest extends WebTestCase
1213
{
14+
use EntityManagerTestTrait;
1315
use MockEntityFactoryTrait;
1416
use WebTestCaseTrait;
1517

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
namespace CodedMonkey\Dirigent\Tests\Helper;
4+
5+
use Doctrine\ORM\EntityManagerInterface;
6+
7+
trait EntityManagerTestTrait
8+
{
9+
/**
10+
* Find a single entity by its ID or an array of criteria.
11+
*
12+
* @template T of object
13+
*
14+
* @param class-string<T> $className
15+
*
16+
* @return T|null
17+
*/
18+
protected function findEntity(string $className, array|int $criteria): ?object
19+
{
20+
if (is_array($criteria)) {
21+
return $this->getService(EntityManagerInterface::class)->getRepository($className)->findOneBy($criteria);
22+
}
23+
24+
return $this->getService(EntityManagerInterface::class)->find($className, $criteria);
25+
}
26+
27+
/**
28+
* Persist and flush all given entities.
29+
*
30+
* @param object ...$entities
31+
*/
32+
protected function persistEntities(...$entities): void
33+
{
34+
$entityManager = $this->getService(EntityManagerInterface::class);
35+
36+
foreach ($entities as $entity) {
37+
$entityManager->persist($entity);
38+
}
39+
40+
$entityManager->flush();
41+
}
42+
43+
protected function clearEntities(): void
44+
{
45+
$this->getService(EntityManagerInterface::class)->clear();
46+
}
47+
}

0 commit comments

Comments
 (0)