Refactor SubscribersFinder to be always injected by container
[MAILPOET-3077]
This commit is contained in:
committed by
Veljko V
parent
b91687cbc1
commit
694d1fae10
@ -22,8 +22,15 @@ class SendingQueue extends APIEndpoint {
|
|||||||
/** @var SubscribersFeature */
|
/** @var SubscribersFeature */
|
||||||
private $subscribersFeature;
|
private $subscribersFeature;
|
||||||
|
|
||||||
public function __construct(SubscribersFeature $subscribersFeature) {
|
/** @var SubscribersFinder */
|
||||||
|
private $subscribersFinder;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
SubscribersFeature $subscribersFeature,
|
||||||
|
SubscribersFinder $subscribersFinder
|
||||||
|
) {
|
||||||
$this->subscribersFeature = $subscribersFeature;
|
$this->subscribersFeature = $subscribersFeature;
|
||||||
|
$this->subscribersFinder = $subscribersFinder;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function add($data = []) {
|
public function add($data = []) {
|
||||||
@ -90,8 +97,7 @@ class SendingQueue extends APIEndpoint {
|
|||||||
$queue->scheduledAt = Scheduler::formatDatetimeString($newsletter->scheduledAt);
|
$queue->scheduledAt = Scheduler::formatDatetimeString($newsletter->scheduledAt);
|
||||||
} else {
|
} else {
|
||||||
$segments = $newsletter->segments()->findMany();
|
$segments = $newsletter->segments()->findMany();
|
||||||
$finder = new SubscribersFinder();
|
$subscribersCount = $this->subscribersFinder->addSubscribersToTaskFromSegments($queue->task(), $segments);
|
||||||
$subscribersCount = $finder->addSubscribersToTaskFromSegments($queue->task(), $segments);
|
|
||||||
if (!$subscribersCount) {
|
if (!$subscribersCount) {
|
||||||
return $this->errorResponse([
|
return $this->errorResponse([
|
||||||
APIError::UNKNOWN => __('There are no subscribers in that list!', 'mailpoet'),
|
APIError::UNKNOWN => __('There are no subscribers in that list!', 'mailpoet'),
|
||||||
|
@ -50,17 +50,22 @@ class SendingQueue {
|
|||||||
/** @var CronHelper */
|
/** @var CronHelper */
|
||||||
private $cronHelper;
|
private $cronHelper;
|
||||||
|
|
||||||
|
/** @var SubscribersFinder */
|
||||||
|
private $subscribersFinder;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SendingErrorHandler $errorHandler,
|
SendingErrorHandler $errorHandler,
|
||||||
StatsNotificationsScheduler $statsNotificationsScheduler,
|
StatsNotificationsScheduler $statsNotificationsScheduler,
|
||||||
LoggerFactory $loggerFactory,
|
LoggerFactory $loggerFactory,
|
||||||
NewslettersRepository $newslettersRepository,
|
NewslettersRepository $newslettersRepository,
|
||||||
CronHelper $cronHelper,
|
CronHelper $cronHelper,
|
||||||
|
SubscribersFinder $subscriberFinder,
|
||||||
$mailerTask = false,
|
$mailerTask = false,
|
||||||
$newsletterTask = false
|
$newsletterTask = false
|
||||||
) {
|
) {
|
||||||
$this->errorHandler = $errorHandler;
|
$this->errorHandler = $errorHandler;
|
||||||
$this->statsNotificationsScheduler = $statsNotificationsScheduler;
|
$this->statsNotificationsScheduler = $statsNotificationsScheduler;
|
||||||
|
$this->subscribersFinder = $subscriberFinder;
|
||||||
$this->mailerTask = ($mailerTask) ? $mailerTask : new MailerTask();
|
$this->mailerTask = ($mailerTask) ? $mailerTask : new MailerTask();
|
||||||
$this->newsletterTask = ($newsletterTask) ? $newsletterTask : new NewsletterTask();
|
$this->newsletterTask = ($newsletterTask) ? $newsletterTask : new NewsletterTask();
|
||||||
$this->mailerMetaInfo = new MetaInfo;
|
$this->mailerMetaInfo = new MetaInfo;
|
||||||
@ -116,8 +121,7 @@ class SendingQueue {
|
|||||||
);
|
);
|
||||||
if (!empty($newsletterSegmentsIds[0])) {
|
if (!empty($newsletterSegmentsIds[0])) {
|
||||||
// Check that subscribers are in segments
|
// Check that subscribers are in segments
|
||||||
$finder = new SubscribersFinder();
|
$foundSubscribersIds = $this->subscribersFinder->findSubscribersInSegments($subscribersToProcessIds, $newsletterSegmentsIds);
|
||||||
$foundSubscribersIds = $finder->findSubscribersInSegments($subscribersToProcessIds, $newsletterSegmentsIds);
|
|
||||||
$foundSubscribers = SubscriberModel::whereIn('id', $subscribersToProcessIds)
|
$foundSubscribers = SubscriberModel::whereIn('id', $subscribersToProcessIds)
|
||||||
->whereNull('deleted_at')
|
->whereNull('deleted_at')
|
||||||
->findMany();
|
->findMany();
|
||||||
|
@ -180,7 +180,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\Form\Util\FieldNameObfuscator::class)->setPublic(true);
|
$container->autowire(\MailPoet\Form\Util\FieldNameObfuscator::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Form\AssetsController::class)->setPublic(true);
|
$container->autowire(\MailPoet\Form\AssetsController::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Form\DisplayFormInWPContent::class);
|
$container->autowire(\MailPoet\Form\DisplayFormInWPContent::class);
|
||||||
$container->autowire(\MailPoet\Form\FormsRepository::class);
|
$container->autowire(\MailPoet\Form\FormsRepository::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Form\Renderer::class)->setPublic(true);
|
$container->autowire(\MailPoet\Form\Renderer::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Form\BlocksRenderer::class);
|
$container->autowire(\MailPoet\Form\BlocksRenderer::class);
|
||||||
$container->autowire(\MailPoet\Form\BlockStylesRenderer::class);
|
$container->autowire(\MailPoet\Form\BlockStylesRenderer::class);
|
||||||
@ -252,7 +252,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\Subscribers\Statistics\SubscriberStatisticsRepository::class);
|
$container->autowire(\MailPoet\Subscribers\Statistics\SubscriberStatisticsRepository::class);
|
||||||
// Segments
|
// Segments
|
||||||
$container->autowire(\MailPoet\Segments\WooCommerce::class)->setPublic(true);
|
$container->autowire(\MailPoet\Segments\WooCommerce::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Segments\SubscribersFinder::class);
|
$container->autowire(\MailPoet\Segments\SubscribersFinder::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Segments\SegmentsRepository::class);
|
$container->autowire(\MailPoet\Segments\SegmentsRepository::class);
|
||||||
$container->autowire(\MailPoet\Segments\SegmentSubscribersRepository::class)->setPublic(true);
|
$container->autowire(\MailPoet\Segments\SegmentSubscribersRepository::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Segments\DynamicSegments\FilterHandler::class)->setPublic(true);
|
$container->autowire(\MailPoet\Segments\DynamicSegments\FilterHandler::class)->setPublic(true);
|
||||||
@ -304,7 +304,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\Newsletter\Renderer\Blocks\Text::class);
|
$container->autowire(\MailPoet\Newsletter\Renderer\Blocks\Text::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\Renderer\Columns\Renderer::class);
|
$container->autowire(\MailPoet\Newsletter\Renderer\Columns\Renderer::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\Renderer\Preprocessor::class);
|
$container->autowire(\MailPoet\Newsletter\Renderer\Preprocessor::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\Renderer\Renderer::class);
|
$container->autowire(\MailPoet\Newsletter\Renderer\Renderer::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Newsletter\Segment\NewsletterSegmentRepository::class);
|
$container->autowire(\MailPoet\Newsletter\Segment\NewsletterSegmentRepository::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository::class);
|
$container->autowire(\MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class)->setPublic(true);
|
$container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class)->setPublic(true);
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments;
|
namespace MailPoet\Segments;
|
||||||
|
|
||||||
use MailPoet\DI\ContainerWrapper;
|
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\InvalidStateException;
|
use MailPoet\InvalidStateException;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
@ -17,11 +16,8 @@ class SubscribersFinder {
|
|||||||
private $segmentSubscriberRepository;
|
private $segmentSubscriberRepository;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SegmentSubscribersRepository $segmentSubscriberRepository = null
|
SegmentSubscribersRepository $segmentSubscriberRepository
|
||||||
) {
|
) {
|
||||||
if ($segmentSubscriberRepository === null) {
|
|
||||||
$segmentSubscriberRepository = ContainerWrapper::getInstance()->get(SegmentSubscribersRepository::class);
|
|
||||||
}
|
|
||||||
$this->segmentSubscriberRepository = $segmentSubscriberRepository;
|
$this->segmentSubscriberRepository = $segmentSubscriberRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,15 +6,14 @@ use Codeception\Util\Fixtures;
|
|||||||
use Codeception\Util\Stub;
|
use Codeception\Util\Stub;
|
||||||
use MailPoet\API\JSON\Response as APIResponse;
|
use MailPoet\API\JSON\Response as APIResponse;
|
||||||
use MailPoet\API\JSON\v1\SendingQueue as SendingQueueAPI;
|
use MailPoet\API\JSON\v1\SendingQueue as SendingQueueAPI;
|
||||||
use MailPoet\DI\ContainerWrapper;
|
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\NewsletterOption;
|
use MailPoet\Models\NewsletterOption;
|
||||||
use MailPoet\Models\NewsletterOptionField;
|
use MailPoet\Models\NewsletterOptionField;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
||||||
|
use MailPoet\Segments\SubscribersFinder;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\Settings\SettingsRepository;
|
use MailPoet\Settings\SettingsRepository;
|
||||||
use MailPoet\Subscribers\SubscribersRepository;
|
|
||||||
use MailPoet\Tasks\Sending;
|
use MailPoet\Tasks\Sending;
|
||||||
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
|
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
@ -52,7 +51,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$newletterOptions
|
$newletterOptions
|
||||||
);
|
);
|
||||||
|
|
||||||
$sendingQueue = new SendingQueueAPI(new SubscribersFeature(ContainerWrapper::getInstance()->get(SettingsController::class), ContainerWrapper::getInstance()->get(SubscribersRepository::class)));
|
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
||||||
$result = $sendingQueue->add(['newsletter_id' => $newsletter->id]);
|
$result = $sendingQueue->add(['newsletter_id' => $newsletter->id]);
|
||||||
$scheduledTask = ScheduledTask::findOne($result->data['task_id']);
|
$scheduledTask = ScheduledTask::findOne($result->data['task_id']);
|
||||||
expect($scheduledTask->status)->equals(ScheduledTask::STATUS_SCHEDULED);
|
expect($scheduledTask->status)->equals(ScheduledTask::STATUS_SCHEDULED);
|
||||||
@ -61,9 +60,12 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testItReturnsErrorIfSubscribersLimitReached() {
|
public function testItReturnsErrorIfSubscribersLimitReached() {
|
||||||
$sendingQueue = new SendingQueueAPI(Stub::make(SubscribersFeature::class, [
|
$sendingQueue = new SendingQueueAPI(
|
||||||
'check' => true,
|
Stub::make(SubscribersFeature::class, [
|
||||||
]));
|
'check' => true,
|
||||||
|
]),
|
||||||
|
$this->diContainer->get(SubscribersFinder::class)
|
||||||
|
);
|
||||||
$res = $sendingQueue->add(['newsletter_id' => $this->newsletter->id]);
|
$res = $sendingQueue->add(['newsletter_id' => $this->newsletter->id]);
|
||||||
expect($res->status)->equals(APIResponse::STATUS_FORBIDDEN);
|
expect($res->status)->equals(APIResponse::STATUS_FORBIDDEN);
|
||||||
$res = $sendingQueue->resume(['newsletter_id' => $this->newsletter->id]);
|
$res = $sendingQueue->resume(['newsletter_id' => $this->newsletter->id]);
|
||||||
@ -83,7 +85,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
Newsletter::TYPE_STANDARD,
|
Newsletter::TYPE_STANDARD,
|
||||||
$newletterOptions
|
$newletterOptions
|
||||||
);
|
);
|
||||||
$sendingQueue = new SendingQueueAPI(new SubscribersFeature(ContainerWrapper::getInstance()->get(SettingsController::class), ContainerWrapper::getInstance()->get(SubscribersRepository::class)));
|
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
||||||
|
|
||||||
// add scheduled task
|
// add scheduled task
|
||||||
$result = $sendingQueue->add(['newsletter_id' => $newsletter->id]);
|
$result = $sendingQueue->add(['newsletter_id' => $newsletter->id]);
|
||||||
|
@ -6,7 +6,6 @@ use Codeception\Stub;
|
|||||||
use Codeception\Stub\Expected;
|
use Codeception\Stub\Expected;
|
||||||
use MailPoet\Cron\CronHelper;
|
use MailPoet\Cron\CronHelper;
|
||||||
use MailPoet\Cron\Workers\Scheduler;
|
use MailPoet\Cron\Workers\Scheduler;
|
||||||
use MailPoet\DI\ContainerWrapper;
|
|
||||||
use MailPoet\Logging\LoggerFactory;
|
use MailPoet\Logging\LoggerFactory;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\NewsletterOption;
|
use MailPoet\Models\NewsletterOption;
|
||||||
@ -31,10 +30,14 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
/** @var LoggerFactory */
|
/** @var LoggerFactory */
|
||||||
private $loggerFactory;
|
private $loggerFactory;
|
||||||
|
|
||||||
|
/** @var SubscribersFinder */
|
||||||
|
private $subscribersFinder;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->loggerFactory = LoggerFactory::getInstance();
|
$this->loggerFactory = LoggerFactory::getInstance();
|
||||||
$this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class);
|
$this->cronHelper = $this->diContainer->get(CronHelper::class);
|
||||||
|
$this->subscribersFinder = $this->diContainer->get(SubscribersFinder::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItThrowsExceptionWhenExecutionLimitIsReached() {
|
public function testItThrowsExceptionWhenExecutionLimitIsReached() {
|
||||||
@ -414,7 +417,7 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler(new SubscribersFinder(), $this->loggerFactory, $this->cronHelper);
|
$scheduler = new Scheduler($this->subscribersFinder, $this->loggerFactory, $this->cronHelper);
|
||||||
|
|
||||||
// return true
|
// return true
|
||||||
expect($scheduler->processScheduledStandardNewsletter($newsletter, $queue))->true();
|
expect($scheduler->processScheduledStandardNewsletter($newsletter, $queue))->true();
|
||||||
@ -453,7 +456,7 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
$newsletterSegment = $this->_createNewsletterSegment($newsletter->id, $segment->id);
|
$newsletterSegment = $this->_createNewsletterSegment($newsletter->id, $segment->id);
|
||||||
|
|
||||||
// delete or reschedule queue when there are no subscribers in segments
|
// delete or reschedule queue when there are no subscribers in segments
|
||||||
$scheduler = $this->construct(Scheduler::class, [new SubscribersFinder(), $this->loggerFactory, $this->cronHelper], [
|
$scheduler = $this->construct(Scheduler::class, [$this->subscribersFinder, $this->loggerFactory, $this->cronHelper], [
|
||||||
'deleteQueueOrUpdateNextRunDate' => Expected::exactly(1, function() {
|
'deleteQueueOrUpdateNextRunDate' => Expected::exactly(1, function() {
|
||||||
return false;
|
return false;
|
||||||
}),
|
}),
|
||||||
@ -476,7 +479,7 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
);
|
);
|
||||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
$scheduler = new Scheduler(new SubscribersFinder(), $this->loggerFactory, $this->cronHelper);
|
$scheduler = new Scheduler($this->subscribersFinder, $this->loggerFactory, $this->cronHelper);
|
||||||
|
|
||||||
// return true
|
// return true
|
||||||
expect($scheduler->processPostNotificationNewsletter($newsletter, $queue))->true();
|
expect($scheduler->processPostNotificationNewsletter($newsletter, $queue))->true();
|
||||||
@ -701,7 +704,7 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
expect($task->newsletterId)->equals($newsletter->id);
|
expect($task->newsletterId)->equals($newsletter->id);
|
||||||
|
|
||||||
// task should have its status set to null (i.e., sending)
|
// task should have its status set to null (i.e., sending)
|
||||||
$scheduler = new Scheduler(new SubscribersFinder(), $this->loggerFactory, $this->cronHelper);
|
$scheduler = new Scheduler($this->subscribersFinder, $this->loggerFactory, $this->cronHelper);
|
||||||
$scheduler->process();
|
$scheduler->process();
|
||||||
$task = SendingTask::getByNewsletterId($newsletter->id);
|
$task = SendingTask::getByNewsletterId($newsletter->id);
|
||||||
expect($task->status)->null();
|
expect($task->status)->null();
|
||||||
|
@ -34,6 +34,7 @@ use MailPoet\Newsletter\NewslettersRepository;
|
|||||||
use MailPoet\Referrals\ReferralDetector;
|
use MailPoet\Referrals\ReferralDetector;
|
||||||
use MailPoet\Router\Endpoints\Track;
|
use MailPoet\Router\Endpoints\Track;
|
||||||
use MailPoet\Router\Router;
|
use MailPoet\Router\Router;
|
||||||
|
use MailPoet\Segments\SubscribersFinder;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\Settings\SettingsRepository;
|
use MailPoet\Settings\SettingsRepository;
|
||||||
use MailPoet\Subscribers\LinkTokens;
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
@ -65,6 +66,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
private $loggerFactory;
|
private $loggerFactory;
|
||||||
/** @var NewslettersRepository */
|
/** @var NewslettersRepository */
|
||||||
private $newslettersRepository;
|
private $newslettersRepository;
|
||||||
|
/** @var SubscribersFinder */
|
||||||
|
private $subscribersFinder;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
@ -116,16 +119,18 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->newsletterLink->url = '[link:subscription_instant_unsubscribe_url]';
|
$this->newsletterLink->url = '[link:subscription_instant_unsubscribe_url]';
|
||||||
$this->newsletterLink->hash = 'abcde';
|
$this->newsletterLink->hash = 'abcde';
|
||||||
$this->newsletterLink->save();
|
$this->newsletterLink->save();
|
||||||
|
$this->subscribersFinder = $this->diContainer->get(SubscribersFinder::class);
|
||||||
$this->sendingErrorHandler = new SendingErrorHandler();
|
$this->sendingErrorHandler = new SendingErrorHandler();
|
||||||
$this->statsNotificationsWorker = Stub::makeEmpty(StatsNotificationsScheduler::class);
|
$this->statsNotificationsWorker = Stub::makeEmpty(StatsNotificationsScheduler::class);
|
||||||
$this->loggerFactory = LoggerFactory::getInstance();
|
$this->loggerFactory = LoggerFactory::getInstance();
|
||||||
$this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class);
|
$this->cronHelper = $this->diContainer->get(CronHelper::class);
|
||||||
$this->sendingQueueWorker = new SendingQueueWorker(
|
$this->sendingQueueWorker = new SendingQueueWorker(
|
||||||
$this->sendingErrorHandler,
|
$this->sendingErrorHandler,
|
||||||
$this->statsNotificationsWorker,
|
$this->statsNotificationsWorker,
|
||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
||||||
$this->cronHelper
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder
|
||||||
);
|
);
|
||||||
$this->newslettersRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class);
|
$this->newslettersRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class);
|
||||||
}
|
}
|
||||||
@ -163,7 +168,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->statsNotificationsWorker,
|
$this->statsNotificationsWorker,
|
||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class),
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
$this->cronHelper
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder
|
||||||
),
|
),
|
||||||
[
|
[
|
||||||
'processQueue' => Expected::never(),
|
'processQueue' => Expected::never(),
|
||||||
@ -171,7 +177,14 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
throw new \Exception();
|
throw new \Exception();
|
||||||
}),
|
}),
|
||||||
], $this);
|
], $this);
|
||||||
$sendingQueueWorker->__construct($this->sendingErrorHandler, $this->statsNotificationsWorker, $this->loggerFactory, Stub::makeEmpty(NewslettersRepository::class), $this->cronHelper);
|
$sendingQueueWorker->__construct(
|
||||||
|
$this->sendingErrorHandler,
|
||||||
|
$this->statsNotificationsWorker,
|
||||||
|
$this->loggerFactory,
|
||||||
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder
|
||||||
|
);
|
||||||
try {
|
try {
|
||||||
$sendingQueueWorker->process();
|
$sendingQueueWorker->process();
|
||||||
self::fail('Execution limits function was not called.');
|
self::fail('Execution limits function was not called.');
|
||||||
@ -182,7 +195,14 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItEnforcesExecutionLimitsAfterSendingWhenQueueStatusIsNotSetToComplete() {
|
public function testItEnforcesExecutionLimitsAfterSendingWhenQueueStatusIsNotSetToComplete() {
|
||||||
$sendingQueueWorker = Stub::make(
|
$sendingQueueWorker = Stub::make(
|
||||||
new SendingQueueWorker($this->sendingErrorHandler, $this->statsNotificationsWorker, $this->loggerFactory, Stub::makeEmpty(NewslettersRepository::class), $this->cronHelper),
|
new SendingQueueWorker(
|
||||||
|
$this->sendingErrorHandler,
|
||||||
|
$this->statsNotificationsWorker,
|
||||||
|
$this->loggerFactory,
|
||||||
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder
|
||||||
|
),
|
||||||
[
|
[
|
||||||
'enforceSendingAndExecutionLimits' => Expected::exactly(1),
|
'enforceSendingAndExecutionLimits' => Expected::exactly(1),
|
||||||
], $this);
|
], $this);
|
||||||
@ -192,6 +212,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class),
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::make(
|
Stub::make(
|
||||||
new MailerTask(),
|
new MailerTask(),
|
||||||
[
|
[
|
||||||
@ -220,7 +241,14 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$queue = $this->queue;
|
$queue = $this->queue;
|
||||||
$queue->status = SendingQueue::STATUS_COMPLETED;
|
$queue->status = SendingQueue::STATUS_COMPLETED;
|
||||||
$sendingQueueWorker = Stub::make(
|
$sendingQueueWorker = Stub::make(
|
||||||
new SendingQueueWorker($this->sendingErrorHandler, $this->statsNotificationsWorker, $this->loggerFactory, Stub::makeEmpty(NewslettersRepository::class), $this->cronHelper),
|
new SendingQueueWorker(
|
||||||
|
$this->sendingErrorHandler,
|
||||||
|
$this->statsNotificationsWorker,
|
||||||
|
$this->loggerFactory,
|
||||||
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder
|
||||||
|
),
|
||||||
[
|
[
|
||||||
'enforceSendingAndExecutionLimits' => Expected::never(),
|
'enforceSendingAndExecutionLimits' => Expected::never(),
|
||||||
], $this);
|
], $this);
|
||||||
@ -230,6 +258,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class),
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::make(
|
Stub::make(
|
||||||
new MailerTask(),
|
new MailerTask(),
|
||||||
[
|
[
|
||||||
@ -253,7 +282,14 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItEnforcesExecutionLimitsAfterQueueProcessing() {
|
public function testItEnforcesExecutionLimitsAfterQueueProcessing() {
|
||||||
$sendingQueueWorker = Stub::make(
|
$sendingQueueWorker = Stub::make(
|
||||||
new SendingQueueWorker($this->sendingErrorHandler, $this->statsNotificationsWorker, $this->loggerFactory, Stub::makeEmpty(NewslettersRepository::class), $this->cronHelper),
|
new SendingQueueWorker(
|
||||||
|
$this->sendingErrorHandler,
|
||||||
|
$this->statsNotificationsWorker,
|
||||||
|
$this->loggerFactory,
|
||||||
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder
|
||||||
|
),
|
||||||
[
|
[
|
||||||
'processQueue' => function() {
|
'processQueue' => function() {
|
||||||
// this function returns a queue object
|
// this function returns a queue object
|
||||||
@ -261,7 +297,14 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
},
|
},
|
||||||
'enforceSendingAndExecutionLimits' => Expected::exactly(2),
|
'enforceSendingAndExecutionLimits' => Expected::exactly(2),
|
||||||
], $this);
|
], $this);
|
||||||
$sendingQueueWorker->__construct($this->sendingErrorHandler, $this->statsNotificationsWorker, $this->loggerFactory, Stub::makeEmpty(NewslettersRepository::class), $this->cronHelper);
|
$sendingQueueWorker->__construct(
|
||||||
|
$this->sendingErrorHandler,
|
||||||
|
$this->statsNotificationsWorker,
|
||||||
|
$this->loggerFactory,
|
||||||
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder
|
||||||
|
);
|
||||||
$sendingQueueWorker->process();
|
$sendingQueueWorker->process();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,6 +331,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::make(
|
Stub::make(
|
||||||
new MailerTask(),
|
new MailerTask(),
|
||||||
[
|
[
|
||||||
@ -318,6 +362,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::make(
|
Stub::make(
|
||||||
new MailerTask(),
|
new MailerTask(),
|
||||||
[
|
[
|
||||||
@ -346,6 +391,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::make(
|
Stub::make(
|
||||||
new MailerTask(),
|
new MailerTask(),
|
||||||
[
|
[
|
||||||
@ -395,6 +441,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::make(
|
Stub::make(
|
||||||
new MailerTask(),
|
new MailerTask(),
|
||||||
[
|
[
|
||||||
@ -447,6 +494,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::make(
|
Stub::make(
|
||||||
new MailerTask(),
|
new MailerTask(),
|
||||||
[
|
[
|
||||||
@ -506,6 +554,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class),
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::makeEmpty(new MailerTask(), [], $this)
|
Stub::makeEmpty(new MailerTask(), [], $this)
|
||||||
);
|
);
|
||||||
$sendingQueueWorker->process();
|
$sendingQueueWorker->process();
|
||||||
@ -524,6 +573,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::make(
|
Stub::make(
|
||||||
new MailerTask(),
|
new MailerTask(),
|
||||||
[
|
[
|
||||||
@ -578,6 +628,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class),
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::make(
|
Stub::make(
|
||||||
new MailerTask(),
|
new MailerTask(),
|
||||||
[
|
[
|
||||||
@ -760,7 +811,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->statsNotificationsWorker,
|
$this->statsNotificationsWorker,
|
||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class),
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
$this->cronHelper
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder
|
||||||
));
|
));
|
||||||
$sendingQueueWorker->__construct(
|
$sendingQueueWorker->__construct(
|
||||||
$this->sendingErrorHandler,
|
$this->sendingErrorHandler,
|
||||||
@ -768,6 +820,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class),
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::make(
|
Stub::make(
|
||||||
new MailerTask(),
|
new MailerTask(),
|
||||||
[
|
[
|
||||||
@ -805,6 +858,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
Stub::make(
|
Stub::make(
|
||||||
new MailerTask(),
|
new MailerTask(),
|
||||||
[
|
[
|
||||||
@ -833,7 +887,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->statsNotificationsWorker,
|
$this->statsNotificationsWorker,
|
||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class),
|
Stub::makeEmpty(NewslettersRepository::class),
|
||||||
$this->cronHelper
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder
|
||||||
);
|
);
|
||||||
expect($sendingQueueWorker->batchSize)->equals($customBatchSizeValue);
|
expect($sendingQueueWorker->batchSize)->equals($customBatchSizeValue);
|
||||||
$wp->removeFilter('mailpoet_cron_worker_sending_queue_batch_size', $filter);
|
$wp->removeFilter('mailpoet_cron_worker_sending_queue_batch_size', $filter);
|
||||||
@ -852,6 +907,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
$this->make(new MailerTask(), [
|
$this->make(new MailerTask(), [
|
||||||
'send' => $this->mailerTaskDummyResponse,
|
'send' => $this->mailerTaskDummyResponse,
|
||||||
])
|
])
|
||||||
@ -877,6 +933,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->loggerFactory,
|
$this->loggerFactory,
|
||||||
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
|
||||||
$this->cronHelper,
|
$this->cronHelper,
|
||||||
|
$this->subscribersFinder,
|
||||||
$this->make(new MailerTask(), [
|
$this->make(new MailerTask(), [
|
||||||
'send' => $this->mailerTaskDummyResponse,
|
'send' => $this->mailerTaskDummyResponse,
|
||||||
])
|
])
|
||||||
|
@ -25,6 +25,9 @@ class SubscribersFinderTest extends \MailPoetTest {
|
|||||||
public $segment2;
|
public $segment2;
|
||||||
public $segment1;
|
public $segment1;
|
||||||
|
|
||||||
|
/** @var SubscribersFinder */
|
||||||
|
private $subscribersFinder;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
||||||
@ -63,12 +66,12 @@ class SubscribersFinderTest extends \MailPoetTest {
|
|||||||
SubscriberSegment::resubscribeToAllSegments($this->subscriber2);
|
SubscriberSegment::resubscribeToAllSegments($this->subscriber2);
|
||||||
SubscriberSegment::resubscribeToAllSegments($this->subscriber3);
|
SubscriberSegment::resubscribeToAllSegments($this->subscriber3);
|
||||||
$this->sending = SendingTask::create();
|
$this->sending = SendingTask::create();
|
||||||
|
$this->subscribersFinder = $this->diContainer->get(SubscribersFinder::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testFindSubscribersInSegmentInSegmentDefaultSegment() {
|
public function testFindSubscribersInSegmentInSegmentDefaultSegment() {
|
||||||
$finder = new SubscribersFinder();
|
|
||||||
$deletedSegmentId = 1000; // non-existent segment
|
$deletedSegmentId = 1000; // non-existent segment
|
||||||
$subscribers = $finder->findSubscribersInSegments([$this->subscriber2->id], [$this->segment1->id, $deletedSegmentId]);
|
$subscribers = $this->subscribersFinder->findSubscribersInSegments([$this->subscriber2->id], [$this->segment1->id, $deletedSegmentId]);
|
||||||
expect($subscribers)->count(1);
|
expect($subscribers)->count(1);
|
||||||
expect($subscribers[$this->subscriber2->id])->equals($this->subscriber2->id);
|
expect($subscribers[$this->subscriber2->id])->equals($this->subscriber2->id);
|
||||||
}
|
}
|
||||||
@ -101,8 +104,7 @@ class SubscribersFinderTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testItAddsSubscribersToTaskFromStaticSegments() {
|
public function testItAddsSubscribersToTaskFromStaticSegments() {
|
||||||
$finder = new SubscribersFinder();
|
$subscribersCount = $this->subscribersFinder->addSubscribersToTaskFromSegments(
|
||||||
$subscribersCount = $finder->addSubscribersToTaskFromSegments(
|
|
||||||
$this->sending->task(),
|
$this->sending->task(),
|
||||||
[
|
[
|
||||||
$this->getDummySegment($this->segment1->id, Segment::TYPE_DEFAULT),
|
$this->getDummySegment($this->segment1->id, Segment::TYPE_DEFAULT),
|
||||||
@ -114,8 +116,7 @@ class SubscribersFinderTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testItDoesNotAddSubscribersToTaskFromNoSegment() {
|
public function testItDoesNotAddSubscribersToTaskFromNoSegment() {
|
||||||
$finder = new SubscribersFinder();
|
$subscribersCount = $this->subscribersFinder->addSubscribersToTaskFromSegments(
|
||||||
$subscribersCount = $finder->addSubscribersToTaskFromSegments(
|
|
||||||
$this->sending->task(),
|
$this->sending->task(),
|
||||||
[
|
[
|
||||||
$this->getDummySegment($this->segment1->id, 'UNKNOWN SEGMENT'),
|
$this->getDummySegment($this->segment1->id, 'UNKNOWN SEGMENT'),
|
||||||
|
Reference in New Issue
Block a user