Add cron pinging endpoint
[MAILPOET-6029]
This commit is contained in:
@@ -8,6 +8,7 @@ use MailPoet\API\JSON\Response;
|
||||
use MailPoet\API\JSON\ResponseBuilders\SendingQueuesResponseBuilder;
|
||||
use MailPoet\Config\AccessControl;
|
||||
use MailPoet\Cron\ActionScheduler\Actions\DaemonTrigger;
|
||||
use MailPoet\Cron\CronHelper;
|
||||
use MailPoet\Cron\CronTrigger;
|
||||
use MailPoet\Cron\Triggers\WordPress;
|
||||
use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueWorker;
|
||||
@@ -59,6 +60,9 @@ class SendingQueue extends APIEndpoint {
|
||||
/** @var SendingQueuesResponseBuilder */
|
||||
private $sendingQueuesResponseBuilder;
|
||||
|
||||
/** @var CronHelper */
|
||||
private $cronHelper;
|
||||
|
||||
public function __construct(
|
||||
SubscribersFeature $subscribersFeature,
|
||||
NewslettersRepository $newsletterRepository,
|
||||
@@ -69,7 +73,8 @@ class SendingQueue extends APIEndpoint {
|
||||
SettingsController $settings,
|
||||
DaemonTrigger $actionSchedulerDaemonTriggerAction,
|
||||
NewsletterValidator $newsletterValidator,
|
||||
SendingQueuesResponseBuilder $sendingQueuesResponseBuilder
|
||||
SendingQueuesResponseBuilder $sendingQueuesResponseBuilder,
|
||||
CronHelper $cronHelper
|
||||
) {
|
||||
$this->subscribersFeature = $subscribersFeature;
|
||||
$this->subscribersFinder = $subscribersFinder;
|
||||
@@ -81,6 +86,7 @@ class SendingQueue extends APIEndpoint {
|
||||
$this->actionSchedulerDaemonTriggerAction = $actionSchedulerDaemonTriggerAction;
|
||||
$this->newsletterValidator = $newsletterValidator;
|
||||
$this->sendingQueuesResponseBuilder = $sendingQueuesResponseBuilder;
|
||||
$this->cronHelper = $cronHelper;
|
||||
}
|
||||
|
||||
public function add($data = []) {
|
||||
@@ -245,6 +251,22 @@ class SendingQueue extends APIEndpoint {
|
||||
}
|
||||
}
|
||||
|
||||
public function pingCron() {
|
||||
try {
|
||||
$cronPingResponse = $this->cronHelper->pingDaemon();
|
||||
} catch (\Exception $e) {
|
||||
return $this->errorResponse([
|
||||
APIError::UNKNOWN => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
if (!$this->cronHelper->validatePingResponse($cronPingResponse)) {
|
||||
return $this->errorResponse([
|
||||
APIError::UNKNOWN => $cronPingResponse,
|
||||
]);
|
||||
}
|
||||
return $this->successResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
* In case the newsletter was switched to sending trigger the background job immediately.
|
||||
* This is done so that user immediately sees that email is sending and doesn't have to wait on WP Cron to start it.
|
||||
|
@@ -5,6 +5,8 @@ namespace MailPoet\Test\API\JSON\v1;
|
||||
use Codeception\Util\Stub;
|
||||
use MailPoet\API\JSON\Response as APIResponse;
|
||||
use MailPoet\API\JSON\v1\SendingQueue as SendingQueueAPI;
|
||||
use MailPoet\Cron\CronHelper;
|
||||
use MailPoet\Cron\DaemonHttpRunner;
|
||||
use MailPoet\Cron\Workers\SendingQueue\SendingQueue;
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Entities\ScheduledTaskEntity;
|
||||
@@ -228,4 +230,41 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
|
||||
$this->assertSame($expectedResult, $data);
|
||||
}
|
||||
|
||||
public function testItReturnsErrorIfCronPingThrowsException() {
|
||||
$errorMessage = 'some error';
|
||||
$sendingQueue = $this->getServiceWithOverrides(SendingQueueAPI::class, [
|
||||
'cronHelper' => Stub::make(CronHelper::class, ['pingDaemon' => function () use ($errorMessage) {
|
||||
throw new \Exception($errorMessage);
|
||||
}]),
|
||||
]);
|
||||
$response = $sendingQueue->pingCron();
|
||||
$response = $response->getData();
|
||||
verify($response['errors'][0])->isArray();
|
||||
verify($response['errors'][0]['message'])->stringContainsString($errorMessage);
|
||||
verify($response['errors'][0]['error'])->stringContainsString('unknown');
|
||||
}
|
||||
|
||||
public function testItReturnsErrorIfCronPingResponseIsInvalid() {
|
||||
$errorResponse = 'timed out';
|
||||
$sendingQueue = $this->getServiceWithOverrides(SendingQueueAPI::class, [
|
||||
'cronHelper' => Stub::make(CronHelper::class, ['pingDaemon' => $errorResponse]),
|
||||
]);
|
||||
$response = $sendingQueue->pingCron();
|
||||
$response = $response->getData();
|
||||
verify($response['errors'][0])->isArray();
|
||||
verify($response['errors'][0]['message'])->stringContainsString($errorResponse);
|
||||
verify($response['errors'][0]['error'])->stringContainsString('unknown');
|
||||
}
|
||||
|
||||
public function testItPingsCronSuccessfully() {
|
||||
$sendingQueue = $this->getServiceWithOverrides(SendingQueueAPI::class, [
|
||||
'cronHelper' => Stub::make(CronHelper::class, ['pingDaemon' => DaemonHttpRunner::PING_SUCCESS_RESPONSE]),
|
||||
]);
|
||||
$response = $sendingQueue->pingCron();
|
||||
verify($response->status)->equals(200);
|
||||
$response = $response->getData();
|
||||
verify($response['data'])->empty();
|
||||
verify(empty($response['errors']))->true();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user