Inject WooCommerce helper for statistics

[MAILPOET-1853]
This commit is contained in:
Jan Jakeš
2019-05-02 16:28:23 +02:00
committed by M. Shull
parent b4edc5912a
commit 2435cc556f
7 changed files with 34 additions and 12 deletions

View File

@ -22,6 +22,7 @@ use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Newsletter\Url as NewsletterUrl; use MailPoet\Newsletter\Url as NewsletterUrl;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoet\WooCommerce\Helper as WCHelper;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
@ -36,6 +37,9 @@ class Newsletters extends APIEndpoint {
/** @var WPFunctions */ /** @var WPFunctions */
private $wp; private $wp;
/** @var WCHelper */
private $woocommerce_helper;
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
@ -47,11 +51,13 @@ class Newsletters extends APIEndpoint {
Listing\BulkActionController $bulk_action, Listing\BulkActionController $bulk_action,
Listing\Handler $listing_handler, Listing\Handler $listing_handler,
WPFunctions $wp, WPFunctions $wp,
WCHelper $woocommerce_helper,
SettingsController $settings SettingsController $settings
) { ) {
$this->bulk_action = $bulk_action; $this->bulk_action = $bulk_action;
$this->listing_handler = $listing_handler; $this->listing_handler = $listing_handler;
$this->wp = $wp; $this->wp = $wp;
$this->woocommerce_helper = $woocommerce_helper;
$this->settings = $settings; $this->settings = $settings;
} }
@ -437,13 +443,13 @@ class Newsletters extends APIEndpoint {
$newsletter $newsletter
->withSegments(true) ->withSegments(true)
->withSendingQueue() ->withSendingQueue()
->withStatistics(); ->withStatistics($this->woocommerce_helper);
} else if ($newsletter->type === Newsletter::TYPE_WELCOME || $newsletter->type === Newsletter::TYPE_AUTOMATIC) { } else if ($newsletter->type === Newsletter::TYPE_WELCOME || $newsletter->type === Newsletter::TYPE_AUTOMATIC) {
$newsletter $newsletter
->withOptions() ->withOptions()
->withTotalSent() ->withTotalSent()
->withScheduledToBeSent() ->withScheduledToBeSent()
->withStatistics(); ->withStatistics($this->woocommerce_helper);
} else if ($newsletter->type === Newsletter::TYPE_NOTIFICATION) { } else if ($newsletter->type === Newsletter::TYPE_NOTIFICATION) {
$newsletter $newsletter
->withOptions() ->withOptions()
@ -453,7 +459,7 @@ class Newsletters extends APIEndpoint {
$newsletter $newsletter
->withSegments(true) ->withSegments(true)
->withSendingQueue() ->withSendingQueue()
->withStatistics(); ->withStatistics($this->woocommerce_helper);
} }
if ($newsletter->status === Newsletter::STATUS_SENT || if ($newsletter->status === Newsletter::STATUS_SENT ||

View File

@ -13,6 +13,7 @@ use MailPoet\Models\StatsNotification;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Tasks\Sending; use MailPoet\Tasks\Sending;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoet\WooCommerce\Helper as WCHelper;
class Worker { class Worker {
@ -31,11 +32,21 @@ class Worker {
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
function __construct(Mailer $mailer, Renderer $renderer, SettingsController $settings, $timer = false) { /** @var WCHelper */
private $woocommerce_helper;
function __construct(
Mailer $mailer,
Renderer $renderer,
SettingsController $settings,
WCHelper $woocommerce_helper,
$timer = false
) {
$this->timer = $timer ?: microtime(true); $this->timer = $timer ?: microtime(true);
$this->renderer = $renderer; $this->renderer = $renderer;
$this->mailer = $mailer; $this->mailer = $mailer;
$this->settings = $settings; $this->settings = $settings;
$this->woocommerce_helper = $woocommerce_helper;
} }
/** @throws \Exception */ /** @throws \Exception */
@ -92,7 +103,7 @@ class Worker {
return $newsletter return $newsletter
->withSendingQueue() ->withSendingQueue()
->withTotalSent() ->withTotalSent()
->withStatistics(); ->withStatistics($this->woocommerce_helper);
} }
/** /**

View File

@ -78,7 +78,7 @@ class WorkersFactory {
} }
function createStatsNotificationsWorker($timer) { function createStatsNotificationsWorker($timer) {
return new StatsNotificationsWorker($this->mailer, $this->renderer, $this->settings, $timer); return new StatsNotificationsWorker($this->mailer, $this->renderer, $this->settings, $this->woocommerce_helper, $timer);
} }
/** @return SendingServiceKeyCheckWorker */ /** @return SendingServiceKeyCheckWorker */

View File

@ -549,8 +549,8 @@ class Newsletter extends Model {
return $this; return $this;
} }
function withStatistics() { function withStatistics(WCHelper $woocommerce_helper) {
$statistics = $this->getStatistics(); $statistics = $this->getStatistics($woocommerce_helper);
$this->statistics = $statistics; $this->statistics = $statistics;
return $this; return $this;
} }
@ -560,7 +560,7 @@ class Newsletter extends Model {
return $renderer->render(); return $renderer->render();
} }
function getStatistics() { function getStatistics(WCHelper $woocommerce_helper) {
if (($this->type !== self::TYPE_WELCOME) && ($this->queue === false)) { if (($this->type !== self::TYPE_WELCOME) && ($this->queue === false)) {
return false; return false;
} }
@ -589,7 +589,6 @@ class Newsletter extends Model {
} }
// WooCommerce revenues // WooCommerce revenues
$woocommerce_helper = new WCHelper();
if ($woocommerce_helper->isWooCommerceActive()) { if ($woocommerce_helper->isWooCommerceActive()) {
$currency = $woocommerce_helper->getWoocommerceCurrency(); $currency = $woocommerce_helper->getWoocommerceCurrency();
$row = StatisticsWooCommercePurchases::selectExpr('SUM(order_price_total) AS total') $row = StatisticsWooCommercePurchases::selectExpr('SUM(order_price_total) AS total')

View File

@ -26,6 +26,7 @@ use MailPoet\Settings\SettingsController;
use MailPoet\Subscription\Url as SubscriptionUrl; use MailPoet\Subscription\Url as SubscriptionUrl;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoet\WooCommerce\Helper as WCHelper;
class NewslettersTest extends \MailPoetTest { class NewslettersTest extends \MailPoetTest {
/** @var Newsletters */ /** @var Newsletters */
@ -110,6 +111,7 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(BulkActionController::class), ContainerWrapper::getInstance()->get(BulkActionController::class),
ContainerWrapper::getInstance()->get(Handler::class), ContainerWrapper::getInstance()->get(Handler::class),
$wp, $wp,
$this->makeEmpty(WCHelper::class),
new SettingsController() new SettingsController()
); );
$response = $this->endpoint->get(array('id' => $this->newsletter->id)); $response = $this->endpoint->get(array('id' => $this->newsletter->id));
@ -148,6 +150,7 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(BulkActionController::class), ContainerWrapper::getInstance()->get(BulkActionController::class),
ContainerWrapper::getInstance()->get(Handler::class), ContainerWrapper::getInstance()->get(Handler::class),
$wp, $wp,
$this->makeEmpty(WCHelper::class),
new SettingsController() new SettingsController()
); );
@ -513,6 +516,7 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(BulkActionController::class), ContainerWrapper::getInstance()->get(BulkActionController::class),
ContainerWrapper::getInstance()->get(Handler::class), ContainerWrapper::getInstance()->get(Handler::class),
$wp, $wp,
$this->makeEmpty(WCHelper::class),
new SettingsController() new SettingsController()
); );

View File

@ -14,6 +14,7 @@ use MailPoet\Models\StatisticsUnsubscribes;
use MailPoet\Models\StatsNotification; use MailPoet\Models\StatsNotification;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\MockObject\MockObject;
use MailPoet\WooCommerce\Helper as WCHelper;
class WorkerTest extends \MailPoetTest { class WorkerTest extends \MailPoetTest {
@ -38,7 +39,7 @@ class WorkerTest extends \MailPoetTest {
$this->mailer = $this->createMock(Mailer::class); $this->mailer = $this->createMock(Mailer::class);
$this->renderer = $this->createMock(Renderer::class); $this->renderer = $this->createMock(Renderer::class);
$this->settings = new SettingsController(); $this->settings = new SettingsController();
$this->stats_notifications = new Worker($this->mailer, $this->renderer, $this->settings); $this->stats_notifications = new Worker($this->mailer, $this->renderer, $this->settings, $this->makeEmpty(WCHelper::class));
$this->settings->set(Worker::SETTINGS_KEY, [ $this->settings->set(Worker::SETTINGS_KEY, [
'enabled' => true, 'enabled' => true,
'address' => 'email@example.com' 'address' => 'email@example.com'

View File

@ -15,6 +15,7 @@ use MailPoet\Models\StatisticsClicks;
use MailPoet\Models\StatisticsUnsubscribes; use MailPoet\Models\StatisticsUnsubscribes;
use MailPoet\Util\Security; use MailPoet\Util\Security;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WooCommerce\Helper as WCHelper;
class NewsletterTest extends \MailPoetTest { class NewsletterTest extends \MailPoetTest {
function _before() { function _before() {
@ -169,7 +170,7 @@ class NewsletterTest extends \MailPoetTest {
$unsubscribes->save(); $unsubscribes->save();
$newsletter->queue = $newsletter->getQueue()->asArray(); $newsletter->queue = $newsletter->getQueue()->asArray();
$statistics = $newsletter->getStatistics( $sending_queue->id); $statistics = $newsletter->getStatistics($this->makeEmpty(WCHelper::class));
expect($statistics['opened'])->equals(1); expect($statistics['opened'])->equals(1);
expect($statistics['clicked'])->equals(1); expect($statistics['clicked'])->equals(1);
expect($statistics['unsubscribed'])->equals(1); expect($statistics['unsubscribed'])->equals(1);