- Prevents newsletters from being sent to trashed subscribers
- Updates unit tests - Addresses #629
This commit is contained in:
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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();
|
||||||
|
Reference in New Issue
Block a user