Move automatic emails API from Premium plugin
[MAILPOET-2382]
This commit is contained in:
committed by
Jack Kitterhing
parent
f0fa9bee2e
commit
d51ba11bf2
80
lib/API/JSON/v1/AutomaticEmails.php
Normal file
80
lib/API/JSON/v1/AutomaticEmails.php
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MailPoet\API\JSON\v1;
|
||||||
|
|
||||||
|
use MailPoet\API\JSON\Endpoint as APIEndpoint;
|
||||||
|
use MailPoet\API\JSON\Error as APIError;
|
||||||
|
use MailPoet\Config\AccessControl;
|
||||||
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
|
class AutomaticEmails extends APIEndpoint {
|
||||||
|
public $permissions = [
|
||||||
|
'global' => AccessControl::PERMISSION_MANAGE_SEGMENTS,
|
||||||
|
];
|
||||||
|
|
||||||
|
private $wp;
|
||||||
|
|
||||||
|
function __construct() {
|
||||||
|
$this->wp = new WPFunctions;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getEventOptions($data) {
|
||||||
|
$query = (!empty($data['query'])) ? $data['query'] : null;
|
||||||
|
$filter = (!empty($data['filter'])) ? $data['filter'] : null;
|
||||||
|
$email_slug = (!empty($data['email_slug'])) ? $data['email_slug'] : null;
|
||||||
|
$event_slug = (!empty($data['event_slug'])) ? $data['event_slug'] : null;
|
||||||
|
|
||||||
|
if (!$query || !$filter || !$email_slug || !$event_slug) {
|
||||||
|
return $this->errorResponse(
|
||||||
|
[
|
||||||
|
APIError::BAD_REQUEST => WPFunctions::get()->__('Improperly formatted request.', 'mailpoet'),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$automatic_emails = new \MailPoet\AutomaticEmails\AutomaticEmails();
|
||||||
|
$event = $automatic_emails->getAutomaticEmailEventBySlug($email_slug, $event_slug);
|
||||||
|
$event_filter = (!empty($event['options']['remoteQueryFilter'])) ? $event['options']['remoteQueryFilter'] : null;
|
||||||
|
|
||||||
|
return ($event_filter === $filter && WPFunctions::get()->hasFilter($event_filter)) ?
|
||||||
|
$this->successResponse($this->wp->applyFilters($event_filter, $query)) :
|
||||||
|
$this->errorResponse(
|
||||||
|
[
|
||||||
|
APIError::BAD_REQUEST => WPFunctions::get()->__('Automatic email event filter does not exist.', 'mailpoet'),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getEventShortcodes($data) {
|
||||||
|
$email_slug = (!empty($data['email_slug'])) ? $data['email_slug'] : null;
|
||||||
|
$event_slug = (!empty($data['event_slug'])) ? $data['event_slug'] : null;
|
||||||
|
|
||||||
|
if (!$email_slug || !$event_slug) {
|
||||||
|
return $this->errorResponse(
|
||||||
|
[
|
||||||
|
APIError::BAD_REQUEST => WPFunctions::get()->__('Improperly formatted request.', 'mailpoet'),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$automatic_emails = new \MailPoet\AutomaticEmails\AutomaticEmails();
|
||||||
|
$automatic_email = $automatic_emails->getAutomaticEmailBySlug($email_slug);
|
||||||
|
$event = $automatic_emails->getAutomaticEmailEventBySlug($email_slug, $event_slug);
|
||||||
|
|
||||||
|
if (!$event) {
|
||||||
|
return $this->errorResponse(
|
||||||
|
[
|
||||||
|
APIError::BAD_REQUEST => WPFunctions::get()->__('Automatic email event does not exist.', 'mailpoet'),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$event_shortcodes = (!empty($event['shortcodes']) && is_array($event['shortcodes'])) ?
|
||||||
|
[
|
||||||
|
$automatic_email['title'] => $event['shortcodes'],
|
||||||
|
] :
|
||||||
|
null;
|
||||||
|
|
||||||
|
return $this->successResponse($event_shortcodes);
|
||||||
|
}
|
||||||
|
}
|
@ -64,6 +64,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\API\MP\v1\API::class)->setPublic(true);
|
$container->autowire(\MailPoet\API\MP\v1\API::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\API\JSON\v1\Analytics::class)->setPublic(true);
|
$container->autowire(\MailPoet\API\JSON\v1\Analytics::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\API\JSON\v1\AutomatedLatestContent::class)->setPublic(true);
|
$container->autowire(\MailPoet\API\JSON\v1\AutomatedLatestContent::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\API\JSON\v1\AutomaticEmails::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\API\JSON\v1\CustomFields::class)->setPublic(true);
|
$container->autowire(\MailPoet\API\JSON\v1\CustomFields::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\API\JSON\v1\FeatureFlags::class)->setPublic(true);
|
$container->autowire(\MailPoet\API\JSON\v1\FeatureFlags::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\API\JSON\v1\Forms::class)->setPublic(true);
|
$container->autowire(\MailPoet\API\JSON\v1\Forms::class)->setPublic(true);
|
||||||
|
223
tests/integration/API/JSON/v1/AutomaticEmailsTest.php
Normal file
223
tests/integration/API/JSON/v1/AutomaticEmailsTest.php
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MailPoet\Test\API\JSON\v1;
|
||||||
|
|
||||||
|
use MailPoet\API\JSON\v1\AutomaticEmails;
|
||||||
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
|
class AutomaticEmailsTest extends \MailPoetTest {
|
||||||
|
function _before() {
|
||||||
|
$this->wp = new WPFunctions;
|
||||||
|
}
|
||||||
|
function testItRequiresProperlyFormattedRequestWhenGettingEventOptions() {
|
||||||
|
$API = new AutomaticEmails();
|
||||||
|
$expected_error_message = 'Improperly formatted request.';
|
||||||
|
|
||||||
|
// query is invalid
|
||||||
|
$data = [
|
||||||
|
'query' => null,
|
||||||
|
'filter' => 'filter',
|
||||||
|
'email_slug' => 'email_slug',
|
||||||
|
'event_slug' => 'event_slug',
|
||||||
|
];
|
||||||
|
$result = $API->getEventOptions($data);
|
||||||
|
expect($result->errors[0]['message'])->equals($expected_error_message);
|
||||||
|
|
||||||
|
// filter is invalid
|
||||||
|
$data = [
|
||||||
|
'query' => 'query',
|
||||||
|
'filter' => null,
|
||||||
|
'email_slug' => 'email_slug',
|
||||||
|
'event_slug' => 'event_slug',
|
||||||
|
];
|
||||||
|
$result = $API->getEventOptions($data);
|
||||||
|
expect($result->errors[0]['message'])->equals($expected_error_message);
|
||||||
|
|
||||||
|
// email slug is invalid
|
||||||
|
$data = [
|
||||||
|
'query' => 'query',
|
||||||
|
'filter' => 'filter',
|
||||||
|
'email_slug' => null,
|
||||||
|
'event_slug' => 'event_slug',
|
||||||
|
];
|
||||||
|
$result = $API->getEventOptions($data);
|
||||||
|
expect($result->errors[0]['message'])->equals($expected_error_message);
|
||||||
|
|
||||||
|
// event slug is invalid
|
||||||
|
$data = [
|
||||||
|
'query' => 'query',
|
||||||
|
'filter' => 'filter',
|
||||||
|
'email_slug' => 'email_slug',
|
||||||
|
'event_slug' => null,
|
||||||
|
];
|
||||||
|
$result = $API->getEventOptions($data);
|
||||||
|
expect($result->errors[0]['message'])->equals($expected_error_message);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItRequiresValidEventFilterWhenGettingEventOptions() {
|
||||||
|
$API = new AutomaticEmails();
|
||||||
|
$expected_error_message = 'Automatic email event filter does not exist.';
|
||||||
|
|
||||||
|
$this->wp->addFilter('mailpoet_automatic_email_test', function() {
|
||||||
|
return [
|
||||||
|
'slug' => 'email',
|
||||||
|
'title' => 'email_title',
|
||||||
|
'description' => 'email_description',
|
||||||
|
'events' => [
|
||||||
|
[
|
||||||
|
'slug' => 'event_slug',
|
||||||
|
'title' => 'event_title',
|
||||||
|
'description' => 'event_description',
|
||||||
|
'options' => [
|
||||||
|
'remoteQueryFilter' => 'test_filter',
|
||||||
|
],
|
||||||
|
'listingScheduleDisplayText' => 'sample_text',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
});
|
||||||
|
$this->wp->addFilter('test_filter', function($query) {
|
||||||
|
expect($query)->equals('test');
|
||||||
|
return 'pass';
|
||||||
|
});
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'query' => 'test',
|
||||||
|
'filter' => 'invalid_filter',
|
||||||
|
// should be 'test_filter'
|
||||||
|
'email_slug' => 'email',
|
||||||
|
'event_slug' => 'event_slug',
|
||||||
|
];
|
||||||
|
$result = $API->getEventOptions($data);
|
||||||
|
expect($result->errors[0]['message'])->equals($expected_error_message);
|
||||||
|
|
||||||
|
$this->wp->removeAllFilters('mailpoet_automatic_email_test');
|
||||||
|
$this->wp->removeAllFilters('test_filter');
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItGetsEventOptions() {
|
||||||
|
$API = new AutomaticEmails();
|
||||||
|
|
||||||
|
$this->wp->addFilter('mailpoet_automatic_email_test', function() {
|
||||||
|
return [
|
||||||
|
'slug' => 'email',
|
||||||
|
'title' => 'email_title',
|
||||||
|
'description' => 'email_description',
|
||||||
|
'events' => [
|
||||||
|
[
|
||||||
|
'slug' => 'event_slug',
|
||||||
|
'title' => 'event_title',
|
||||||
|
'description' => 'event_description',
|
||||||
|
'options' => [
|
||||||
|
'remoteQueryFilter' => 'test_filter',
|
||||||
|
],
|
||||||
|
'listingScheduleDisplayText' => 'sample_text',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
});
|
||||||
|
$this->wp->addFilter('test_filter', function($query) {
|
||||||
|
expect($query)->equals('test');
|
||||||
|
return 'pass';
|
||||||
|
});
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'query' => 'test',
|
||||||
|
'filter' => 'test_filter',
|
||||||
|
'email_slug' => 'email',
|
||||||
|
'event_slug' => 'event_slug',
|
||||||
|
];
|
||||||
|
$result = $API->getEventOptions($data);
|
||||||
|
expect($result->data)->equals('pass');
|
||||||
|
|
||||||
|
$this->wp->removeAllFilters('mailpoet_automatic_email_test');
|
||||||
|
$this->wp->removeAllFilters('test_filter');
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItRequiresProperlyFormattedRequestWhenGettingEventShortcodes() {
|
||||||
|
$API = new AutomaticEmails();
|
||||||
|
$expected_error_message = 'Improperly formatted request.';
|
||||||
|
|
||||||
|
// email slug is invalid
|
||||||
|
$data = [
|
||||||
|
'email_slug' => null,
|
||||||
|
'event_slug' => 'event_slug',
|
||||||
|
];
|
||||||
|
$result = $API->getEventOptions($data);
|
||||||
|
expect($result->errors[0]['message'])->equals($expected_error_message);
|
||||||
|
|
||||||
|
// event slug is invalid
|
||||||
|
$data = [
|
||||||
|
'email_slug' => 'email_slug',
|
||||||
|
'event_slug' => null,
|
||||||
|
];
|
||||||
|
$result = $API->getEventOptions($data);
|
||||||
|
expect($result->errors[0]['message'])->equals($expected_error_message);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItRequiresValidEventWhenGettingEventShortcodes() {
|
||||||
|
$API = new AutomaticEmails();
|
||||||
|
$expected_error_message = 'Automatic email event does not exist.';
|
||||||
|
|
||||||
|
$this->wp->addFilter('mailpoet_automatic_email_test', function() {
|
||||||
|
return [
|
||||||
|
'slug' => 'email',
|
||||||
|
'title' => 'email_title',
|
||||||
|
'description' => 'email_description',
|
||||||
|
'events' => [
|
||||||
|
[
|
||||||
|
'slug' => 'event_slug',
|
||||||
|
'title' => 'event_title',
|
||||||
|
'description' => 'event_description',
|
||||||
|
'listingScheduleDisplayText' => 'sample_text',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'email_slug' => 'email',
|
||||||
|
'event_slug' => 'invalid_event',
|
||||||
|
// should be 'event_slug'
|
||||||
|
];
|
||||||
|
$result = $API->getEventShortcodes($data);
|
||||||
|
expect($result->errors[0]['message'])->equals($expected_error_message);
|
||||||
|
|
||||||
|
$this->wp->removeAllFilters('mailpoet_automatic_email_test');
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItGetsEventShortcodes() {
|
||||||
|
$API = new AutomaticEmails();
|
||||||
|
$shortcodes = [
|
||||||
|
[
|
||||||
|
'text' => 'shortcode_text',
|
||||||
|
'shortcode' => '[shortcode]',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
$this->wp->addFilter('mailpoet_automatic_email_test', function() use ($shortcodes) {
|
||||||
|
return [
|
||||||
|
'slug' => 'email',
|
||||||
|
'title' => 'email_title',
|
||||||
|
'description' => 'email_description',
|
||||||
|
'events' => [
|
||||||
|
[
|
||||||
|
'slug' => 'event_slug',
|
||||||
|
'title' => 'event_title',
|
||||||
|
'description' => 'event_description',
|
||||||
|
'listingScheduleDisplayText' => 'sample_text',
|
||||||
|
'shortcodes' => $shortcodes,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'email_slug' => 'email',
|
||||||
|
'event_slug' => 'event_slug',
|
||||||
|
];
|
||||||
|
$result = $API->getEventShortcodes($data);
|
||||||
|
expect($result->data['email_title'])->equals($shortcodes);
|
||||||
|
|
||||||
|
$this->wp->removeAllFilters('mailpoet_automatic_email_test');
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user