This commit is contained in:
Amine Ben hammou
2019-06-24 15:00:25 +01:00
committed by M. Shull
parent d980f9e3f4
commit ac54e198bf
7 changed files with 54 additions and 12 deletions

View File

@ -553,7 +553,7 @@ class Populator {
private function initLastAnnouncementDate() { private function initLastAnnouncementDate() {
if (!$this->settings->get('last_announcement_date')) { if (!$this->settings->get('last_announcement_date')) {
$beamer = new Beamer($this->settings); $beamer = new Beamer($this->settings, WPFunctions::get());
$beamer->setLastAnnouncementDate(); $beamer->setLastAnnouncementDate();
} }
} }

View File

@ -6,20 +6,24 @@ use MailPoet\Models\ScheduledTask;
use MailPoet\Cron\Workers\SimpleWorker; use MailPoet\Cron\Workers\SimpleWorker;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use function GuzzleHttp\json_decode;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
class Beamer extends SimpleWorker { class Beamer extends SimpleWorker {
const TASK_TYPE = 'beamer'; const TASK_TYPE = 'beamer';
const API_URL = 'https://api.getbeamer.com/v0';
const API_KEY = 'b_neUUX8kIYVEYZqQzSnwhmVggVLA6lT+GzDQOW7hrP38='; const API_KEY = 'b_neUUX8kIYVEYZqQzSnwhmVggVLA6lT+GzDQOW7hrP38=';
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
function __construct(SettingsController $settings, $timer = false) { /** @var WPFunctions */
private $wp;
function __construct(SettingsController $settings, WPFunctions $wp, $timer = false) {
parent::__construct($timer); parent::__construct($timer);
$this->settings = $settings; $this->settings = $settings;
$this->wp = $wp;
} }
function processTaskStrategy(ScheduledTask $task) { function processTaskStrategy(ScheduledTask $task) {
@ -27,13 +31,12 @@ class Beamer extends SimpleWorker {
} }
function setLastAnnouncementDate() { function setLastAnnouncementDate() {
$wp = new WPFunctions(); $response = $this->wp->wpRemoteGet(self::API_URL . '/posts?published=true&maxResults=1', [
$response = $wp->wpRemoteGet('https://api.getbeamer.com/v0/posts?published=true&maxResults=1', [
'headers' => [ 'headers' => [
'Beamer-Api-Key' => self::API_KEY, 'Beamer-Api-Key' => self::API_KEY,
], ],
]); ]);
$posts = $wp->wpRemoteRetrieveBody($response); $posts = $this->wp->wpRemoteRetrieveBody($response);
if (empty($posts)) return false; if (empty($posts)) return false;
$posts = json_decode($posts); $posts = json_decode($posts);
$this->settings->set('last_announcement_date', Carbon::createFromTimeString($posts[0]->date)->getTimestamp()); $this->settings->set('last_announcement_date', Carbon::createFromTimeString($posts[0]->date)->getTimestamp());
@ -41,7 +44,7 @@ class Beamer extends SimpleWorker {
} }
static function getNextRunDate() { static function getNextRunDate() {
$wp = new WPFunctions(); $wp = new WPFunctions;
$date = Carbon::createFromTimestamp($wp->currentTime('timestamp')); $date = Carbon::createFromTimestamp($wp->currentTime('timestamp'));
return $date->hour(11)->minute(00)->second(00)->addDay(); return $date->hour(11)->minute(00)->second(00)->addDay();
} }

View File

@ -22,6 +22,7 @@ use MailPoet\WooCommerce\Helper as WooCommerceHelper;
use MailPoet\Mailer\Mailer; use MailPoet\Mailer\Mailer;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\InactiveSubscribersController; use MailPoet\Subscribers\InactiveSubscribersController;
use MailPoet\WP\Functions as WPFunctions;
class WorkersFactory { class WorkersFactory {
@ -137,7 +138,7 @@ class WorkersFactory {
/** @return Beamer */ /** @return Beamer */
function createBeamerkWorker($timer) { function createBeamerkWorker($timer) {
return new Beamer($this->settings, $timer); return new Beamer($this->settings, WPFunctions::get(), $timer);
} }
/** @return InactiveSubscribers */ /** @return InactiveSubscribers */

View File

@ -266,6 +266,7 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
'createInactiveSubscribersWorker' => $worker, 'createInactiveSubscribersWorker' => $worker,
'createAuthorizedSendingEmailsCheckWorker' => $worker, 'createAuthorizedSendingEmailsCheckWorker' => $worker,
'createWooCommerceOrdersWorker' => $worker, 'createWooCommerceOrdersWorker' => $worker,
'createBeamerkWorker' => $worker,
]); ]);
} }
} }

