From d2e226a932ff6e5da80c453821ff48a288c0bcda Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Tue, 21 Nov 2023 10:36:37 -0300 Subject: [PATCH] Fix SendingQueueTests after Doctrine refactor [MAILPOET-5682] --- .../Workers/SendingQueue/SendingQueueTest.php | 70 +++++++++++++------ 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/mailpoet/tests/integration/Cron/Workers/SendingQueue/SendingQueueTest.php b/mailpoet/tests/integration/Cron/Workers/SendingQueue/SendingQueueTest.php index b88424f964..4d5d0980ba 100644 --- a/mailpoet/tests/integration/Cron/Workers/SendingQueue/SendingQueueTest.php +++ b/mailpoet/tests/integration/Cron/Workers/SendingQueue/SendingQueueTest.php @@ -102,6 +102,12 @@ class SendingQueueTest extends \MailPoetTest { /** @var ScheduledTaskSubscribersRepository */ private $scheduledTaskSubscribersRepository; + /** @var ScheduledTaskEntity */ + private $scheduledTaskEntity; + + /** @var SendingQueueEntity */ + private $sendingQueueEntity; + public function _before() { parent::_before(); $wpUsers = get_users(); @@ -170,6 +176,15 @@ class SendingQueueTest extends \MailPoetTest { $this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class); $this->sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class); $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() { @@ -267,7 +282,7 @@ class SendingQueueTest extends \MailPoetTest { $this->entityManager ); $sendingQueueWorker->sendNewsletters( - $this->queue, + $this->scheduledTaskEntity, $preparedSubscribers = [], $preparedNewsletters = [], $preparedSubscribers = [], @@ -287,6 +302,7 @@ class SendingQueueTest extends \MailPoetTest { $queue = $this->queue; $queue->status = SendingQueue::STATUS_COMPLETED; $queue->save(); + $this->entityManager->refresh($this->scheduledTaskEntity); $sendingQueueWorker = $this->make( $this->getSendingQueueWorker(), [ @@ -316,7 +332,7 @@ class SendingQueueTest extends \MailPoetTest { $this->entityManager ); $sendingQueueWorker->sendNewsletters( - $queue, + $this->scheduledTaskEntity, $preparedSubscribers = [], $preparedNewsletters = [], $preparedSubscribers = [], @@ -510,6 +526,12 @@ class SendingQueueTest extends \MailPoetTest { $queue->newsletterRenderedBody = ['html' => '

Hello [subscriber:email]

', 'text' => 'Hello [subscriber:email]']; $queue->newsletterRenderedSubject = 'News for [subscriber:email]'; $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); $newsletter = $this->newsletter; @@ -547,7 +569,7 @@ class SendingQueueTest extends \MailPoetTest { Subscriber::findOne($subscriber2->getId()), ]; - $sendingQueueWorker->processQueue($queue, $newsletter, $subscribersModels, $timer); + $sendingQueueWorker->processQueue($scheduledTaskEntity, $newsletter, $subscribersModels, $timer); } public function testItCanProcessSubscribersInBulk() { @@ -698,8 +720,13 @@ class SendingQueueTest extends \MailPoetTest { $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( - $queue, + $scheduledTask, [$this->subscriber->getId(), $wrongSubscriber->getId()], [], [$this->subscriber->getEmail(), $wrongSubscriber->getEmail()], @@ -707,11 +734,7 @@ class SendingQueueTest extends \MailPoetTest { microtime(true) ); - // load queue and 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); + // compare data after first sending $this->sendingQueuesRepository->refresh($sendingQueue); $this->scheduledTasksRepository->refresh($scheduledTask); verify($scheduledTask->getSubscribersByProcessed(ScheduledTaskSubscriber::STATUS_UNPROCESSED))->equals([$this->subscriber]); @@ -721,7 +744,7 @@ class SendingQueueTest extends \MailPoetTest { verify($sendingQueue->getCountToProcess())->equals(1); $sendingQueueWorker->sendNewsletters( - $queue, + $scheduledTask, [$this->subscriber->getId()], [], [$this->subscriber->getEmail()], @@ -816,6 +839,7 @@ class SendingQueueTest extends \MailPoetTest { $this->subscriber->setStatus(Subscriber::STATUS_UNSUBSCRIBED); $this->entityManager->flush(); $this->newsletterSegment->delete(); + $this->entityManager->refresh($this->sendingQueueEntity); $sendingQueueWorker = $this->getSendingQueueWorker( $this->construct( @@ -852,6 +876,7 @@ class SendingQueueTest extends \MailPoetTest { $this->subscriber->getId(), // subscriber that should be processed $unsubscribedSubscriber->getId(), // subscriber that should be skipped ]); + $this->entityManager->refresh($this->sendingQueueEntity); $sendingQueueWorker = $this->getSendingQueueWorker( $this->construct( MailerTask::class, @@ -889,6 +914,7 @@ class SendingQueueTest extends \MailPoetTest { ]); $queue->countTotal = 2; $queue->save(); + $this->entityManager->refresh($this->sendingQueueEntity); $sendingQueueWorker = $this->sendingQueueWorker; $sendingQueueWorker->mailerTask = $this->construct( MailerTask::class, @@ -931,6 +957,7 @@ class SendingQueueTest extends \MailPoetTest { $queue->setSubscribers($subscribers); $queue->countTotal = count($subscribers); $queue->save(); + $this->entityManager->refresh($this->sendingQueueEntity); $sendingQueueWorker = $this->sendingQueueWorker; $sendingQueueWorker->mailerTask = $this->construct( MailerTask::class, @@ -967,6 +994,7 @@ class SendingQueueTest extends \MailPoetTest { ]); $queue->countTotal = 2; $queue->save(); + $this->entityManager->refresh($this->sendingQueueEntity); $sendingQueueWorker = $this->sendingQueueWorker; $sendingQueueWorker->mailerTask = $this->construct( MailerTask::class, @@ -1003,6 +1031,7 @@ class SendingQueueTest extends \MailPoetTest { $subscriber = $this->subscriber; $subscriber->setDeletedAt(Carbon::now()); $this->entityManager->flush(); + $this->entityManager->refresh($this->sendingQueueEntity); $sendingQueueWorker->process(); $sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id); @@ -1029,6 +1058,7 @@ class SendingQueueTest extends \MailPoetTest { $subscriber = $this->subscriber; $subscriber->setStatus($subscriberStatus); $this->entityManager->flush(); + $this->entityManager->refresh($this->sendingQueueEntity); $sendingQueueWorker->process(); $sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id); @@ -1062,6 +1092,7 @@ class SendingQueueTest extends \MailPoetTest { $subscriber = $this->subscriber; $subscriber->setStatus(Subscriber::STATUS_UNSUBSCRIBED); $this->entityManager->flush(); + $this->entityManager->refresh($this->sendingQueueEntity); $sendingQueueWorker->process(); $sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id); @@ -1082,6 +1113,7 @@ class SendingQueueTest extends \MailPoetTest { $subscriberSegment = $this->subscriberSegment; $subscriberSegment->status = Subscriber::STATUS_UNSUBSCRIBED; $subscriberSegment->save(); + $this->entityManager->refresh($this->sendingQueueEntity); $sendingQueueWorker->process(); $sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id); @@ -1102,6 +1134,7 @@ class SendingQueueTest extends \MailPoetTest { $subscriber = $this->subscriber; $subscriber->setStatus(Subscriber::STATUS_INACTIVE); $this->entityManager->flush(); + $this->entityManager->refresh($this->sendingQueueEntity); $sendingQueueWorker->process(); $sendingQueue = $this->sendingQueuesRepository->findOneById($this->queue->id); @@ -1111,14 +1144,10 @@ class SendingQueueTest extends \MailPoetTest { } public function testItPausesSendingWhenProcessedSubscriberListCannotBeUpdated() { - $sendingTask = $this->createMock(SendingTask::class); - $sendingTask + $scheduledTaskSubscribersRepository = $this->createMock(ScheduledTaskSubscribersRepository::class); + $scheduledTaskSubscribersRepository ->method('updateProcessedSubscribers') - ->will($this->returnValue(false)); - $sendingTask - ->method('__get') - ->with('id') - ->will($this->returnValue(100)); + ->willThrowException(new \Exception()); $sendingQueueWorker = $this->make( $this->getSendingQueueWorker() ); @@ -1134,7 +1163,7 @@ class SendingQueueTest extends \MailPoetTest { $this->wp, $this->tasksLinks, $this->scheduledTasksRepository, - $this->scheduledTaskSubscribersRepository, + $scheduledTaskSubscribersRepository, $this->construct( MailerTask::class, [$this->diContainer->get(MailerFactory::class)], @@ -1148,7 +1177,7 @@ class SendingQueueTest extends \MailPoetTest { ); try { $sendingQueueWorker->sendNewsletters( - $sendingTask, + $this->scheduledTaskEntity, $preparedSubscribers = [], $preparedNewsletters = [], $preparedSubscribers = [], @@ -1164,7 +1193,7 @@ class SendingQueueTest extends \MailPoetTest { verify($mailerLog['error'])->equals( [ '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); $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; }