Make sure only subscribed users recieve welcome emails
[MAILPOET-2331]
This commit is contained in:
committed by
Jack Kitterhing
parent
03cb02caac
commit
11b2516d99
@ -171,13 +171,7 @@ class Scheduler {
|
|||||||
$queue->delete();
|
$queue->delete();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// check if subscriber is confirmed (subscribed)
|
return $this->verifySubscriber($subscriber, $queue);
|
||||||
if ($subscriber->status !== Subscriber::STATUS_SUBSCRIBED) {
|
|
||||||
// reschedule delivery
|
|
||||||
$queue->rescheduleProgressively();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function verifyWPSubscriber($subscriber_id, $newsletter, $queue) {
|
function verifyWPSubscriber($subscriber_id, $newsletter, $queue) {
|
||||||
@ -194,6 +188,18 @@ class Scheduler {
|
|||||||
$queue->delete();
|
$queue->delete();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
return $this->verifySubscriber($subscriber, $queue);
|
||||||
|
}
|
||||||
|
|
||||||
|
function verifySubscriber($subscriber, $queue) {
|
||||||
|
if ($subscriber->status === Subscriber::STATUS_UNCONFIRMED) {
|
||||||
|
// reschedule delivery
|
||||||
|
$queue->rescheduleProgressively();
|
||||||
|
return false;
|
||||||
|
} else if ($subscriber->status === Subscriber::STATUS_UNSUBSCRIBED) {
|
||||||
|
$queue->delete();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,6 +88,7 @@ class SendingQueue {
|
|||||||
} else {
|
} else {
|
||||||
// No segments = Welcome emails
|
// No segments = Welcome emails
|
||||||
$found_subscribers = SubscriberModel::whereIn('id', $subscribers_to_process_ids)
|
$found_subscribers = SubscriberModel::whereIn('id', $subscribers_to_process_ids)
|
||||||
|
->where('status', SubscriberModel::STATUS_SUBSCRIBED)
|
||||||
->whereNull('deleted_at')
|
->whereNull('deleted_at')
|
||||||
->findMany();
|
->findMany();
|
||||||
$found_subscribers_ids = SubscriberModel::extractSubscribersIds($found_subscribers);
|
$found_subscribers_ids = SubscriberModel::extractSubscribersIds($found_subscribers);
|
||||||
|
@ -305,7 +305,7 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
function testItReschedulesQueueDeliveryWhenMailpoetSubscriberHasNotConfirmedSubscription() {
|
function testItReschedulesQueueDeliveryWhenMailpoetSubscriberHasNotConfirmedSubscription() {
|
||||||
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
|
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
|
||||||
Carbon::setTestNow($current_time); // mock carbon to return current time
|
Carbon::setTestNow($current_time); // mock carbon to return current time
|
||||||
$subscriber = $this->_createSubscriber($wp_user_id = null, 'unsubscribed');
|
$subscriber = $this->_createSubscriber($wp_user_id = null, 'unconfirmed');
|
||||||
$segment = $this->_createSegment();
|
$segment = $this->_createSegment();
|
||||||
$subscriber_segment = $this->_createSubscriberSegment($subscriber->id, $segment->id);
|
$subscriber_segment = $this->_createSubscriberSegment($subscriber->id, $segment->id);
|
||||||
$newsletter = $this->_createNewsletter();
|
$newsletter = $this->_createNewsletter();
|
||||||
@ -331,6 +331,31 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItDoesntRunQueueDeliveryWhenMailpoetSubscriberHasUnsubscribed() {
|
||||||
|
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
|
||||||
|
Carbon::setTestNow($current_time); // mock carbon to return current time
|
||||||
|
$subscriber = $this->_createSubscriber($wp_user_id = null, 'unsubscribed');
|
||||||
|
$segment = $this->_createSegment();
|
||||||
|
$subscriber_segment = $this->_createSubscriberSegment($subscriber->id, $segment->id);
|
||||||
|
$newsletter = $this->_createNewsletter();
|
||||||
|
$newsletter_option_field =
|
||||||
|
$this->_createNewsletterOptionField('segment', Newsletter::TYPE_NOTIFICATION);
|
||||||
|
$newsletter_option = $this->_createNewsletterOption(
|
||||||
|
$newsletter_option_field->id, $newsletter->id,
|
||||||
|
$segment->id
|
||||||
|
);
|
||||||
|
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
||||||
|
->findOne($newsletter->id);
|
||||||
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
|
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||||
|
|
||||||
|
// return false
|
||||||
|
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
||||||
|
expect($result)->false();
|
||||||
|
// update the time queue is scheduled to run at
|
||||||
|
expect(SendingQueue::findOne($queue->id))->false();
|
||||||
|
}
|
||||||
|
|
||||||
function testItCanVerifyMailpoetSubscriber() {
|
function testItCanVerifyMailpoetSubscriber() {
|
||||||
$subscriber = $this->_createSubscriber();
|
$subscriber = $this->_createSubscriber();
|
||||||
$segment = $this->_createSegment();
|
$segment = $this->_createSegment();
|
||||||
|
@ -488,6 +488,36 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
expect($statistics)->notEquals(false);
|
expect($statistics)->notEquals(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItPreventsSendingWelcomeEmailWhenSubscriberIsUnsubscribed() {
|
||||||
|
$this->newsletter->type = Newsletter::TYPE_WELCOME;
|
||||||
|
$this->subscriber->status = Subscriber::STATUS_UNSUBSCRIBED;
|
||||||
|
$this->subscriber->save();
|
||||||
|
$this->newsletter_segment->delete();
|
||||||
|
|
||||||
|
$sending_queue_worker = new SendingQueueWorker(
|
||||||
|
$this->sending_error_handler,
|
||||||
|
$this->stats_notifications_worker,
|
||||||
|
$timer = false,
|
||||||
|
Stub::make(
|
||||||
|
new MailerTask(),
|
||||||
|
[
|
||||||
|
'send' => Expected::exactly(0),
|
||||||
|
],
|
||||||
|
$this
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$sending_queue_worker->process();
|
||||||
|
|
||||||
|
// queue status is set to completed
|
||||||
|
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($this->queue->id));
|
||||||
|
|
||||||
|
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_PROCESSED))
|
||||||
|
->equals([]);
|
||||||
|
expect($updated_queue->count_total)->equals(0);
|
||||||
|
expect($updated_queue->count_processed)->equals(0);
|
||||||
|
expect($updated_queue->count_to_process)->equals(0);
|
||||||
|
}
|
||||||
|
|
||||||
function testItRemovesNonexistentSubscribersFromProcessingList() {
|
function testItRemovesNonexistentSubscribersFromProcessingList() {
|
||||||
$queue = $this->queue;
|
$queue = $this->queue;
|
||||||
$queue->setSubscribers([
|
$queue->setSubscribers([
|
||||||
|
Reference in New Issue
Block a user