Replace timeListener in tests instead of creating new

[MAILPOET-3031]
This commit is contained in:
Jan Lysý
2021-03-26 13:25:23 +01:00
committed by Veljko V
parent 5045dd6aa7
commit 8573d99441
2 changed files with 19 additions and 24 deletions

View File

@@ -124,7 +124,7 @@ class ContainerConfigurator implements IContainerConfigurator {
->setPublic(true); ->setPublic(true);
$container->autowire(\MailPoet\Doctrine\EventListeners\EmojiEncodingListener::class)->setPublic(true); $container->autowire(\MailPoet\Doctrine\EventListeners\EmojiEncodingListener::class)->setPublic(true);
$container->autowire(\MailPoet\Doctrine\EventListeners\LastSubscribedAtListener::class); $container->autowire(\MailPoet\Doctrine\EventListeners\LastSubscribedAtListener::class);
$container->autowire(\MailPoet\Doctrine\EventListeners\TimestampListener::class); $container->autowire(\MailPoet\Doctrine\EventListeners\TimestampListener::class)->setPublic(true);
$container->autowire(\MailPoet\Doctrine\EventListeners\ValidationListener::class); $container->autowire(\MailPoet\Doctrine\EventListeners\ValidationListener::class);
$container->autowire(\MailPoet\Doctrine\Validator\ValidatorFactory::class); $container->autowire(\MailPoet\Doctrine\Validator\ValidatorFactory::class);
$container->autowire(\MailPoetVendor\Symfony\Component\Validator\Validator\ValidatorInterface::class) $container->autowire(\MailPoetVendor\Symfony\Component\Validator\Validator\ValidatorInterface::class)

View File

@@ -14,6 +14,7 @@ use MailPoet\WP\Emoji;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Carbon\Carbon;
use MailPoetVendor\Doctrine\Common\Cache\ArrayCache; use MailPoetVendor\Doctrine\Common\Cache\ArrayCache;
use MailPoetVendor\Doctrine\ORM\Events;
require_once __DIR__ . '/TimestampEntity.php'; require_once __DIR__ . '/TimestampEntity.php';
@@ -34,7 +35,10 @@ class TimestampListenerTest extends \MailPoetTest {
'currentTime' => $timestamp, 'currentTime' => $timestamp,
]); ]);
$this->entityManager = $this->createEntityManager(); $newTimestampListener = new TimestampListener($this->wp);
$originalListener = $this->diContainer->get(TimestampListener::class);
$this->replaceListeners($originalListener, $newTimestampListener);
$this->tableName = $this->entityManager->getClassMetadata(TimestampEntity::class)->getTableName(); $this->tableName = $this->entityManager->getClassMetadata(TimestampEntity::class)->getTableName();
$this->connection->executeUpdate("DROP TABLE IF EXISTS $this->tableName"); $this->connection->executeUpdate("DROP TABLE IF EXISTS $this->tableName");
$this->connection->executeUpdate(" $this->connection->executeUpdate("
@@ -82,28 +86,19 @@ class TimestampListenerTest extends \MailPoetTest {
$this->connection->executeUpdate("DROP TABLE IF EXISTS $this->tableName"); $this->connection->executeUpdate("DROP TABLE IF EXISTS $this->tableName");
} }
private function createEntityManager() { /**
$annotationReaderProvider = new AnnotationReaderProvider(); * We have to replace event listeners since EventManager
$configurationFactory = new ConfigurationFactory($annotationReaderProvider, false); * is shared for all entity managers using same DB connection
$configuration = $configurationFactory->createConfiguration(); */
private function replaceListeners($original, $replacement) {
$metadataDriver = $configuration->newDefaultAnnotationDriver([__DIR__], false); $this->entityManager->getEventManager()->removeEventListener(
$configuration->setMetadataDriverImpl($metadataDriver); [Events::prePersist, Events::preUpdate],
$configuration->setMetadataCacheImpl(new ArrayCache()); $original
);
$validatorFactory = new ValidatorFactory($annotationReaderProvider);
$timestampListener = new TimestampListener($this->wp); $this->entityManager->getEventManager()->addEventListener(
$validationListener = new ValidationListener($validatorFactory->createValidator()); [Events::prePersist, Events::preUpdate],
$emojiEncodingListener = new EmojiEncodingListener(new Emoji($this->wp)); $replacement
$lastSubscribedAtListener = new LastSubscribedAtListener($this->wp);
$entityManagerFactory = new EntityManagerFactory(
$this->connection,
$configuration,
$timestampListener,
$validationListener,
$emojiEncodingListener,
$lastSubscribedAtListener
); );
return $entityManagerFactory->createEntityManager();
} }
} }