Refactor SubscriberFinder::addSubscribersToTaskFromSegments to return void
We removed the return value to prevent us from using it to check if there were recipients. It is not 100% reliable for that purpose because it returns 0 for a repeated call. [MAILPOET-6346]
This commit is contained in:
committed by
Aschepikov
parent
74de985620
commit
e6abec74d4
@@ -166,7 +166,8 @@ class SendingQueue extends APIEndpoint {
|
|||||||
$segments = $newsletter->getSegmentIds();
|
$segments = $newsletter->getSegmentIds();
|
||||||
|
|
||||||
$this->scheduledTasksRepository->refresh($scheduledTask);
|
$this->scheduledTasksRepository->refresh($scheduledTask);
|
||||||
$subscribersCount = $this->subscribersFinder->addSubscribersToTaskFromSegments($scheduledTask, $segments, $newsletter->getFilterSegmentId());
|
$this->subscribersFinder->addSubscribersToTaskFromSegments($scheduledTask, $segments, $newsletter->getFilterSegmentId());
|
||||||
|
$subscribersCount = $scheduledTask->getSubscribers()->count();
|
||||||
|
|
||||||
if (!$subscribersCount) {
|
if (!$subscribersCount) {
|
||||||
return $this->errorResponse([
|
return $this->errorResponse([
|
||||||
|
@@ -68,15 +68,15 @@ class SubscribersFinder {
|
|||||||
* @param ScheduledTaskEntity $task
|
* @param ScheduledTaskEntity $task
|
||||||
* @param array<int> $segmentIds
|
* @param array<int> $segmentIds
|
||||||
*
|
*
|
||||||
* @return float|int
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function addSubscribersToTaskFromSegments(ScheduledTaskEntity $task, array $segmentIds, ?int $filterSegmentId = null) {
|
public function addSubscribersToTaskFromSegments(ScheduledTaskEntity $task, array $segmentIds, ?int $filterSegmentId = null): void {
|
||||||
// Prepare subscribers on the DB side for performance reasons
|
// Prepare subscribers on the DB side for performance reasons
|
||||||
if (is_int($filterSegmentId)) {
|
if (is_int($filterSegmentId)) {
|
||||||
try {
|
try {
|
||||||
$this->segmentsRepository->verifyDynamicSegmentExists($filterSegmentId);
|
$this->segmentsRepository->verifyDynamicSegmentExists($filterSegmentId);
|
||||||
} catch (InvalidStateException $exception) {
|
} catch (InvalidStateException $exception) {
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$staticSegmentIds = [];
|
$staticSegmentIds = [];
|
||||||
@@ -101,7 +101,6 @@ class SubscribersFinder {
|
|||||||
if ($count > 0) {
|
if ($count > 0) {
|
||||||
$this->entityManager->refresh($task);
|
$this->entityManager->refresh($task);
|
||||||
}
|
}
|
||||||
return $count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -17,13 +17,13 @@ use MailPoetVendor\Carbon\Carbon;
|
|||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
|
||||||
class SubscribersFinderTest extends \MailPoetTest {
|
class SubscribersFinderTest extends \MailPoetTest {
|
||||||
public $scheduledTask;
|
private ScheduledTaskEntity $scheduledTask;
|
||||||
public $subscriber3;
|
private SubscriberEntity $subscriber3;
|
||||||
public $subscriber2;
|
private SubscriberEntity $subscriber2;
|
||||||
public $subscriber1;
|
private SubscriberEntity $subscriber1;
|
||||||
public $segment3;
|
private SegmentEntity $segment3;
|
||||||
public $segment2;
|
private SegmentEntity $segment2;
|
||||||
public $segment1;
|
private SegmentEntity $segment1;
|
||||||
|
|
||||||
/** @var SubscribersFinder */
|
/** @var SubscribersFinder */
|
||||||
private $subscribersFinder;
|
private $subscribersFinder;
|
||||||
@@ -96,26 +96,28 @@ class SubscribersFinderTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testItAddsSubscribersToTaskFromStaticSegments() {
|
public function testItAddsSubscribersToTaskFromStaticSegments() {
|
||||||
$subscribersCount = $this->subscribersFinder->addSubscribersToTaskFromSegments(
|
$this->subscribersFinder->addSubscribersToTaskFromSegments(
|
||||||
$this->scheduledTask,
|
$this->scheduledTask,
|
||||||
[
|
[
|
||||||
$this->segment1->getId(),
|
(int)$this->segment1->getId(),
|
||||||
$this->segment2->getId(),
|
(int)$this->segment2->getId(),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
$subscribersCount = $this->scheduledTask->getSubscribers()->count();
|
||||||
verify($subscribersCount)->equals(1);
|
verify($subscribersCount)->equals(1);
|
||||||
$subscribersIds = $this->getScheduledTasksSubscribers($this->scheduledTask->getId());
|
$subscribersIds = $this->getScheduledTasksSubscribers((int)$this->scheduledTask->getId());
|
||||||
verify($subscribersIds)->equals([$this->subscriber2->getId()]);
|
verify($subscribersIds)->equals([$this->subscriber2->getId()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItDoesNotAddSubscribersToTaskFromNoSegment() {
|
public function testItDoesNotAddSubscribersToTaskFromNoSegment() {
|
||||||
$this->segment3->setType('Invalid type');
|
$this->segment3->setType('Invalid type');
|
||||||
$subscribersCount = $this->subscribersFinder->addSubscribersToTaskFromSegments(
|
$this->subscribersFinder->addSubscribersToTaskFromSegments(
|
||||||
$this->scheduledTask,
|
$this->scheduledTask,
|
||||||
[
|
[
|
||||||
$this->segment3->getId(),
|
(int)$this->segment3->getId(),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
$subscribersCount = $this->scheduledTask->getSubscribers()->count();
|
||||||
verify($subscribersCount)->equals(0);
|
verify($subscribersCount)->equals(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,14 +131,15 @@ class SubscribersFinderTest extends \MailPoetTest {
|
|||||||
$this->segment2->setType(SegmentEntity::TYPE_DYNAMIC);
|
$this->segment2->setType(SegmentEntity::TYPE_DYNAMIC);
|
||||||
|
|
||||||
$finder = new SubscribersFinder($mock, $this->segmentsRepository, $this->entityManager);
|
$finder = new SubscribersFinder($mock, $this->segmentsRepository, $this->entityManager);
|
||||||
$subscribersCount = $finder->addSubscribersToTaskFromSegments(
|
$finder->addSubscribersToTaskFromSegments(
|
||||||
$this->scheduledTask,
|
$this->scheduledTask,
|
||||||
[
|
[
|
||||||
$this->segment2->getId(),
|
(int)$this->segment2->getId(),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
$subscribersCount = $this->scheduledTask->getSubscribers()->count();
|
||||||
verify($subscribersCount)->equals(1);
|
verify($subscribersCount)->equals(1);
|
||||||
$subscribersIds = $this->getScheduledTasksSubscribers($this->scheduledTask->getId());
|
$subscribersIds = $this->getScheduledTasksSubscribers((int)$this->scheduledTask->getId());
|
||||||
verify($subscribersIds)->equals([$this->subscriber1->getId()]);
|
verify($subscribersIds)->equals([$this->subscriber1->getId()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,17 +153,17 @@ class SubscribersFinderTest extends \MailPoetTest {
|
|||||||
$this->segment3->setType(SegmentEntity::TYPE_DYNAMIC);
|
$this->segment3->setType(SegmentEntity::TYPE_DYNAMIC);
|
||||||
|
|
||||||
$finder = new SubscribersFinder($mock, $this->segmentsRepository, $this->entityManager);
|
$finder = new SubscribersFinder($mock, $this->segmentsRepository, $this->entityManager);
|
||||||
$subscribersCount = $finder->addSubscribersToTaskFromSegments(
|
$finder->addSubscribersToTaskFromSegments(
|
||||||
$this->scheduledTask,
|
$this->scheduledTask,
|
||||||
[
|
[
|
||||||
$this->segment1->getId(),
|
(int)$this->segment1->getId(),
|
||||||
$this->segment2->getId(),
|
(int)$this->segment2->getId(),
|
||||||
$this->segment3->getId(),
|
(int)$this->segment3->getId(),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
$subscribersCount = $this->scheduledTask->getSubscribers()->count();
|
||||||
verify($subscribersCount)->equals(1);
|
verify($subscribersCount)->equals(1);
|
||||||
$subscribersIds = $this->getScheduledTasksSubscribers($this->scheduledTask->getId());
|
$subscribersIds = $this->getScheduledTasksSubscribers((int)$this->scheduledTask->getId());
|
||||||
verify($subscribersIds)->equals([$this->subscriber2->getId()]);
|
verify($subscribersIds)->equals([$this->subscriber2->getId()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,20 +182,24 @@ class SubscribersFinderTest extends \MailPoetTest {
|
|||||||
|
|
||||||
// Without filtering
|
// Without filtering
|
||||||
$task = (new ScheduledTaskFactory())->create(SendingQueue::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED, new Carbon());
|
$task = (new ScheduledTaskFactory())->create(SendingQueue::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED, new Carbon());
|
||||||
$staticCount = $this->subscribersFinder->addSubscribersToTaskFromSegments($task, [$staticSegment->getId()]);
|
$this->subscribersFinder->addSubscribersToTaskFromSegments($task, [$staticSegment->getId()]);
|
||||||
|
$staticCount = $task->getSubscribers()->count();
|
||||||
verify($staticCount)->equals(2);
|
verify($staticCount)->equals(2);
|
||||||
|
|
||||||
$task = (new ScheduledTaskFactory())->create(SendingQueue::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED, new Carbon());
|
$task = (new ScheduledTaskFactory())->create(SendingQueue::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED, new Carbon());
|
||||||
$dynamicCount = $this->subscribersFinder->addSubscribersToTaskFromSegments($task, [$dynamicSegment->getId()]);
|
$this->subscribersFinder->addSubscribersToTaskFromSegments($task, [$dynamicSegment->getId()]);
|
||||||
|
$dynamicCount = $task->getSubscribers()->count();
|
||||||
verify($dynamicCount)->equals(4);
|
verify($dynamicCount)->equals(4);
|
||||||
|
|
||||||
// With filtering
|
// With filtering
|
||||||
$task = (new ScheduledTaskFactory())->create(SendingQueue::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED, new Carbon());
|
$task = (new ScheduledTaskFactory())->create(SendingQueue::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED, new Carbon());
|
||||||
$staticCount = $this->subscribersFinder->addSubscribersToTaskFromSegments($task, [$staticSegment->getId()], $filterSegment->getId());
|
$this->subscribersFinder->addSubscribersToTaskFromSegments($task, [$staticSegment->getId()], $filterSegment->getId());
|
||||||
|
$staticCount = $task->getSubscribers()->count();
|
||||||
verify($staticCount)->equals(1);
|
verify($staticCount)->equals(1);
|
||||||
|
|
||||||
$task = (new ScheduledTaskFactory())->create(SendingQueue::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED, new Carbon());
|
$task = (new ScheduledTaskFactory())->create(SendingQueue::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED, new Carbon());
|
||||||
$dynamicCount = $this->subscribersFinder->addSubscribersToTaskFromSegments($task, [$dynamicSegment->getId()], $filterSegment->getId());
|
$this->subscribersFinder->addSubscribersToTaskFromSegments($task, [$dynamicSegment->getId()], $filterSegment->getId());
|
||||||
|
$dynamicCount = $task->getSubscribers()->count();
|
||||||
verify($dynamicCount)->equals(2);
|
verify($dynamicCount)->equals(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user