View File

@ -46,6 +46,8 @@ class DaemonTest extends \MailPoetTest {
'createInactiveSubscribersWorker' => $this->createSimpleWorkerMock(), 'createInactiveSubscribersWorker' => $this->createSimpleWorkerMock(),
'createAuthorizedSendingEmailsCheckWorker' => $this->createSimpleWorkerMock(), 'createAuthorizedSendingEmailsCheckWorker' => $this->createSimpleWorkerMock(),
'createWooCommerceOrdersWorker' => $this->createSimpleWorkerMock(), 'createWooCommerceOrdersWorker' => $this->createSimpleWorkerMock(),
'createBeamerkWorker' => $this->createSimpleWorkerMock(),
]); ]);
} }

View File

@ -14,6 +14,7 @@ use MailPoet\Settings\SettingsController;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\Cron\Workers\SendingQueue\Migration as MigrationWorker; use MailPoet\Cron\Workers\SendingQueue\Migration as MigrationWorker;
use MailPoet\Cron\Workers\Bounce as BounceWorker; use MailPoet\Cron\Workers\Bounce as BounceWorker;
use MailPoet\Cron\Workers\Beamer;
class WordPressTest extends \MailPoetTest { class WordPressTest extends \MailPoetTest {
@ -30,6 +31,7 @@ class WordPressTest extends \MailPoetTest {
$this->settings->set('cron_trigger', [ $this->settings->set('cron_trigger', [
'method' => 'none', 'method' => 'none',
]); ]);
$this->_addScheduledTask(Beamer::TASK_TYPE, ScheduledTask::STATUS_SCHEDULED, Carbon::createFromTimestamp(current_time('timestamp') + 600));
} }
function testItRequiresScheduledQueuesToExecute() { function testItRequiresScheduledQueuesToExecute() {
@ -85,6 +87,12 @@ class WordPressTest extends \MailPoetTest {
expect(WordPress::checkExecutionRequirements())->true(); expect(WordPress::checkExecutionRequirements())->true();
} }
function testItExecutesWhenBeamerTaskIsDue() {
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
$this->_addScheduledTask(Beamer::TASK_TYPE, $status = ScheduledTask::STATUS_SCHEDULED);
expect(WordPress::checkExecutionRequirements())->true();
}
function testItDoesNotExecuteWhenMigrationIsCompleted() { function testItDoesNotExecuteWhenMigrationIsCompleted() {
$this->_enableMigration(); $this->_enableMigration();
$this->_addScheduledTask(MigrationWorker::TASK_TYPE, $status = ScheduledTask::STATUS_COMPLETED); $this->_addScheduledTask(MigrationWorker::TASK_TYPE, $status = ScheduledTask::STATUS_COMPLETED);
@ -162,15 +170,16 @@ class WordPressTest extends \MailPoetTest {
return $queue->save(); return $queue->save();
} }
function _addScheduledTask($type, $status) { function _addScheduledTask($type, $status, $scheduled_at = null) {
if (!$scheduled_at && $status === ScheduledTask::STATUS_SCHEDULED) {
$scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
}
$task = ScheduledTask::create(); $task = ScheduledTask::create();
$task->hydrate( $task->hydrate(
[ [
'type' => $type, 'type' => $type,
'status' => $status, 'status' => $status,
'scheduled_at' => ($status === ScheduledTask::STATUS_SCHEDULED) ? 'scheduled_at' => $scheduled_at,
Carbon::createFromTimestamp(current_time('timestamp')) :
null,
] ]
); );
return $task->save(); return $task->save();

View File

@ -0,0 +1,26 @@
<?php
namespace MailPoet\Test\Cron\Workers;
use Carbon\Carbon;
use Codeception\Stub;
use MailPoet\Cron\Workers\Beamer;
use MailPoet\Settings\SettingsController;
use MailPoet\WP\Functions as WPFunctions;
class BeamerTest extends \MailPoetTest {
function testItSetsLastAnnouncementDate() {
$oldDate = '2019-05-18T10:25:00.000Z';
$newDate = '2019-05-22T10:25:00.000Z';
$settings = new SettingsController;
$settings->set('last_announcement_date', Carbon::createFromTimeString($oldDate)->getTimestamp());
$wp = Stub::make(new WPFunctions, [
'wpRemoteGet' => null,
'wpRemoteRetrieveBody' => json_encode([
['date' => $newDate],
]),
]);
$beamer = new Beamer($settings, $wp);
$beamer->setLastAnnouncementDate();
expect($settings->get('last_announcement_date'))->equals( Carbon::createFromTimeString($newDate)->getTimestamp());
}
}