Merge pull request #1257 from mailpoet/scheduled_emails_to_dynamic_segments_fix

Fix sending of scheduled standard emails to dynamic segments [MAILPOET-1286]
This commit is contained in:
amine-mp
2018-02-05 11:25:30 +01:00
committed by GitHub
2 changed files with 10 additions and 4 deletions

View File

@ -106,10 +106,8 @@ class Scheduler {
function processScheduledStandardNewsletter($newsletter, $queue) { function processScheduledStandardNewsletter($newsletter, $queue) {
$segments = $newsletter->segments()->findArray(); $segments = $newsletter->segments()->findArray();
$segment_ids = array_map(function($segment) { $finder = new SubscribersFinder();
return $segment['id']; $subscribers = $finder->getSubscribersByList($segments);
}, $segments);
$subscribers = Subscriber::getSubscribedInSegments($segment_ids)->findArray();
$subscribers = Helpers::flattenArray($subscribers); $subscribers = Helpers::flattenArray($subscribers);
// update current queue // update current queue
$queue->subscribers = serialize( $queue->subscribers = serialize(

View File

@ -1,6 +1,7 @@
<?php <?php
namespace MailPoet\Test\Cron\Workers; namespace MailPoet\Test\Cron\Workers;
use AspectMock\Test as Mock;
use Carbon\Carbon; use Carbon\Carbon;
use Codeception\Util\Stub; use Codeception\Util\Stub;
use MailPoet\Cron\CronHelper; use MailPoet\Cron\CronHelper;
@ -363,6 +364,7 @@ class SchedulerTest extends \MailPoetTest {
->findOne($newsletter->id); ->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id); $queue = $this->_createQueue($newsletter->id);
$scheduler = new Scheduler(); $scheduler = new Scheduler();
$finder = Mock::double('MailPoet\Segments\SubscribersFinder');
// return true // return true
expect($scheduler->processScheduledStandardNewsletter($newsletter, $queue))->true(); expect($scheduler->processScheduledStandardNewsletter($newsletter, $queue))->true();
@ -375,6 +377,8 @@ class SchedulerTest extends \MailPoetTest {
// set newsletter's status to sending // set newsletter's status to sending
$updated_newsletter = Newsletter::findOne($newsletter->id); $updated_newsletter = Newsletter::findOne($newsletter->id);
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENDING); expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENDING);
// SubscribersFinder is used for getting subscribers
$finder->verifyInvoked('getSubscribersByList');
} }
function testItFailsToProcessPostNotificationNewsletterWhenSegmentsDontExist() { function testItFailsToProcessPostNotificationNewsletterWhenSegmentsDontExist() {
@ -421,6 +425,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter = Newsletter::filter('filterWithOptions') $newsletter = Newsletter::filter('filterWithOptions')
->findOne($newsletter->id); ->findOne($newsletter->id);
$scheduler = new Scheduler(); $scheduler = new Scheduler();
$finder = Mock::double('MailPoet\Segments\SubscribersFinder');
// return true // return true
expect($scheduler->processPostNotificationNewsletter($newsletter, $queue))->true(); expect($scheduler->processPostNotificationNewsletter($newsletter, $queue))->true();
@ -438,6 +443,8 @@ class SchedulerTest extends \MailPoetTest {
$updated_notification_history = Newsletter::where('parent_id', $newsletter->id) $updated_notification_history = Newsletter::where('parent_id', $newsletter->id)
->findOne(); ->findOne();
expect($updated_notification_history->status)->equals(Newsletter::STATUS_SENDING); expect($updated_notification_history->status)->equals(Newsletter::STATUS_SENDING);
// SubscribersFinder is used for getting subscribers
$finder->verifyInvoked('getSubscribersByList');
} }
function testItFailsToProcessWhenScheduledQueuesNotFound() { function testItFailsToProcessWhenScheduledQueuesNotFound() {
@ -662,6 +669,7 @@ class SchedulerTest extends \MailPoetTest {
} }
function _after() { function _after() {
Mock::clean();
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table); \ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . Setting::$_table); \ORM::raw_execute('TRUNCATE ' . Setting::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table); \ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);