diff --git a/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php b/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php index 272c84370e..220e6804eb 100644 --- a/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php +++ b/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php @@ -164,8 +164,16 @@ class ScheduledTaskSubscribersRepository extends Repository { } } + public function countProcessed(ScheduledTaskEntity $scheduledTaskEntity): int { + return $this->countBy(['task' => $scheduledTaskEntity, 'processed' => ScheduledTaskSubscriberEntity::STATUS_PROCESSED]); + } + + public function countUnprocessed(ScheduledTaskEntity $scheduledTaskEntity): int { + return $this->countBy(['task' => $scheduledTaskEntity, 'processed' => ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED]); + } + private function checkCompleted(ScheduledTaskEntity $task): void { - $count = $this->countBy(['task' => $task, 'processed' => ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED]); + $count = $this->countUnprocessed($task); if ($count === 0) { $task->setStatus(ScheduledTaskEntity::STATUS_COMPLETED); $task->setProcessedAt(new Carbon()); diff --git a/mailpoet/lib/Tasks/Sending.php b/mailpoet/lib/Tasks/Sending.php index 67bcdd8ad1..ee8d9af360 100644 --- a/mailpoet/lib/Tasks/Sending.php +++ b/mailpoet/lib/Tasks/Sending.php @@ -10,7 +10,6 @@ use MailPoet\Entities\SendingQueueEntity; use MailPoet\InvalidStateException; use MailPoet\Logging\LoggerFactory; use MailPoet\Models\ScheduledTask; -use MailPoet\Models\ScheduledTaskSubscriber; use MailPoet\Models\SendingQueue; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository; @@ -305,8 +304,8 @@ class Sending { $this->queue->countToProcess = max($this->queue->countToProcess - $count, 0); } else { // query DB to update counts, slower but more accurate, to be used if count isn't known - $this->queue->countProcessed = ScheduledTaskSubscriber::getProcessedCount($this->task->id); - $this->queue->countToProcess = ScheduledTaskSubscriber::getUnprocessedCount($this->task->id); + $this->queue->countProcessed = $this->scheduledTaskSubscribersRepository->countProcessed($this->scheduledTaskEntity); + $this->queue->countToProcess = $this->scheduledTaskSubscribersRepository->countUnprocessed($this->scheduledTaskEntity); $this->queue->countTotal = $this->queue->countProcessed + $this->queue->countToProcess; } return $this->queue->save(); diff --git a/mailpoet/tests/integration/Newsletter/Sending/ScheduledTaskSubscribersRepositoryTest.php b/mailpoet/tests/integration/Newsletter/Sending/ScheduledTaskSubscribersRepositoryTest.php index 188ee895e6..2beb1501b4 100644 --- a/mailpoet/tests/integration/Newsletter/Sending/ScheduledTaskSubscribersRepositoryTest.php +++ b/mailpoet/tests/integration/Newsletter/Sending/ScheduledTaskSubscribersRepositoryTest.php @@ -96,4 +96,24 @@ class ScheduledTaskSubscribersRepositoryTest extends \MailPoetTest { $this->assertSame([$this->taskSubscriber2, $this->taskSubscriber3], $this->repository->findBy(['task' => $this->scheduledTask1])); $this->assertSame([], $this->repository->findBy(['task' => $this->scheduledTask2])); } + + public function testCountProcessed() { + $this->assertSame(2, $this->repository->countProcessed($this->scheduledTask1)); + $this->assertSame(1, $this->repository->countProcessed($this->scheduledTask2)); + + $subscriberId = $this->subscriberUnprocessed->getId(); + $this->assertIsInt($subscriberId); + $this->repository->updateProcessedSubscribers($this->scheduledTask2, [$subscriberId]); + $this->assertSame(2, $this->repository->countProcessed($this->scheduledTask2)); + } + + public function testCountUnprocessed() { + $this->assertSame(1, $this->repository->countUnprocessed($this->scheduledTask1)); + $this->assertSame(1, $this->repository->countUnprocessed($this->scheduledTask2)); + + $subscriberId = $this->subscriberUnprocessed->getId(); + $this->assertIsInt($subscriberId); + $this->repository->updateProcessedSubscribers($this->scheduledTask2, [$subscriberId]); + $this->assertSame(0, $this->repository->countUnprocessed($this->scheduledTask2)); + } }