Fix SendingQueueTests after Doctrine refactor

[MAILPOET-5682]
This commit is contained in:
Rodrigo Primo
2023-11-21 10:36:37 -03:00
committed by Jan Jakeš
parent 3b38b3034a
commit d2e226a932

View File

@@ -102,6 +102,12 @@ class SendingQueueTest extends \MailPoetTest {
/** @var ScheduledTaskSubscribersRepository */ /** @var ScheduledTaskSubscribersRepository */
private $scheduledTaskSubscribersRepository; private $scheduledTaskSubscribersRepository;
/** @var ScheduledTaskEntity */
private $scheduledTaskEntity;
/** @var SendingQueueEntity */
private $sendingQueueEntity;
public function _before() { public function _before() {
parent::_before(); parent::_before();
$wpUsers = get_users(); $wpUsers = get_users();
@@ -170,6 +176,15 @@ class SendingQueueTest extends \MailPoetTest {
$this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class); $this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class);
$this->sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class); $this->sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class);
$this->sendingQueueWorker = $this->getSendingQueueWorker(); $this->sendingQueueWorker = $this->getSendingQueueWorker();
$scheduledTaskEntity = $this->scheduledTasksRepository->findOneById($this->queue->taskId);
$this->assertInstanceOf(ScheduledTaskEntity::class, $scheduledTaskEntity);
$this->scheduledTaskEntity = $scheduledTaskEntity;
$sendingQueueEntity = $this->sendingQueuesRepository->findOneById($this->queue->id);
$this->assertInstanceOf(SendingQueueEntity::class, $sendingQueueEntity);
$this->sendingQueueEntity = $sendingQueueEntity;
$this->entityManager->refresh($this->sendingQueueEntity);
} }
private function getDirectUnsubscribeURL() { private function getDirectUnsubscribeURL() {
@@ -267,7 +282,7 @@ class SendingQueueTest extends \MailPoetTest {
$this->entityManager $this->entityManager
); );
$sendingQueueWorker->sendNewsletters( $sendingQueueWorker->sendNewsletters(
$this->queue, $this->scheduledTaskEntity,
$preparedSubscribers = [], $preparedSubscribers = [],
$preparedNewsletters = [], $preparedNewsletters = [],
$preparedSubscribers = [], $preparedSubscribers = [],
@@ -287,6 +302,7 @@ class SendingQueueTest extends \MailPoetTest {
$queue = $this->queue; $queue = $this->queue;
$queue->status = SendingQueue::STATUS_COMPLETED; $queue->status = SendingQueue::STATUS_COMPLETED;
$queue->save(); $queue->save();
$this->entityManager->refresh($this->scheduledTaskEntity);
$sendingQueueWorker = $this->make( $sendingQueueWorker = $this->make(
$this->getSendingQueueWorker(), $this->getSendingQueueWorker(),
[ [
@@ -316,7 +332,7 @@ class SendingQueueTest extends \MailPoetTest {
$this->entityManager $this->entityManager
); );
$sendingQueueWorker->sendNewsletters( $sendingQueueWorker->sendNewsletters(
$queue, $this->scheduledTaskEntity,
$preparedSubscribers = [], $preparedSubscribers = [],
$preparedNewsletters = [], $preparedNewsletters = [],
$preparedSubscribers = [], $preparedSubscribers = [],
@@ -510,6 +526,12 @@ class SendingQueueTest extends \MailPoetTest {
$queue->newsletterRenderedBody = ['html' => '<p>Hello [subscriber:email]</p>', 'text' => 'Hello [subscriber:email]']; $queue->newsletterRenderedBody = ['html' => '<p>Hello [subscriber:email]</p>', 'text' => 'Hello [subscriber:email]'];
$queue->newsletterRenderedSubject = 'News for [subscriber:email]'; $queue->newsletterRenderedSubject = 'News for [subscriber:email]';
$queue->setSubscribers($subscriberIds); $queue->setSubscribers($subscriberIds);
$queue->save();
$scheduledTaskEntity = $this->scheduledTasksRepository->findOneById($queue->taskId);
$this->assertInstanceOf(ScheduledTaskEntity::class, $scheduledTaskEntity);
$queueEntity = $scheduledTaskEntity->getSendingQueue();
$this->assertInstanceOf(SendingQueueEntity::class, $queueEntity);
$this->entityManager->refresh($queueEntity);
$this->settings->set('tracking.level', TrackingConfig::LEVEL_BASIC); $this->settings->set('tracking.level', TrackingConfig::LEVEL_BASIC);
$newsletter = $this->newsletter; $newsletter = $this->newsletter;
@@ -547,7 +569,7 @@ class SendingQueueTest extends \MailPoetTest {
Subscriber::findOne($subscriber2->getId()), Subscriber::findOne($subscriber2->getId()),
]; ];
$sendingQueueWorker->processQueue($queue, $newsletter, $subscribersModels, $timer); $sendingQueueWorker->processQueue($scheduledTaskEntity, $newsletter, $subscribersModels, $timer);
} }
public function testItCanProcessSubscribersInBulk() { public function testItCanProcessSubscribersInBulk() {
@@ -698,8 +720,13 @@ class SendingQueueTest extends \MailPoetTest {
$this->entityManager $this->entityManager
); );
$sendingQueue = $this->sendingQueuesRepository->findOneById($queue->id);
$this->assertInstanceOf(SendingQueueEntity::class, $sendingQueue);
$scheduledTask = $this->scheduledTasksRepository->findOneBySendingQueue($sendingQueue);
$this->assertInstanceOf(ScheduledTaskEntity::class, $scheduledTask);
$sendingQueueWorker->sendNewsletters( $sendingQueueWorker->sendNewsletters(
$queue, $scheduledTask,
[$this->subscriber->getId(), $wrongSubscriber->getId()], [$this->subscriber->getId(), $wrongSubscriber->getId()],
[], [],
[$this->subscriber->getEmail(), $wrongSubscriber->getEmail()], [$this->subscriber->getEmail(), $wrongSubscriber->getEmail()],
@@ -707,11 +734,7 @@ class SendingQueueTest extends \MailPoetTest {
microtime(true) microtime(true)
); );
// load queue and compare data after first sending // compare data after first sending
$sendingQueue = $this->sendingQueuesRepository->findOneById($queue->id);
$this->assertInstanceOf(SendingQueueEntity::class, $sendingQueue);
$scheduledTask = $this->scheduledTasksRepository->findOneBySendingQueue($sendingQueue);
$this->assertInstanceOf(ScheduledTaskEntity::class, $scheduledTask);
$this->sendingQueuesRepository->refresh($sendingQueue); $this->sendingQueuesRepository->refresh($sendingQueue);
$this->scheduledTasksRepository->refresh($scheduledTask); $this->scheduledTasksRepository->refresh($scheduledTask);
verify($scheduledTask->getSubscribersByProcessed(ScheduledTaskSubscriber::STATUS_UNPROCESSED))->equals([$this->subscriber]); verify($scheduledTask->getSubscribersByProcessed(ScheduledTaskSubscriber::STATUS_UNPROCESSED))->equals([$this->subscriber]);
@@ -721,7 +744,7 @@ class SendingQueueTest extends \MailPoetTest {
verify($sendingQueue->getCountToProcess())->equals(1); verify($sendingQueue->getCountToProcess())->equals(1);
$sendingQueueWorker->sendNewsletters( $sendingQueueWorker->sendNewsletters(
$queue, $scheduledTask,
[$this->subscriber->getId()], [$this->subscriber->getId()],
[], [],
[$this->subscriber->getEmail()], [$this->subscriber->getEmail()],
@@ -816,6 +839,7 @@ class SendingQueueTest extends \MailPoetTest {
$this->subscriber->setStatus(Subscriber::STATUS_UNSUBSCRIBED); $this->subscriber->setStatus(Subscriber::STATUS_UNSUBSCRIBED);
$this->entityManager->flush(); $this->entityManager->flush();
$this->newsletterSegment->delete(); $this->newsletterSegment->delete();
$this->entityManager->refresh($this->sendingQueueEntity);
$sendingQueueWorker = $this->getSendingQueueWorker( $sendingQueueWorker = $this->getSendingQueueWorker(
$this->construct( $this->construct(
@@ -852,6 +876,7 @@ class SendingQueueTest extends \MailPoetTest {
$this->subscriber->getId(), // subscriber that should be processed $this->subscriber->getId(), // subscriber that should be processed
$unsubscribedSubscriber->getId(), // subscriber that should be skipped $unsubscribedSubscriber->getId(), // subscriber that should be skipped
]); ]);
$this->entityManager->refresh($this->sendingQueueEntity);
$sendingQueueWorker = $this->getSendingQueueWorker( $sendingQueueWorker = $this->getSendingQueueWorker(
$this->construct( $this->construct(
MailerTask::class, MailerTask::class,
@@ -889,6 +914,7 @@ class SendingQueueTest extends \MailPoetTest {
]); ]);
$queue->countTotal = 2; $queue->countTotal = 2;
$queue->save(); $queue->save();
$this->entityManager->refresh($this->sendingQueueEntity);
$sendingQueueWorker = $this->sendingQueueWorker; $sendingQueueWorker = $this->sendingQueueWorker;
$sendingQueueWorker->mailerTask = $this->construct( $sendingQueueWorker->mailerTask = $this->construct(
MailerTask::class, MailerTask::class,
@@ -931,6 +957,7 @@ class SendingQueueTest extends \MailPoetTest {
$queue->setSubscribers($subscribers); $queue->setSubscribers($subscribers);
$queue->countTotal = count($subscribers); $queue->countTotal = count($subscribers);
$queue->save(); $queue->save();
$this->entityManager->refresh($this->sendingQueueEntity);
$sendingQueueWorker = $this->sendingQueueWorker; $sendingQueueWorker = $this->sendingQueueWorker;
$sendingQueueWorker->mailerTask = $this->construct( $sendingQueueWorker->mailerTask = $this->construct(
MailerTask::class, MailerTask::class,
@@ -967,6 +994,7 @@ class SendingQueueTest extends \MailPoetTest {
]); ]);
$queue->countTotal = 2; $queue->countTotal = 2;
$queue->save(); $queue->save();
$this->entityManager->refresh($this->sendingQueueEntity);
$sendingQueueWorker = $this->sendingQueueWorker; $sendingQueueWorker = $this->sendingQueueWorker;
$sendingQueueWorker->mailerTask = $this->construct( $sendingQueueWorker->mailerTask = $this->construct(
MailerTask::class, MailerTask::class,
@@ -1003,6 +1031,7 @@ class SendingQueueTest extends \MailPoetTest {
$subscriber = $this->subscriber; $subscriber = $this->subscriber;
$subscriber->setDeletedAt(Carbon::now()); $subscriber->setDeletedAt(Carbon::now());
$this->entityManager->flush(); $this->entityManager->flush();
$this->entityManager->refresh($this->sendingQueueEntity);
$sendingQueueWorker->process(); $sendingQueueWorker->process();
$sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id); $sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id);
@@ -1029,6 +1058,7 @@ class SendingQueueTest extends \MailPoetTest {
$subscriber = $this->subscriber; $subscriber = $this->subscriber;
$subscriber->setStatus($subscriberStatus); $subscriber->setStatus($subscriberStatus);
$this->entityManager->flush(); $this->entityManager->flush();
$this->entityManager->refresh($this->sendingQueueEntity);
$sendingQueueWorker->process(); $sendingQueueWorker->process();
$sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id); $sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id);
@@ -1062,6 +1092,7 @@ class SendingQueueTest extends \MailPoetTest {
$subscriber = $this->subscriber; $subscriber = $this->subscriber;
$subscriber->setStatus(Subscriber::STATUS_UNSUBSCRIBED); $subscriber->setStatus(Subscriber::STATUS_UNSUBSCRIBED);
$this->entityManager->flush(); $this->entityManager->flush();
$this->entityManager->refresh($this->sendingQueueEntity);
$sendingQueueWorker->process(); $sendingQueueWorker->process();
$sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id); $sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id);
@@ -1082,6 +1113,7 @@ class SendingQueueTest extends \MailPoetTest {
$subscriberSegment = $this->subscriberSegment; $subscriberSegment = $this->subscriberSegment;
$subscriberSegment->status = Subscriber::STATUS_UNSUBSCRIBED; $subscriberSegment->status = Subscriber::STATUS_UNSUBSCRIBED;
$subscriberSegment->save(); $subscriberSegment->save();
$this->entityManager->refresh($this->sendingQueueEntity);
$sendingQueueWorker->process(); $sendingQueueWorker->process();
$sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id); $sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id);
@@ -1102,6 +1134,7 @@ class SendingQueueTest extends \MailPoetTest {
$subscriber = $this->subscriber; $subscriber = $this->subscriber;
$subscriber->setStatus(Subscriber::STATUS_INACTIVE); $subscriber->setStatus(Subscriber::STATUS_INACTIVE);
$this->entityManager->flush(); $this->entityManager->flush();
$this->entityManager->refresh($this->sendingQueueEntity);
$sendingQueueWorker->process(); $sendingQueueWorker->process();
$sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id); $sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id);
@@ -1111,14 +1144,10 @@ class SendingQueueTest extends \MailPoetTest {
} }
public function testItPausesSendingWhenProcessedSubscriberListCannotBeUpdated() { public function testItPausesSendingWhenProcessedSubscriberListCannotBeUpdated() {
$sendingTask = $this->createMock(SendingTask::class); $scheduledTaskSubscribersRepository = $this->createMock(ScheduledTaskSubscribersRepository::class);
$sendingTask $scheduledTaskSubscribersRepository
->method('updateProcessedSubscribers') ->method('updateProcessedSubscribers')
->will($this->returnValue(false)); ->willThrowException(new \Exception());
$sendingTask
->method('__get')
->with('id')
->will($this->returnValue(100));
$sendingQueueWorker = $this->make( $sendingQueueWorker = $this->make(
$this->getSendingQueueWorker() $this->getSendingQueueWorker()
); );
@@ -1134,7 +1163,7 @@ class SendingQueueTest extends \MailPoetTest {
$this->wp, $this->wp,
$this->tasksLinks, $this->tasksLinks,
$this->scheduledTasksRepository, $this->scheduledTasksRepository,
$this->scheduledTaskSubscribersRepository, $scheduledTaskSubscribersRepository,
$this->construct( $this->construct(
MailerTask::class, MailerTask::class,
[$this->diContainer->get(MailerFactory::class)], [$this->diContainer->get(MailerFactory::class)],
@@ -1148,7 +1177,7 @@ class SendingQueueTest extends \MailPoetTest {
); );
try { try {
$sendingQueueWorker->sendNewsletters( $sendingQueueWorker->sendNewsletters(
$sendingTask, $this->scheduledTaskEntity,
$preparedSubscribers = [], $preparedSubscribers = [],
$preparedNewsletters = [], $preparedNewsletters = [],
$preparedSubscribers = [], $preparedSubscribers = [],
@@ -1164,7 +1193,7 @@ class SendingQueueTest extends \MailPoetTest {
verify($mailerLog['error'])->equals( verify($mailerLog['error'])->equals(
[ [
'operation' => 'processed_list_update', 'operation' => 'processed_list_update',
'error_message' => 'QUEUE-100-PROCESSED-LIST-UPDATE', 'error_message' => "QUEUE-{$this->sendingQueueEntity->getId()}-PROCESSED-LIST-UPDATE",
] ]
); );
} }
@@ -1435,6 +1464,7 @@ class SendingQueueTest extends \MailPoetTest {
$newsletter->getQueues()->add($queue); $newsletter->getQueues()->add($queue);
$this->entityManager->flush(); $this->entityManager->flush();
$this->entityManager->refresh($queue); // I'm not sure why calling refresh() here is needed and why the tests fail without it (calling $task->getSendingQueue() returns null)
return $queue; return $queue;
} }