From 59154a20f4860af1c62e0146c62436c0d769b51e Mon Sep 17 00:00:00 2001 From: Rostislav Wolny Date: Mon, 25 Nov 2024 14:45:53 +0100 Subject: [PATCH] Fix scheduling post notifications with prefilled subscribers queue [MAILPOET-6346] --- mailpoet/lib/Cron/Workers/Scheduler.php | 3 ++- .../Cron/Workers/SchedulerTest.php | 27 ++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/mailpoet/lib/Cron/Workers/Scheduler.php b/mailpoet/lib/Cron/Workers/Scheduler.php index 77d4f5b376..940fa62692 100644 --- a/mailpoet/lib/Cron/Workers/Scheduler.php +++ b/mailpoet/lib/Cron/Workers/Scheduler.php @@ -193,7 +193,8 @@ class Scheduler { } // ensure that subscribers are in segments - $subscribersCount = $this->subscribersFinder->addSubscribersToTaskFromSegments($task, $segments, $newsletter->getFilterSegmentId()); + $this->subscribersFinder->addSubscribersToTaskFromSegments($task, $segments, $newsletter->getFilterSegmentId()); + $subscribersCount = $task->getSubscribers()->count(); if (empty($subscribersCount)) { $this->loggerFactory->getLogger(LoggerFactory::TOPIC_POST_NOTIFICATIONS)->info( 'post notification no subscribers', diff --git a/mailpoet/tests/integration/Cron/Workers/SchedulerTest.php b/mailpoet/tests/integration/Cron/Workers/SchedulerTest.php index fc8c8ceae2..79f8953223 100644 --- a/mailpoet/tests/integration/Cron/Workers/SchedulerTest.php +++ b/mailpoet/tests/integration/Cron/Workers/SchedulerTest.php @@ -523,6 +523,31 @@ class SchedulerTest extends \MailPoetTest { verify($updatedNotificationHistory->getStatus())->equals(NewsletterEntity::STATUS_SENDING); } + public function testItCanProcessPostNotificationNewsletterWithPrefilledScheduledTaskSubscribers() { + $newsletter = $this->_createNewsletter(); + $task = $this->createTaskWithQueue($newsletter); + $segment = $this->_createSegment(); + $this->_createNewsletterSegment($newsletter->getId(), $segment->getId()); + $subscriber = $this->_createSubscriber(); + $this->_createSubscriberSegment($subscriber->getId(), $segment->getId()); + $this->assertIsInt($segment->getId()); + $this->newsletterOptionFactory->create($newsletter, 'segment', $segment->getId()); + $scheduler = $this->getScheduler($this->subscribersFinder); + $this->entityManager->refresh($newsletter); + + // Prefill scheduled task subscriber + $scheduledTaskSubscriber = new ScheduledTaskSubscriberEntity($task, $subscriber); + $this->entityManager->persist($scheduledTaskSubscriber); + $task->getSubscribers()->add($scheduledTaskSubscriber); + $this->entityManager->flush(); + + // return true + verify($scheduler->processPostNotificationNewsletter($newsletter, $task))->true(); + // create notification history + $notificationHistory = $this->newslettersRepository->findOneBy(['parent' => $newsletter->getId()]); + $this->assertInstanceOf(NewsletterEntity::class, $notificationHistory); + } + public function testItDeletesQueueDuringProcessingWhenNewsletterNotFound() { $subscriber = $this->_createSubscriber(); $newsletter = $this->_createNewsletter(NewsletterEntity::TYPE_STANDARD); @@ -601,7 +626,7 @@ class SchedulerTest extends \MailPoetTest { $scheduler = $this->getSchedulerMock([ 'processScheduledStandardNewsletter' => Expected::never(), ]); - + $scheduler->process(); $refetchedTask = $this->scheduledTasksRepository->findOneById($task->getId());