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() {
if (!$this->settings->get('last_announcement_date')) {
$beamer = new Beamer($this->settings);
$beamer = new Beamer($this->settings, WPFunctions::get());
$beamer->setLastAnnouncementDate();
}
}

View File

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

View File

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

View File

@ -46,6 +46,8 @@ class DaemonTest extends \MailPoetTest {
'createInactiveSubscribersWorker' => $this->createSimpleWorkerMock(),
'createAuthorizedSendingEmailsCheckWorker' => $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\Cron\Workers\SendingQueue\Migration as MigrationWorker;
use MailPoet\Cron\Workers\Bounce as BounceWorker;
use MailPoet\Cron\Workers\Beamer;
class WordPressTest extends \MailPoetTest {
@ -30,6 +31,7 @@ class WordPressTest extends \MailPoetTest {
$this->settings->set('cron_trigger', [
'method' => 'none',
]);
$this->_addScheduledTask(Beamer::TASK_TYPE, ScheduledTask::STATUS_SCHEDULED, Carbon::createFromTimestamp(current_time('timestamp') + 600));
}
function testItRequiresScheduledQueuesToExecute() {
@ -85,6 +87,12 @@ class WordPressTest extends \MailPoetTest {
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() {
$this->_enableMigration();
$this->_addScheduledTask(MigrationWorker::TASK_TYPE, $status = ScheduledTask::STATUS_COMPLETED);
@ -162,15 +170,16 @@ class WordPressTest extends \MailPoetTest {
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->hydrate(
[
'type' => $type,
'status' => $status,
'scheduled_at' => ($status === ScheduledTask::STATUS_SCHEDULED) ?
Carbon::createFromTimestamp(current_time('timestamp')) :
null,
'scheduled_at' => $scheduled_at,
]
);
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());
}
}