Add test
This commit is contained in:
committed by
M. Shull
parent
d980f9e3f4
commit
ac54e198bf
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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 */
|
||||||
|
@ -266,6 +266,7 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
'createInactiveSubscribersWorker' => $worker,
|
'createInactiveSubscribersWorker' => $worker,
|
||||||
'createAuthorizedSendingEmailsCheckWorker' => $worker,
|
'createAuthorizedSendingEmailsCheckWorker' => $worker,
|
||||||
'createWooCommerceOrdersWorker' => $worker,
|
'createWooCommerceOrdersWorker' => $worker,
|
||||||
|
'createBeamerkWorker' => $worker,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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(),
|
||||||
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
26
tests/integration/Cron/Workers/BeamerTest.php
Normal file
26
tests/integration/Cron/Workers/BeamerTest.php
Normal 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());
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user