Fetch only subscribed recipients when sending a newsletter
[MAILPOET-4166]
This commit is contained in:
committed by
Veljko V
parent
3316a2a3f8
commit
6a6c04f168
@@ -185,7 +185,7 @@ class SendingQueue {
|
|||||||
if (!empty($newsletterSegmentsIds[0])) {
|
if (!empty($newsletterSegmentsIds[0])) {
|
||||||
// Check that subscribers are in segments
|
// Check that subscribers are in segments
|
||||||
$foundSubscribersIds = $this->subscribersFinder->findSubscribersInSegments($subscribersToProcessIds, $newsletterSegmentsIds);
|
$foundSubscribersIds = $this->subscribersFinder->findSubscribersInSegments($subscribersToProcessIds, $newsletterSegmentsIds);
|
||||||
$foundSubscribers = SubscriberModel::whereIn('id', $subscribersToProcessIds)
|
$foundSubscribers = empty($foundSubscribersIds) ? [] : SubscriberModel::whereIn('id', $foundSubscribersIds)
|
||||||
->whereNull('deleted_at')
|
->whereNull('deleted_at')
|
||||||
->findMany();
|
->findMany();
|
||||||
} else {
|
} else {
|
||||||
|
@@ -59,6 +59,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
public $sendingQueueWorker;
|
public $sendingQueueWorker;
|
||||||
public $cronHelper;
|
public $cronHelper;
|
||||||
public $newsletterLink;
|
public $newsletterLink;
|
||||||
|
/* @var SendingTask */
|
||||||
public $queue;
|
public $queue;
|
||||||
public $newsletterSegment;
|
public $newsletterSegment;
|
||||||
public $newsletter;
|
public $newsletter;
|
||||||
@@ -706,6 +707,44 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
expect($updatedQueue->countToProcess)->equals(0);
|
expect($updatedQueue->countToProcess)->equals(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testItPreventsSendingNewsletterToRecipientWhoIsUnsubscribed() {
|
||||||
|
$subscriberFactory = new \MailPoet\Test\DataFactories\Subscriber();
|
||||||
|
$unsubscribedSubscriber = $subscriberFactory
|
||||||
|
->withStatus(SubscriberEntity::STATUS_UNSUBSCRIBED)
|
||||||
|
->create();
|
||||||
|
$this->queue->setSubscribers([
|
||||||
|
$this->subscriber->getId(), // subscriber that should be processed
|
||||||
|
$unsubscribedSubscriber->getId(), // subscriber that should be skipped
|
||||||
|
]);
|
||||||
|
$sendingQueueWorker = $this->getSendingQueueWorker(
|
||||||
|
null,
|
||||||
|
Stub::make(
|
||||||
|
new MailerTask(),
|
||||||
|
[
|
||||||
|
'send' => Expected::exactly(1, function() {
|
||||||
|
return $this->mailerTaskDummyResponse;
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
$this
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$sendingQueueWorker->process();
|
||||||
|
|
||||||
|
// queue status is set to completed
|
||||||
|
/** @var SendingQueue $updatedQueue */
|
||||||
|
$updatedQueue = SendingQueue::findOne($this->queue->id);
|
||||||
|
$updatedQueue = SendingTask::createFromQueue($updatedQueue);
|
||||||
|
|
||||||
|
// Unprocessable subscribers were removed
|
||||||
|
expect($updatedQueue->getSubscribers(ScheduledTaskSubscriber::STATUS_PROCESSED))
|
||||||
|
->equals([
|
||||||
|
$this->subscriber->getId(), // subscriber that should be processed
|
||||||
|
]);
|
||||||
|
expect($updatedQueue->countTotal)->equals(1);
|
||||||
|
expect($updatedQueue->countProcessed)->equals(1);
|
||||||
|
expect($updatedQueue->countToProcess)->equals(0);
|
||||||
|
}
|
||||||
|
|
||||||
public function testItRemovesNonexistentSubscribersFromProcessingList() {
|
public function testItRemovesNonexistentSubscribersFromProcessingList() {
|
||||||
$queue = $this->queue;
|
$queue = $this->queue;
|
||||||
$queue->setSubscribers([
|
$queue->setSubscribers([
|
||||||
|
Reference in New Issue
Block a user