Update UnsubscribeTokens to use DI

MAILPOET-5710
This commit is contained in:
John Oleksowicz
2023-11-08 10:47:12 -06:00
committed by Aschepikov
parent 005e73aee5
commit 1b31ad11d4
2 changed files with 28 additions and 13 deletions

View File

@@ -1,13 +1,13 @@
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing <?php declare(strict_types = 1);
namespace MailPoet\Cron\Workers; namespace MailPoet\Cron\Workers;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberEntity;
use MailPoet\InvalidStateException; use MailPoet\InvalidStateException;
use MailPoet\Util\Security; use MailPoet\Util\Security;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Carbon\Carbon;
use MailPoetVendor\Doctrine\ORM\EntityManager; use MailPoetVendor\Doctrine\ORM\EntityManager;
@@ -16,6 +16,22 @@ class UnsubscribeTokens extends SimpleWorker {
const BATCH_SIZE = 1000; const BATCH_SIZE = 1000;
const AUTOMATIC_SCHEDULING = false; const AUTOMATIC_SCHEDULING = false;
/** @var Security */
private $security;
/** @var EntityManager */
private $entityManager;
public function __construct(
WPFunctions $wp,
Security $security,
EntityManager $entityManager
) {
parent::__construct($wp);
$this->security = $security;
$this->entityManager = $entityManager;
}
public function processTaskStrategy(ScheduledTaskEntity $task, $timer) { public function processTaskStrategy(ScheduledTaskEntity $task, $timer) {
$meta = $task->getMeta(); $meta = $task->getMeta();
@@ -48,10 +64,7 @@ class UnsubscribeTokens extends SimpleWorker {
} }
private function addTokens($entityClass, &$lastProcessedId = 0) { private function addTokens($entityClass, &$lastProcessedId = 0) {
$security = ContainerWrapper::getInstance()->get(Security::class); $queryBuilder = $this->entityManager->createQueryBuilder();
$entityManager = ContainerWrapper::getInstance()->get(EntityManager::class);
$queryBuilder = $entityManager->createQueryBuilder();
$entities = $queryBuilder $entities = $queryBuilder
->select('PARTIAL e.{id}') ->select('PARTIAL e.{id}')
@@ -70,11 +83,11 @@ class UnsubscribeTokens extends SimpleWorker {
foreach ($entities as $entity) { foreach ($entities as $entity) {
$lastProcessedId = $entity->getId(); $lastProcessedId = $entity->getId();
$entity->setUnsubscribeToken($security->generateUnsubscribeTokenByEntity($entity)); $entity->setUnsubscribeToken($this->security->generateUnsubscribeTokenByEntity($entity));
$entityManager->persist($entity); $this->entityManager->persist($entity);
} }
$entityManager->flush(); $this->entityManager->flush();
return count($entities); return count($entities);
} }

View File

@@ -32,10 +32,14 @@ class UnsubscribeTokensTest extends \MailPoetTest {
/** @var NewslettersRepository */ /** @var NewslettersRepository */
private $newslettersRepository; private $newslettersRepository;
/** @var UnsubscribeTokens */
private $worker;
public function _before() { public function _before() {
parent::_before(); parent::_before();
$this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class); $this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class);
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class); $this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
$this->worker = $this->diContainer->get(UnsubscribeTokens::class);
$this->subscriberWithToken = (new SubscriberFactory()) $this->subscriberWithToken = (new SubscriberFactory())
->withEmail('subscriber1@test.com') ->withEmail('subscriber1@test.com')
@@ -62,8 +66,7 @@ class UnsubscribeTokensTest extends \MailPoetTest {
public function testItAddsTokensToSubscribers() { public function testItAddsTokensToSubscribers() {
verify($this->subscriberWithoutToken->getUnsubscribeToken())->null(); verify($this->subscriberWithoutToken->getUnsubscribeToken())->null();
$worker = new UnsubscribeTokens(); $this->worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true));
$worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true));
$subscriberWithToken = $this->subscribersRepository->findOneById($this->subscriberWithToken->getId()); $subscriberWithToken = $this->subscribersRepository->findOneById($this->subscriberWithToken->getId());
$this->assertInstanceOf(SubscriberEntity::class, $subscriberWithToken); $this->assertInstanceOf(SubscriberEntity::class, $subscriberWithToken);
$subscriberWithoutToken = $this->subscribersRepository->findOneById($this->subscriberWithoutToken->getId()); $subscriberWithoutToken = $this->subscribersRepository->findOneById($this->subscriberWithoutToken->getId());
@@ -74,8 +77,7 @@ class UnsubscribeTokensTest extends \MailPoetTest {
public function testItAddsTokensToNewsletters() { public function testItAddsTokensToNewsletters() {
verify($this->newsletterWithoutToken->getUnsubscribeToken())->null(); verify($this->newsletterWithoutToken->getUnsubscribeToken())->null();
$worker = new UnsubscribeTokens(); $this->worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true));
$worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true));
$newsletterWithToken = $this->newslettersRepository->findOneById($this->newsletterWithToken->getId()); $newsletterWithToken = $this->newslettersRepository->findOneById($this->newsletterWithToken->getId());
$newsletterWithoutToken = $this->newslettersRepository->findOneById($this->newsletterWithoutToken->getId()); $newsletterWithoutToken = $this->newslettersRepository->findOneById($this->newsletterWithoutToken->getId());
$this->assertInstanceOf(NewsletterEntity::class, $newsletterWithToken); $this->assertInstanceOf(NewsletterEntity::class, $newsletterWithToken);