diff --git a/lib/AutomaticEmails/AutomaticEmailFactory.php b/lib/AutomaticEmails/AutomaticEmailFactory.php new file mode 100644 index 0000000000..661b449098 --- /dev/null +++ b/lib/AutomaticEmails/AutomaticEmailFactory.php @@ -0,0 +1,21 @@ +container = $container; + } + + public function createWooCommerceEmail(): WooCommerce { + return $this->container->get(WooCommerce::class); + } +} diff --git a/lib/AutomaticEmails/AutomaticEmails.php b/lib/AutomaticEmails/AutomaticEmails.php index b579cd5180..344947fb30 100644 --- a/lib/AutomaticEmails/AutomaticEmails.php +++ b/lib/AutomaticEmails/AutomaticEmails.php @@ -3,7 +3,6 @@ namespace MailPoet\AutomaticEmails; use MailPoet\WP\Functions as WPFunctions; -use MailPoet\WP\Notice; class AutomaticEmails { const FILTER_PREFIX = 'mailpoet_automatic_email_'; @@ -14,38 +13,20 @@ class AutomaticEmails { /** @var array|null */ private $automaticEmails; - public $availableGroups = [ - 'WooCommerce', - ]; + /** @var AutomaticEmailFactory */ + private $automaticEmailFactory; public function __construct( - WPFunctions $wp + WPFunctions $wp, + AutomaticEmailFactory $automaticEmailFactory ) { $this->wp = $wp; + $this->automaticEmailFactory = $automaticEmailFactory; } public function init() { - foreach ($this->availableGroups as $group) { - $groupClass = sprintf( - '%1$s\%2$s\%2$s', - __NAMESPACE__, - $group - ); - - if (!class_exists($groupClass)) { - $this->displayGroupWarning($group); - continue; - } - - $groupInstance = new $groupClass(); - - if (method_exists($groupInstance, 'init')) { - $groupInstance->init(); - } else { - $this->displayGroupWarning($group); - continue; - } - } + $instance = $this->automaticEmailFactory->createWooCommerceEmail(); + $instance->init(); } public function getAutomaticEmails() { @@ -151,12 +132,4 @@ class AutomaticEmails { $this->automaticEmails = null; } - - private function displayGroupWarning($group) { - $notice = sprintf('%s %s', - sprintf(__('%s automatic email group is misconfigured.', 'mailpoet'), $group), - WPFunctions::get()->__('Please contact our technical support for assistance.', 'mailpoet') - ); - Notice::displayWarning($notice); - } } diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 34ec581aa5..6696f8815d 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -92,6 +92,8 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\API\JSON\ResponseBuilders\DynamicSegmentsResponseBuilder::class)->setPublic(true); // Automatic emails $container->autowire(\MailPoet\AutomaticEmails\AutomaticEmails::class)->setPublic(true); + $container->autowire(\MailPoet\AutomaticEmails\AutomaticEmailFactory::class)->setPublic(true); + $container->autowire(\MailPoet\AutomaticEmails\WooCommerce\WooCommerce::class)->setPublic(true); // Config $container->autowire(\MailPoet\Config\AccessControl::class)->setPublic(true); $container->autowire(\MailPoet\Config\Activator::class)->setPublic(true); diff --git a/tests/integration/API/JSON/v1/AutomaticEmailsTest.php b/tests/integration/API/JSON/v1/AutomaticEmailsTest.php index c51ed15d69..99af5878f3 100644 --- a/tests/integration/API/JSON/v1/AutomaticEmailsTest.php +++ b/tests/integration/API/JSON/v1/AutomaticEmailsTest.php @@ -2,7 +2,10 @@ namespace MailPoet\API\JSON\v1; +use MailPoet\AutomaticEmails\AutomaticEmailFactory; use MailPoet\AutomaticEmails\AutomaticEmails as AutomaticEmailsController; +use MailPoet\AutomaticEmails\WooCommerce\WooCommerce; +use MailPoet\WooCommerce\Helper; use MailPoet\WP\Functions as WPFunctions; class AutomaticEmailsTest extends \MailPoetTest { @@ -13,7 +16,11 @@ class AutomaticEmailsTest extends \MailPoetTest { public function _before() { $this->wp = new WPFunctions; - $this->api = new AutomaticEmails(new AutomaticEmailsController($this->wp), $this->wp); + + $automaticEmailFactory = $this->makeEmpty(AutomaticEmailFactory::class, [ + 'createWooCommerceEmail' => new WooCommerce($this->wp, new Helper()), + ]); + $this->api = new AutomaticEmails(new AutomaticEmailsController($this->wp, $automaticEmailFactory), $this->wp); } public function testItRequiresProperlyFormattedRequestWhenGettingEventOptions() { diff --git a/tests/integration/AutomaticEmails/AutomaticEmailsTest.php b/tests/integration/AutomaticEmails/AutomaticEmailsTest.php index 484bae4997..17da08de93 100644 --- a/tests/integration/AutomaticEmails/AutomaticEmailsTest.php +++ b/tests/integration/AutomaticEmails/AutomaticEmailsTest.php @@ -2,15 +2,22 @@ namespace MailPoet\AutomaticEmails; +use MailPoet\AutomaticEmails\WooCommerce\WooCommerce; use MailPoet\WP\Functions as WPFunctions; class AutomaticEmailsTest extends \MailPoetTest { public $wp; public $AM; + /** @var AutomaticEmailFactory */ + private $automaticEmailFactory; + public function _before() { $this->wp = new WPFunctions(); - $this->AM = new AutomaticEmails($this->wp); + $this->automaticEmailFactory = $this->makeEmpty(AutomaticEmailFactory::class, [ + 'createWooCommerceEmail' => new WooCommerce(), + ]); + $this->AM = new AutomaticEmails($this->wp, $this->automaticEmailFactory); } public function testItCanUnregisterAutomaticEmails() { @@ -37,14 +44,6 @@ class AutomaticEmailsTest extends \MailPoetTest { expect($result)->null(); } - public function testItReturnsNullWhenThereAreNoRegisteredAutomaticEmails() { - $AM = $this->AM; - $AM->unregisterAutomaticEmails(); - $AM->availableGroups = []; - $AM->init(); - expect($AM->getAutomaticEmails())->null(); - } - public function testItGetsAutomaticEmails() { $this->wp->addFilter('mailpoet_automatic_email_test1', function() { return [ diff --git a/tests/integration/AutomaticEmails/WooCommerce/WooCommerceTest.php b/tests/integration/AutomaticEmails/WooCommerce/WooCommerceTest.php index 784f803029..4f106c7843 100644 --- a/tests/integration/AutomaticEmails/WooCommerce/WooCommerceTest.php +++ b/tests/integration/AutomaticEmails/WooCommerce/WooCommerceTest.php @@ -3,6 +3,7 @@ namespace MailPoet\AutomaticEmails\WooCommerce; use Codeception\Util\Stub; +use MailPoet\AutomaticEmails\AutomaticEmailFactory; use MailPoet\AutomaticEmails\AutomaticEmails; use MailPoet\AutomaticEmails\WooCommerce\Events\AbandonedCart; use MailPoet\AutomaticEmails\WooCommerce\Events\FirstPurchase; @@ -11,13 +12,22 @@ use MailPoet\AutomaticEmails\WooCommerce\Events\PurchasedProduct; use MailPoet\WP\Functions as WPFunctions; class WooCommerceTest extends \MailPoetTest { + /** @var AutomaticEmailFactory */ + private $automaticEmailFactory; + + public function _before() { + $this->automaticEmailFactory = $this->makeEmpty(AutomaticEmailFactory::class, [ + 'createWooCommerceEmail' => new WooCommerce(), + ]); + } + public function testItRegistersAbandonedCartEvent() { $WC = Stub::make(new WooCommerce(), ['isWoocommerceEnabled' => true]); $WC->__construct(); $WC->init(); // event is registered - $AM = new AutomaticEmails(new WPFunctions()); + $AM = new AutomaticEmails(new WPFunctions(), $this->automaticEmailFactory); $result = $AM->getAutomaticEmailEventBySlug(WooCommerce::SLUG, AbandonedCart::SLUG); expect($result)->notEmpty(); } @@ -28,7 +38,7 @@ class WooCommerceTest extends \MailPoetTest { $WC->init(); // event is registered - $AM = new AutomaticEmails(new WPFunctions()); + $AM = new AutomaticEmails(new WPFunctions(), $this->automaticEmailFactory); $result = $AM->getAutomaticEmailEventBySlug(WooCommerce::SLUG, FirstPurchase::SLUG); expect($result)->notEmpty(); @@ -44,7 +54,7 @@ class WooCommerceTest extends \MailPoetTest { $WC->init(); // event is registered - $AM = new AutomaticEmails(new WPFunctions()); + $AM = new AutomaticEmails(new WPFunctions(), $this->automaticEmailFactory); $result = $AM->getAutomaticEmailEventBySlug(WooCommerce::SLUG, PurchasedInCategory::SLUG); expect($result)->notEmpty(); } @@ -55,7 +65,7 @@ class WooCommerceTest extends \MailPoetTest { $WC->init(); // event is registered - $AM = new AutomaticEmails(new WPFunctions()); + $AM = new AutomaticEmails(new WPFunctions(), $this->automaticEmailFactory); $result = $AM->getAutomaticEmailEventBySlug(WooCommerce::SLUG, PurchasedProduct::SLUG); expect($result)->notEmpty(); @@ -69,7 +79,7 @@ class WooCommerceTest extends \MailPoetTest { $WC = Stub::make(new WooCommerce(), ['isWoocommerceEnabled' => false]); $WC->__construct(); $WC->init(); - $AM = new AutomaticEmails(new WPFunctions()); + $AM = new AutomaticEmails(new WPFunctions(), $this->automaticEmailFactory); $result = $AM->getAutomaticEmailBySlug('woocommerce'); foreach ($result['events'] as $event) { expect($event['actionButtonTitle'])->equals('WooCommerce is required'); @@ -79,7 +89,7 @@ class WooCommerceTest extends \MailPoetTest { $WC = Stub::make(new WooCommerce(), ['isWoocommerceEnabled' => true]); $WC->__construct(); $WC->init(); - $AM = new AutomaticEmails(new WPFunctions()); + $AM = new AutomaticEmails(new WPFunctions(), $this->automaticEmailFactory); $result = $AM->getAutomaticEmailBySlug('woocommerce'); foreach ($result['events'] as $event) { expect($event)->hasNotKey('actionButtonTitle');