Refactor newly added cron workers to use new settings

[MAILPOET-1757]
This commit is contained in:
Rostislav Wolny
2019-01-30 14:18:13 +01:00
parent 5f9aa306c4
commit a12d0ff4bc
6 changed files with 42 additions and 17 deletions

View File

@ -7,6 +7,7 @@ use MailPoet\Models\Newsletter;
use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Models\StatsNotification; use MailPoet\Models\StatsNotification;
use MailPoet\Settings\SettingsController;
class Scheduler { class Scheduler {
@ -16,6 +17,13 @@ class Scheduler {
*/ */
const HOURS_TO_SEND_AFTER_NEWSLETTER = 24; const HOURS_TO_SEND_AFTER_NEWSLETTER = 24;
/** @var SettingsController */
private $settings;
function __construct(SettingsController $settings) {
$this->settings = $settings;
}
function schedule(Newsletter $newsletter) { function schedule(Newsletter $newsletter) {
if(!$this->shouldSchedule($newsletter)) { if(!$this->shouldSchedule($newsletter)) {
return false; return false;
@ -47,7 +55,7 @@ class Scheduler {
} }
private function isDisabled() { private function isDisabled() {
$settings = Setting::getValue(Worker::SETTINGS_KEY); $settings = $this->settings->get(Worker::SETTINGS_KEY);
if(!is_array($settings)) { if(!is_array($settings)) {
return true; return true;
} }
@ -60,7 +68,7 @@ class Scheduler {
if(empty(trim($settings['address']))) { if(empty(trim($settings['address']))) {
return true; return true;
} }
if(!(bool)Setting::getValue('tracking.enabled')) { if(!(bool)$this->settings->get('tracking.enabled')) {
return true; return true;
} }
return !(bool)$settings['enabled']; return !(bool)$settings['enabled'];

View File

@ -10,6 +10,7 @@ use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterLink; use MailPoet\Models\NewsletterLink;
use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Settings\SettingsController;
use MailPoet\Tasks\Sending; use MailPoet\Tasks\Sending;
class Worker { class Worker {
@ -28,15 +29,19 @@ class Worker {
/** @var \MailPoet\Mailer\Mailer */ /** @var \MailPoet\Mailer\Mailer */
private $mailer; private $mailer;
function __construct(Mailer $mailer, Renderer $renderer, $timer = false) { /** @var SettingsController */
private $settings;
function __construct(Mailer $mailer, Renderer $renderer, SettingsController $settings, $timer = false) {
$this->timer = $timer ?: microtime(true); $this->timer = $timer ?: microtime(true);
$this->renderer = $renderer; $this->renderer = $renderer;
$this->mailer = $mailer; $this->mailer = $mailer;
$this->settings = $settings;
} }
/** @throws \Exception */ /** @throws \Exception */
function process() { function process() {
$settings = Setting::getValue(self::SETTINGS_KEY); $settings = $this->settings->get(self::SETTINGS_KEY);
$this->mailer->sender = $this->mailer->getSenderNameAndAddress($this->constructSenderEmail()); $this->mailer->sender = $this->mailer->getSenderNameAndAddress($this->constructSenderEmail());
foreach(self::getDueTasks() as $task) { foreach(self::getDueTasks() as $task) {
try { try {

View File

@ -59,7 +59,7 @@ class WorkersFactory {
} }
function createStatsNotificationsWorker($timer) { function createStatsNotificationsWorker($timer) {
return new StatsNotificationsWorker($this->mailer, $this->renderer, $timer); return new StatsNotificationsWorker($this->mailer, $this->renderer, $this->settings, $timer);
} }
/** @return SendingServiceKeyCheckWorker */ /** @return SendingServiceKeyCheckWorker */

View File

@ -83,9 +83,9 @@ class SendingQueueTest extends \MailPoetTest {
$this->newsletter_link->hash = 'abcde'; $this->newsletter_link->hash = 'abcde';
$this->newsletter_link->save(); $this->newsletter_link->save();
$this->sending_error_handler = new SendingErrorHandler(); $this->sending_error_handler = new SendingErrorHandler();
$this->stats_notifications_worker = new StatsNotificationsScheduler();
$this->sending_queue_worker = new SendingQueueWorker($this->sending_error_handler, $this->stats_notifications_worker);
$this->settings = new SettingsController(); $this->settings = new SettingsController();
$this->stats_notifications_worker = new StatsNotificationsScheduler($this->settings);
$this->sending_queue_worker = new SendingQueueWorker($this->sending_error_handler, $this->stats_notifications_worker);
} }
private function getDirectUnsubscribeURL() { private function getDirectUnsubscribeURL() {

View File

@ -6,19 +6,25 @@ use MailPoet\Models\Newsletter;
use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Models\StatsNotification; use MailPoet\Models\StatsNotification;
use MailPoet\Settings\SettingsController;
class SchedulerTest extends \MailPoetTest { class SchedulerTest extends \MailPoetTest {
/** @var Scheduler */ /** @var Scheduler */
private $stats_notifications; private $stats_notifications;
/** @var SettingsController */
private $settings;
function _before() { function _before() {
$this->stats_notifications = new Scheduler(); parent::_before();
Setting::setValue(Worker::SETTINGS_KEY, [ $this->settings = new SettingsController();
$this->stats_notifications = new Scheduler($this->settings);
$this->settings->set(Worker::SETTINGS_KEY, [
'enabled' => true, 'enabled' => true,
'address' => 'email@example.com' 'address' => 'email@example.com'
]); ]);
Setting::setValue('tracking.enabled', true); $this->settings->set('tracking.enabled', true);
} }
function testShouldSchedule() { function testShouldSchedule() {
@ -32,7 +38,7 @@ class SchedulerTest extends \MailPoetTest {
} }
function testShouldNotScheduleIfTrackingIsDisabled() { function testShouldNotScheduleIfTrackingIsDisabled() {
Setting::setValue('tracking.enabled', false); $this->settings->set('tracking.enabled', false);
$newsletter_id = 13; $newsletter_id = 13;
$newsletter = Newsletter::createOrUpdate(['id' => $newsletter_id, 'type' => Newsletter::TYPE_STANDARD]); $newsletter = Newsletter::createOrUpdate(['id' => $newsletter_id, 'type' => Newsletter::TYPE_STANDARD]);
$this->stats_notifications->schedule($newsletter); $this->stats_notifications->schedule($newsletter);
@ -42,7 +48,7 @@ class SchedulerTest extends \MailPoetTest {
function testShouldNotScheduleIfDisabled() { function testShouldNotScheduleIfDisabled() {
$newsletter_id = 6; $newsletter_id = 6;
Setting::setValue(Worker::SETTINGS_KEY, [ $this->settings->set(Worker::SETTINGS_KEY, [
'enabled' => false, 'enabled' => false,
'address' => 'email@example.com' 'address' => 'email@example.com'
]); ]);
@ -54,7 +60,7 @@ class SchedulerTest extends \MailPoetTest {
function testShouldNotScheduleIfSettingsMissing() { function testShouldNotScheduleIfSettingsMissing() {
$newsletter_id = 7; $newsletter_id = 7;
Setting::setValue(Worker::SETTINGS_KEY, []); $this->settings->set(Worker::SETTINGS_KEY, []);
$newsletter = Newsletter::createOrUpdate(['id' => $newsletter_id, 'type' => Newsletter::TYPE_STANDARD]); $newsletter = Newsletter::createOrUpdate(['id' => $newsletter_id, 'type' => Newsletter::TYPE_STANDARD]);
$this->stats_notifications->schedule($newsletter); $this->stats_notifications->schedule($newsletter);
$notification = StatsNotification::where('newsletter_id', $newsletter_id)->findOne(); $notification = StatsNotification::where('newsletter_id', $newsletter_id)->findOne();
@ -63,7 +69,7 @@ class SchedulerTest extends \MailPoetTest {
function testShouldNotScheduleIfEmailIsMissing() { function testShouldNotScheduleIfEmailIsMissing() {
$newsletter_id = 8; $newsletter_id = 8;
Setting::setValue(Worker::SETTINGS_KEY, [ $this->settings->set(Worker::SETTINGS_KEY, [
'enabled' => true, 'enabled' => true,
]); ]);
$newsletter = Newsletter::createOrUpdate(['id' => $newsletter_id, 'type' => Newsletter::TYPE_STANDARD]); $newsletter = Newsletter::createOrUpdate(['id' => $newsletter_id, 'type' => Newsletter::TYPE_STANDARD]);
@ -74,7 +80,7 @@ class SchedulerTest extends \MailPoetTest {
function testShouldNotScheduleIfEmailIsEmpty() { function testShouldNotScheduleIfEmailIsEmpty() {
$newsletter_id = 9; $newsletter_id = 9;
Setting::setValue(Worker::SETTINGS_KEY, [ $this->settings->set(Worker::SETTINGS_KEY, [
'enabled' => true, 'enabled' => true,
'address' => ' ' 'address' => ' '
]); ]);

View File

@ -13,6 +13,7 @@ use MailPoet\Models\StatisticsClicks;
use MailPoet\Models\StatisticsOpens; use MailPoet\Models\StatisticsOpens;
use MailPoet\Models\StatisticsUnsubscribes; use MailPoet\Models\StatisticsUnsubscribes;
use MailPoet\Models\StatsNotification; use MailPoet\Models\StatsNotification;
use MailPoet\Settings\SettingsController;
use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\MockObject\MockObject;
class WorkerTest extends \MailPoetTest { class WorkerTest extends \MailPoetTest {
@ -26,15 +27,20 @@ class WorkerTest extends \MailPoetTest {
/** @var MockObject */ /** @var MockObject */
private $renderer; private $renderer;
/** @var SettingsController */
private $settings;
function _before() { function _before() {
parent::_before();
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table); \ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table); \ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table); \ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
\ORM::raw_execute('TRUNCATE ' . StatsNotification::$_table); \ORM::raw_execute('TRUNCATE ' . StatsNotification::$_table);
$this->mailer = $this->createMock(Mailer::class); $this->mailer = $this->createMock(Mailer::class);
$this->renderer = $this->createMock(Renderer::class); $this->renderer = $this->createMock(Renderer::class);
$this->stats_notifications = new Worker($this->mailer, $this->renderer); $this->settings = new SettingsController();
Setting::setValue(Worker::SETTINGS_KEY, [ $this->stats_notifications = new Worker($this->mailer, $this->renderer, $this->settings);
$this->settings->set(Worker::SETTINGS_KEY, [
'enabled' => true, 'enabled' => true,
'address' => 'email@example.com' 'address' => 'email@example.com'
]); ]);