Prevents repeat subscription confirmation
Prevents scheduling of duplicate welcome notifications
This commit is contained in:
@ -73,6 +73,10 @@ class Scheduler {
|
||||
}
|
||||
|
||||
static function createWelcomeNotificationQueue($newsletter, $subscriber_id) {
|
||||
$previously_scheduled_notification = SendingQueue::where('newsletter_id', $newsletter->id)
|
||||
->whereLike('subscribers', '%' . serialize(array($subscriber_id)) . '%')
|
||||
->findOne();
|
||||
if(!empty($previously_scheduled_notification)) return;
|
||||
$queue = SendingQueue::create();
|
||||
$queue->newsletter_id = $newsletter->id;
|
||||
$queue->subscribers = serialize(
|
||||
|
@ -57,7 +57,7 @@ class Pages {
|
||||
}
|
||||
|
||||
function confirm() {
|
||||
if($this->subscriber === false) {
|
||||
if($this->subscriber === false || $this->subscriber->status === Subscriber::STATUS_SUBSCRIBED) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -205,7 +205,6 @@ class Pages {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private function getConfirmContent() {
|
||||
if($this->isPreview() || $this->subscriber !== false) {
|
||||
return __("Yup, we've added you to our email list. You'll hear from us shortly.", 'mailpoet');
|
||||
|
@ -10,7 +10,7 @@ use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||
|
||||
class NewsletterSchedulerTest extends MailPoetTest {
|
||||
function testItSetsConstants() {
|
||||
function testItSetsConstants() {
|
||||
expect(Scheduler::SECONDS_IN_HOUR)->notEmpty();
|
||||
expect(Scheduler::LAST_WEEKDAY_FORMAT)->notEmpty();
|
||||
expect(Scheduler::WORDPRESS_ALL_ROLES)->notEmpty();
|
||||
@ -63,6 +63,27 @@ class NewsletterSchedulerTest extends MailPoetTest {
|
||||
expect(SendingQueue::findMany())->count(1);
|
||||
}
|
||||
|
||||
function testItDoesNotCreateDuplicateWelcomeNotificationQueueRecords() {
|
||||
$newsletter = (object)array(
|
||||
'id' => 1,
|
||||
'afterTimeNumber' => 2,
|
||||
'afterTimeType' => 'hours'
|
||||
);
|
||||
$existing_subscriber = 678;
|
||||
$existing_queue = SendingQueue::create();
|
||||
$existing_queue->newsletter_id = $newsletter->id;
|
||||
$existing_queue->subscribers = array('to_process' => array($existing_subscriber));
|
||||
$existing_queue->save();
|
||||
|
||||
// queue is not scheduled
|
||||
Scheduler::createWelcomeNotificationQueue($newsletter, $existing_subscriber);
|
||||
expect(SendingQueue::findMany())->count(1);
|
||||
|
||||
// queue is not scheduled
|
||||
Scheduler::createWelcomeNotificationQueue($newsletter, 1);
|
||||
expect(SendingQueue::findMany())->count(2);
|
||||
}
|
||||
|
||||
function testItCreatesWelcomeNotificationQueueRecord() {
|
||||
$newsletter = (object)array(
|
||||
'id' => 1,
|
||||
|
@ -27,6 +27,14 @@ class PagesTest extends MailPoetTest {
|
||||
expect($confirmed_subscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
|
||||
}
|
||||
|
||||
function testItDoesNotConfirmSubscriptionOnDuplicateAttempt() {
|
||||
$subscriber = $this->subscriber;
|
||||
$subscriber->status = Subscriber::STATUS_SUBSCRIBED;
|
||||
$subscriber->save();
|
||||
$subscription = new Pages($action = false, $this->data);
|
||||
expect($subscription->confirm())->false();
|
||||
}
|
||||
|
||||
function testItSendsWelcomeNotificationUponConfirmingSubscription() {
|
||||
// create segment
|
||||
$segment = Segment::create();
|
||||
|
Reference in New Issue
Block a user