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