- Prevents newsletters from being sent to trashed subscribers

- Updates unit tests
- Addresses #629
This commit is contained in:
Vlad
2016-10-21 13:55:47 -04:00
parent 2787998d32
commit 1ac288d286
4 changed files with 37 additions and 3 deletions

View File

@ -47,6 +47,7 @@ class SendingQueue {
// abort if execution limit is reached // abort if execution limit is reached
CronHelper::enforceExecutionLimit($this->timer); CronHelper::enforceExecutionLimit($this->timer);
$found_subscribers = SubscriberModel::whereIn('id', $subscribers_to_process_ids) $found_subscribers = SubscriberModel::whereIn('id', $subscribers_to_process_ids)
->whereNull('deleted_at')
->findMany(); ->findMany();
$found_subscribers_ids = array_map(function($subscriber) { $found_subscribers_ids = array_map(function($subscriber) {
return $subscriber->id; return $subscriber->id;

View File

@ -383,6 +383,7 @@ class Subscriber extends Model {
'subscribers.id = relation.subscriber_id', 'subscribers.id = relation.subscriber_id',
'subscribers' 'subscribers'
) )
->whereNull('subscribers.deleted_at')
->where('subscribers.status', 'subscribed'); ->where('subscribers.status', 'subscribed');
return $subscribers; return $subscribers;
} }

View File

@ -1,5 +1,6 @@
<?php <?php
use Carbon\Carbon;
use Codeception\Util\Fixtures; use Codeception\Util\Fixtures;
use Codeception\Util\Stub; use Codeception\Util\Stub;
use MailPoet\API\Endpoints\Cron; use MailPoet\API\Endpoints\Cron;
@ -298,6 +299,29 @@ class SendingQueueTest extends MailPoetTest {
expect($statistics)->false(); expect($statistics)->false();
} }
function testItDoesNotSendToTrashedSubscribers() {
$sending_queue_worker = $this->sending_queue_worker;
$sending_queue_worker->mailer_task = Stub::make(
new MailerTask(),
array('send' => function($newsletter, $subscriber) { return true; })
);
// newsletter is sent to existing subscriber
$sending_queue_worker->process();
$updated_queue = SendingQueue::findOne($this->queue->id);
expect((int)$updated_queue->count_total)->equals(1);
// newsletter is not sent to trashed subscriber
$this->_after();
$this->_before();
$subscriber = $this->subscriber;
$subscriber->deleted_at = Carbon::now();
$subscriber->save();
$sending_queue_worker->process();
$updated_queue = SendingQueue::findOne($this->queue->id);
expect((int)$updated_queue->count_total)->equals(0);
}
function _after() { function _after() {
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table); ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table); ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);

View File

@ -1,5 +1,6 @@
<?php <?php
use Carbon\Carbon;
use MailPoet\Models\CustomField; use MailPoet\Models\CustomField;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
@ -369,7 +370,7 @@ class SubscriberTest extends MailPoetTest {
->equals('non_default_value'); ->equals('non_default_value');
} }
function testItCanGetOnlySubscribedSubscribersInSegments() { function testItCanGetOnlySubscribedAndNonTrashedSubscribersInSegments() {
$subscriber_1 = Subscriber::createOrUpdate(array( $subscriber_1 = Subscriber::createOrUpdate(array(
'first_name' => 'Adam', 'first_name' => 'Adam',
'last_name' => 'Smith', 'last_name' => 'Smith',
@ -384,13 +385,20 @@ class SubscriberTest extends MailPoetTest {
'status' => Subscriber::STATUS_SUBSCRIBED 'status' => Subscriber::STATUS_SUBSCRIBED
)); ));
$subscriber_3 = Subscriber::createOrUpdate(array(
'first_name' => 'Bob',
'last_name' => 'Smith',
'email' => 'bob@smith.com',
'status' => Subscriber::STATUS_SUBSCRIBED,
'deleted_at' => Carbon::now()
));
$segment = Segment::createOrUpdate(array( $segment = Segment::createOrUpdate(array(
'name' => 'Only Subscribed Subscribers Segment' 'name' => 'Only Subscribed Subscribers Segment'
)); ));
//Subscriber::createMultiple($columns, $values);
$result = SubscriberSegment::subscribeManyToSegments( $result = SubscriberSegment::subscribeManyToSegments(
array($subscriber_1->id, $subscriber_2->id), array($subscriber_1->id, $subscriber_2->id, $subscriber_3->id),
array($segment->id) array($segment->id)
); );
expect($result)->true(); expect($result)->true();