Add listeners cleanup

[MAILPOET-3833]
This commit is contained in:
Jan Lysý
2021-10-14 11:33:52 +02:00
committed by Veljko V
parent 777a1bd90d
commit 8d2cd8e476

View File

@@ -51,6 +51,7 @@ class EntityManagerFactory {
public function createEntityManager(): EntityManager { public function createEntityManager(): EntityManager {
$entityManager = EntityManager::create($this->connection, $this->configuration); $entityManager = EntityManager::create($this->connection, $this->configuration);
$this->cleanupListeners($entityManager);
$this->setupListeners($entityManager); $this->setupListeners($entityManager);
if ( if (
class_exists(Debugger::class) class_exists(Debugger::class)
@@ -61,6 +62,22 @@ class EntityManagerFactory {
return $entityManager; return $entityManager;
} }
/**
* We sometimes work with more EntityManager in tests, and the behavior could be inconsistent with multiple listeners
*/
private function cleanupListeners(EntityManager $entityManager) {
$eventManager = $entityManager->getEventManager();
foreach ($eventManager->getListeners() as $event => $listeners) {
if (!is_array($listeners)) {
$eventManager->removeEventListener($event, $listeners);
continue;
}
foreach ($listeners as $listener) {
$eventManager->removeEventListener($event, $listener);
}
}
}
private function setupListeners(EntityManager $entityManager) { private function setupListeners(EntityManager $entityManager) {
$entityManager->getEventManager()->addEventListener( $entityManager->getEventManager()->addEventListener(
[Events::prePersist, Events::preUpdate], [Events::prePersist, Events::preUpdate],