From 03e2ef5a831ece012cda626177f9022846649f8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jakes=CC=8C?= Date: Tue, 7 Apr 2020 16:30:39 +0200 Subject: [PATCH] When pending approval check MSS key state every hour [MAILPOET-2806] --- .../KeyCheck/SendingServiceKeyCheck.php | 17 ++++++++++++- .../KeyCheck/SendingServiceKeyCheckTest.php | 25 ++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/lib/Cron/Workers/KeyCheck/SendingServiceKeyCheck.php b/lib/Cron/Workers/KeyCheck/SendingServiceKeyCheck.php index 37870bc163..4040025a65 100644 --- a/lib/Cron/Workers/KeyCheck/SendingServiceKeyCheck.php +++ b/lib/Cron/Workers/KeyCheck/SendingServiceKeyCheck.php @@ -2,9 +2,11 @@ namespace MailPoet\Cron\Workers\KeyCheck; +use MailPoet\Config\ServicesChecker; use MailPoet\Mailer\Mailer; use MailPoet\Services\Bridge; use MailPoet\Settings\SettingsController; +use MailPoetVendor\Carbon\Carbon; class SendingServiceKeyCheck extends KeyCheckWorker { const TASK_TYPE = 'sending_service_key_check'; @@ -12,8 +14,12 @@ class SendingServiceKeyCheck extends KeyCheckWorker { /** @var SettingsController */ private $settings; - public function __construct(SettingsController $settings) { + /** @var ServicesChecker */ + private $servicesChecker; + + public function __construct(SettingsController $settings, ServicesChecker $servicesChecker) { $this->settings = $settings; + $this->servicesChecker = $servicesChecker; parent::__construct(); } @@ -21,6 +27,15 @@ class SendingServiceKeyCheck extends KeyCheckWorker { return Bridge::isMPSendingServiceEnabled(); } + public function getNextRunDate() { + // when key pending approval, check key sate every hour + if ($this->servicesChecker->isMailPoetAPIKeyPendingApproval()) { + $date = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + return $date->addHour(); + } + return parent::getNextRunDate(); + } + public function checkKey() { $mssKey = $this->settings->get(Mailer::MAILER_CONFIG_SETTING_NAME)['mailpoet_api_key']; $result = $this->bridge->checkMSSKey($mssKey); diff --git a/tests/integration/Cron/Workers/KeyCheck/SendingServiceKeyCheckTest.php b/tests/integration/Cron/Workers/KeyCheck/SendingServiceKeyCheckTest.php index 83fbc14b13..ff7247605f 100644 --- a/tests/integration/Cron/Workers/KeyCheck/SendingServiceKeyCheckTest.php +++ b/tests/integration/Cron/Workers/KeyCheck/SendingServiceKeyCheckTest.php @@ -4,11 +4,13 @@ namespace MailPoet\Test\Cron\Workers\KeyCheck; use Codeception\Stub; use Codeception\Stub\Expected; +use MailPoet\Config\ServicesChecker; use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck; use MailPoet\Mailer\Mailer; use MailPoet\Services\Bridge; use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsRepository; +use MailPoetVendor\Carbon\Carbon; use PHPUnit\Framework\MockObject\MockObject; class SendingServiceKeyCheckTest extends \MailPoetTest { @@ -18,7 +20,10 @@ class SendingServiceKeyCheckTest extends \MailPoetTest { public function _before() { parent::_before(); $this->mssKey = 'some_key'; - $this->worker = new SendingServiceKeyCheck($this->diContainer->get(SettingsController::class)); + $this->worker = new SendingServiceKeyCheck( + $this->diContainer->get(SettingsController::class), + $this->diContainer->get(ServicesChecker::class) + ); } public function testItRequiresMailPoetMethodToBeSetUp() { @@ -27,6 +32,24 @@ class SendingServiceKeyCheckTest extends \MailPoetTest { expect($this->worker->checkProcessingRequirements())->true(); } + public function testItRunsEveryHourWhenKeyPendingApproval() { + // normally next run is scheduled at a start of next day + expect($this->worker->getNextRunDate())->equals(Carbon::now()->startOfDay()->addDay()); + + // when pending key approval, next run is scheduled in an hour + $settings = $this->diContainer->get(SettingsController::class); + $settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]); + $settings->set(Bridge::API_KEY_SETTING_NAME, 'key'); + $settings->set(Bridge::API_KEY_STATE_SETTING_NAME, [ + 'state' => Bridge::KEY_VALID, + 'data' => ['is_approved' => false], + ]); + + $nextRunDate = $this->worker->getNextRunDate(); + expect($nextRunDate)->greaterThan(Carbon::now()->addMinutes(55)); + expect($nextRunDate)->lessThan(Carbon::now()->addMinutes(65)); + } + public function testItChecksMSSKey() { $response = ['code' => Bridge::KEY_VALID]; /** @var MockObject $bridge */