Use DI for automatic emails in JSON API

[MAILPOET-3924]
This commit is contained in:
Jan Jakes
2021-12-09 13:25:35 +01:00
committed by Veljko V
parent eecbeebafd
commit 897d89aa5a
3 changed files with 30 additions and 25 deletions

View File

@@ -4,6 +4,7 @@ namespace MailPoet\API\JSON\v1;
use MailPoet\API\JSON\Endpoint as APIEndpoint;
use MailPoet\API\JSON\Error as APIError;
use MailPoet\AutomaticEmails\AutomaticEmails as AutomaticEmailsController;
use MailPoet\Config\AccessControl;
use MailPoet\WP\Functions as WPFunctions;
@@ -12,10 +13,18 @@ class AutomaticEmails extends APIEndpoint {
'global' => AccessControl::PERMISSION_MANAGE_SEGMENTS,
];
/** @var AutomaticEmailsController */
private $automaticEmails;
/** @var WPFunctions */
private $wp;
public function __construct() {
$this->wp = new WPFunctions;
public function __construct(
AutomaticEmailsController $automaticEmails,
WPFunctions $wp
) {
$this->automaticEmails = $automaticEmails;
$this->wp = $wp;
}
public function getEventOptions($data) {
@@ -32,8 +41,7 @@ class AutomaticEmails extends APIEndpoint {
);
}
$automaticEmails = new \MailPoet\AutomaticEmails\AutomaticEmails();
$event = $automaticEmails->getAutomaticEmailEventBySlug($emailSlug, $eventSlug);
$event = $this->automaticEmails->getAutomaticEmailEventBySlug($emailSlug, $eventSlug);
$eventFilter = (!empty($event['options']['remoteQueryFilter'])) ? $event['options']['remoteQueryFilter'] : null;
return ($eventFilter === $filter && WPFunctions::get()->hasFilter($eventFilter)) ?
@@ -57,9 +65,8 @@ class AutomaticEmails extends APIEndpoint {
);
}
$automaticEmails = new \MailPoet\AutomaticEmails\AutomaticEmails();
$automaticEmail = $automaticEmails->getAutomaticEmailBySlug($emailSlug);
$event = $automaticEmails->getAutomaticEmailEventBySlug($emailSlug, $eventSlug);
$automaticEmail = $this->automaticEmails->getAutomaticEmailBySlug($emailSlug);
$event = $this->automaticEmails->getAutomaticEmailEventBySlug($emailSlug, $eventSlug);
if (!$event) {
return $this->errorResponse(

View File

@@ -91,7 +91,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\API\JSON\ResponseBuilders\SegmentsResponseBuilder::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\ResponseBuilders\DynamicSegmentsResponseBuilder::class)->setPublic(true);
// Automatic emails
$container->autowire(\MailPoet\AutomaticEmails\AutomaticEmails::class);
$container->autowire(\MailPoet\AutomaticEmails\AutomaticEmails::class)->setPublic(true);
// Config
$container->autowire(\MailPoet\Config\AccessControl::class)->setPublic(true);
$container->autowire(\MailPoet\Config\Activator::class)->setPublic(true);

View File

@@ -2,17 +2,21 @@
namespace MailPoet\API\JSON\v1;
use MailPoet\AutomaticEmails\AutomaticEmails as AutomaticEmailsController;
use MailPoet\WP\Functions as WPFunctions;
class AutomaticEmailsTest extends \MailPoetTest {
public $wp;
/** @var AutomaticEmails */
private $api;
public function _before() {
$this->wp = new WPFunctions;
$this->api = new AutomaticEmails(new AutomaticEmailsController($this->wp), $this->wp);
}
public function testItRequiresProperlyFormattedRequestWhenGettingEventOptions() {
$API = new AutomaticEmails();
$expectedErrorMessage = 'Improperly formatted request.';
// query is invalid
@@ -22,7 +26,7 @@ class AutomaticEmailsTest extends \MailPoetTest {
'email_slug' => 'email_slug',
'event_slug' => 'event_slug',
];
$result = $API->getEventOptions($data);
$result = $this->api->getEventOptions($data);
expect($result->errors[0]['message'])->equals($expectedErrorMessage);
// filter is invalid
@@ -32,7 +36,7 @@ class AutomaticEmailsTest extends \MailPoetTest {
'email_slug' => 'email_slug',
'event_slug' => 'event_slug',
];
$result = $API->getEventOptions($data);
$result = $this->api->getEventOptions($data);
expect($result->errors[0]['message'])->equals($expectedErrorMessage);
// email slug is invalid
@@ -42,7 +46,7 @@ class AutomaticEmailsTest extends \MailPoetTest {
'email_slug' => null,
'event_slug' => 'event_slug',
];
$result = $API->getEventOptions($data);
$result = $this->api->getEventOptions($data);
expect($result->errors[0]['message'])->equals($expectedErrorMessage);
// event slug is invalid
@@ -52,12 +56,11 @@ class AutomaticEmailsTest extends \MailPoetTest {
'email_slug' => 'email_slug',
'event_slug' => null,
];
$result = $API->getEventOptions($data);
$result = $this->api->getEventOptions($data);
expect($result->errors[0]['message'])->equals($expectedErrorMessage);
}
public function testItRequiresValidEventFilterWhenGettingEventOptions() {
$API = new AutomaticEmails();
$expectedErrorMessage = 'Automatic email event filter does not exist.';
$this->wp->addFilter('mailpoet_automatic_email_test', function() {
@@ -90,7 +93,7 @@ class AutomaticEmailsTest extends \MailPoetTest {
'email_slug' => 'email',
'event_slug' => 'event_slug',
];
$result = $API->getEventOptions($data);
$result = $this->api->getEventOptions($data);
expect($result->errors[0]['message'])->equals($expectedErrorMessage);
$this->wp->removeAllFilters('mailpoet_automatic_email_test');
@@ -98,8 +101,6 @@ class AutomaticEmailsTest extends \MailPoetTest {
}
public function testItGetsEventOptions() {
$API = new AutomaticEmails();
$this->wp->addFilter('mailpoet_automatic_email_test', function() {
return [
'slug' => 'email',
@@ -129,7 +130,7 @@ class AutomaticEmailsTest extends \MailPoetTest {
'email_slug' => 'email',
'event_slug' => 'event_slug',
];
$result = $API->getEventOptions($data);
$result = $this->api->getEventOptions($data);
expect($result->data)->equals('pass');
$this->wp->removeAllFilters('mailpoet_automatic_email_test');
@@ -137,7 +138,6 @@ class AutomaticEmailsTest extends \MailPoetTest {
}
public function testItRequiresProperlyFormattedRequestWhenGettingEventShortcodes() {
$API = new AutomaticEmails();
$expectedErrorMessage = 'Improperly formatted request.';
// email slug is invalid
@@ -145,7 +145,7 @@ class AutomaticEmailsTest extends \MailPoetTest {
'email_slug' => null,
'event_slug' => 'event_slug',
];
$result = $API->getEventOptions($data);
$result = $this->api->getEventOptions($data);
expect($result->errors[0]['message'])->equals($expectedErrorMessage);
// event slug is invalid
@@ -153,12 +153,11 @@ class AutomaticEmailsTest extends \MailPoetTest {
'email_slug' => 'email_slug',
'event_slug' => null,
];
$result = $API->getEventOptions($data);
$result = $this->api->getEventOptions($data);
expect($result->errors[0]['message'])->equals($expectedErrorMessage);
}
public function testItRequiresValidEventWhenGettingEventShortcodes() {
$API = new AutomaticEmails();
$expectedErrorMessage = 'Automatic email event does not exist.';
$this->wp->addFilter('mailpoet_automatic_email_test', function() {
@@ -182,14 +181,13 @@ class AutomaticEmailsTest extends \MailPoetTest {
'event_slug' => 'invalid_event',
// should be 'event_slug'
];
$result = $API->getEventShortcodes($data);
$result = $this->api->getEventShortcodes($data);
expect($result->errors[0]['message'])->equals($expectedErrorMessage);
$this->wp->removeAllFilters('mailpoet_automatic_email_test');
}
public function testItGetsEventShortcodes() {
$API = new AutomaticEmails();
$shortcodes = [
[
'text' => 'shortcode_text',
@@ -217,7 +215,7 @@ class AutomaticEmailsTest extends \MailPoetTest {
'email_slug' => 'email',
'event_slug' => 'event_slug',
];
$result = $API->getEventShortcodes($data);
$result = $this->api->getEventShortcodes($data);
expect($result->data['email_title'])->equals($shortcodes);
$this->wp->removeAllFilters('mailpoet_automatic_email_test');