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();
|
||||
return false;
|
||||
}
|
||||
// check if subscriber is confirmed (subscribed)
|
||||
if ($subscriber->status !== Subscriber::STATUS_SUBSCRIBED) {
|
||||
// reschedule delivery
|
||||
$queue->rescheduleProgressively();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
return $this->verifySubscriber($subscriber, $queue);
|
||||
}
|
||||
|
||||
function verifyWPSubscriber($subscriber_id, $newsletter, $queue) {
|
||||
@ -194,6 +188,18 @@ class Scheduler {
|
||||
$queue->delete();
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -88,6 +88,7 @@ class SendingQueue {
|
||||
} else {
|
||||
// No segments = Welcome emails
|
||||
$found_subscribers = SubscriberModel::whereIn('id', $subscribers_to_process_ids)
|
||||
->where('status', SubscriberModel::STATUS_SUBSCRIBED)
|
||||
->whereNull('deleted_at')
|
||||
->findMany();
|
||||
$found_subscribers_ids = SubscriberModel::extractSubscribersIds($found_subscribers);
|
||||
|
@ -305,7 +305,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
function testItReschedulesQueueDeliveryWhenMailpoetSubscriberHasNotConfirmedSubscription() {
|
||||
$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');
|
||||
$subscriber = $this->_createSubscriber($wp_user_id = null, 'unconfirmed');
|
||||
$segment = $this->_createSegment();
|
||||
$subscriber_segment = $this->_createSubscriberSegment($subscriber->id, $segment->id);
|
||||
$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() {
|
||||
$subscriber = $this->_createSubscriber();
|
||||
$segment = $this->_createSegment();
|
||||
|
@ -488,6 +488,36 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
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() {
|
||||
$queue = $this->queue;
|
||||
$queue->setSubscribers([
|
||||
|
Reference in New Issue
Block a user