diff --git a/lib/Config/Initializer.php b/lib/Config/Initializer.php index 0e541c383d..1e76ea450b 100644 --- a/lib/Config/Initializer.php +++ b/lib/Config/Initializer.php @@ -52,6 +52,9 @@ class Initializer { /** @var Menu */ private $menu; + /** @var CronTrigger */ + private $cron_trigger; + const INITIALIZED = 'MAILPOET_INITIALIZED'; function __construct( @@ -64,7 +67,8 @@ class Initializer { Router\Router $router, Hooks $hooks, Changelog $changelog, - Menu $menu + Menu $menu, + CronTrigger $cron_trigger ) { $this->container = $container; $this->renderer_factory = $renderer_factory; @@ -76,6 +80,7 @@ class Initializer { $this->hooks = $hooks; $this->changelog = $changelog; $this->menu = $menu; + $this->cron_trigger = $cron_trigger; } function init() { @@ -253,8 +258,7 @@ class Initializer { function setupCronTrigger() { // setup cron trigger only outside of cli environment if (php_sapi_name() !== 'cli') { - $cron_trigger = $this->container->get(CronTrigger::class); - $cron_trigger->init(); + $this->cron_trigger->init(); } } diff --git a/lib/Cron/CronTrigger.php b/lib/Cron/CronTrigger.php index e625fb068f..85497febde 100644 --- a/lib/Cron/CronTrigger.php +++ b/lib/Cron/CronTrigger.php @@ -6,7 +6,9 @@ use MailPoet\Settings\SettingsController; if (!defined('ABSPATH')) exit; class CronTrigger { - public $current_method; + /** @var SettingsController */ + private $settings; + public static $available_methods = array( 'mailpoet' => 'MailPoet', 'wordpress' => 'WordPress', @@ -16,13 +18,14 @@ class CronTrigger { const DEFAULT_METHOD = 'WordPress'; const SETTING_NAME = 'cron_trigger'; - function __construct(SettingsController $settingsController) { - $this->current_method = $settingsController->get(self::SETTING_NAME . '.method'); + function __construct(SettingsController $settings) { + $this->settings = $settings; } function init() { + $current_method = $this->settings->get(self::SETTING_NAME . '.method'); try { - $trigger_class = __NAMESPACE__ . '\Triggers\\' . $this->current_method; + $trigger_class = __NAMESPACE__ . '\Triggers\\' . $current_method; return (class_exists($trigger_class)) ? $trigger_class::run() : false; diff --git a/tests/integration/Cron/CronTriggerTest.php b/tests/integration/Cron/CronTriggerTest.php index 40d5a8438f..8cde29b469 100644 --- a/tests/integration/Cron/CronTriggerTest.php +++ b/tests/integration/Cron/CronTriggerTest.php @@ -1,6 +1,7 @@ cron_trigger->current_method) - ->equals(CronTrigger::DEFAULT_METHOD); - } - function testItCanReturnAvailableMethods() { expect($this->cron_trigger->getAvailableMethods()) ->equals(CronTrigger::$available_methods); } function testItCanInitializeCronTriggerMethod() { - $cron_trigger = $this->cron_trigger; - $cron_trigger->current_method = 'CronTriggerMockMethod'; + $settings_mock = Stub::makeEmpty( + SettingsController::class, + ['get' => 'CronTriggerMockMethod'] + ); + $cron_trigger = new CronTrigger($settings_mock); expect($cron_trigger->init())->true(); } function testItReturnsFalseWhenItCantInitializeCronTriggerMethod() { - $cron_trigger = $this->cron_trigger; - $cron_trigger->current_method = 'MockInvalidMethod'; + $settings_mock = Stub::makeEmpty( + SettingsController::class, + ['get' => 'MockInvalidMethod'] + ); + $cron_trigger = new CronTrigger($settings_mock); expect($cron_trigger->init())->false(); } function testItIgnoresExceptionsThrownFromCronTriggerMethods() { - $cron_trigger = $this->cron_trigger; - $cron_trigger->current_method = 'CronTriggerMockMethodWithException'; + $settings_mock = Stub::makeEmpty( + SettingsController::class, + ['get' => 'CronTriggerMockMethodWithException'] + ); + $cron_trigger = new CronTrigger($settings_mock); expect($cron_trigger->init())->null(); }