Use Doctrine in WooCommercePurchases class

[MAILPOET-3814]
This commit is contained in:
Pavel Dohnal
2021-10-13 15:54:08 +02:00
committed by Veljko V
parent 69ff6072d2
commit aaa24d086b
5 changed files with 164 additions and 82 deletions

View File

@@ -2,8 +2,6 @@
namespace MailPoet\Models; namespace MailPoet\Models;
use DateTimeInterface;
/** /**
* @property int $newsletterId * @property int $newsletterId
* @property int $subscriberId * @property int $subscriberId
@@ -13,25 +11,4 @@ use DateTimeInterface;
*/ */
class StatisticsClicks extends Model { class StatisticsClicks extends Model {
public static $_table = MP_STATISTICS_CLICKS_TABLE; // phpcs:ignore PSR2.Classes.PropertyDeclaration public static $_table = MP_STATISTICS_CLICKS_TABLE; // phpcs:ignore PSR2.Classes.PropertyDeclaration
public static function findLatestPerNewsletterBySubscriber(Subscriber $subscriber, DateTimeInterface $from, DateTimeInterface $to) {
// subquery to find latest click IDs for each newsletter
$table = self::$_table;
$latestClickIdsPerNewsletterQuery = "
SELECT MAX(id)
FROM $table
WHERE subscriber_id = :subscriber_id
AND updated_at > :from
AND updated_at < :to
GROUP BY newsletter_id
";
return static::tableAlias('clicks')
->whereRaw("clicks.id IN ($latestClickIdsPerNewsletterQuery)", [
'subscriber_id' => $subscriber->id,
'from' => $from->format('Y-m-d H:i:s'),
'to' => $to->format('Y-m-d H:i:s'),
])
->findMany();
}
} }

View File

@@ -2,8 +2,6 @@
namespace MailPoet\Models; namespace MailPoet\Models;
use WC_Order;
/** /**
* @property int $newsletterId * @property int $newsletterId
* @property int $subscriberId * @property int $subscriberId
@@ -15,27 +13,4 @@ use WC_Order;
*/ */
class StatisticsWooCommercePurchases extends Model { class StatisticsWooCommercePurchases extends Model {
public static $_table = MP_STATISTICS_WOOCOMMERCE_PURCHASES_TABLE; // phpcs:ignore PSR2.Classes.PropertyDeclaration public static $_table = MP_STATISTICS_WOOCOMMERCE_PURCHASES_TABLE; // phpcs:ignore PSR2.Classes.PropertyDeclaration
public static function createOrUpdateByClickDataAndOrder(StatisticsClicks $click, WC_Order $order) {
// search by subscriber and newsletter IDs (instead of click itself) to avoid duplicities
// when a new click from the subscriber appeared since last tracking for given newsletter
// (this will keep the originally tracked click - likely the click that led to the order)
$statistics = self::where('order_id', $order->get_id())
->where('subscriber_id', $click->subscriberId)
->where('newsletter_id', $click->newsletterId)
->findOne();
if (!$statistics instanceof self) {
$statistics = self::create();
$statistics->newsletterId = $click->newsletterId;
$statistics->subscriberId = $click->subscriberId;
$statistics->queueId = $click->queueId;
$statistics->clickId = (int)$click->id;
$statistics->orderId = $order->get_id();
}
$statistics->orderCurrency = $order->get_currency();
$statistics->orderPriceTotal = (float)$order->get_total();
return $statistics->save();
}
} }

View File

@@ -3,6 +3,8 @@
namespace MailPoet\Statistics; namespace MailPoet\Statistics;
use MailPoet\Doctrine\Repository; use MailPoet\Doctrine\Repository;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Entities\StatisticsClickEntity; use MailPoet\Entities\StatisticsClickEntity;
use MailPoet\Entities\StatisticsWooCommercePurchaseEntity; use MailPoet\Entities\StatisticsWooCommercePurchaseEntity;
@@ -25,9 +27,12 @@ class StatisticsWooCommercePurchasesRepository extends Repository {
]); ]);
if (!$statistics instanceof StatisticsWooCommercePurchaseEntity) { if (!$statistics instanceof StatisticsWooCommercePurchaseEntity) {
$newsletter = $click->getNewsletter();
$queue = $click->getQueue();
if ((!$newsletter instanceof NewsletterEntity) || (!$queue instanceof SendingQueueEntity)) return;
$statistics = new StatisticsWooCommercePurchaseEntity( $statistics = new StatisticsWooCommercePurchaseEntity(
$click->getNewsletter(), $newsletter,
$click->getQueue(), $queue,
$click, $click,
$order->get_id(), $order->get_id(),
$order->get_currency(), $order->get_currency(),

View File

@@ -2,9 +2,12 @@
namespace MailPoet\Statistics\Track; namespace MailPoet\Statistics\Track;
use MailPoet\Models\StatisticsClicks; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Models\StatisticsWooCommercePurchases; use MailPoet\Entities\StatisticsClickEntity;
use MailPoet\Models\Subscriber; use MailPoet\Entities\SubscriberEntity;
use MailPoet\Statistics\StatisticsClicksRepository;
use MailPoet\Statistics\StatisticsWooCommercePurchasesRepository;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Util\Cookies; use MailPoet\Util\Cookies;
use MailPoet\WooCommerce\Helper; use MailPoet\WooCommerce\Helper;
use WC_Order; use WC_Order;
@@ -18,12 +21,27 @@ class WooCommercePurchases {
/** @var Cookies */ /** @var Cookies */
private $cookies; private $cookies;
/** @var StatisticsWooCommercePurchasesRepository */
private $statisticsWooCommercePurchasesRepository;
/** @var StatisticsClicksRepository */
private $statisticsClicksRepository;
/** @var SubscribersRepository */
private $subscribersRepository;
public function __construct( public function __construct(
Helper $woocommerceHelper, Helper $woocommerceHelper,
StatisticsWooCommercePurchasesRepository $statisticsWooCommercePurchasesRepository,
StatisticsClicksRepository $statisticsClicksRepository,
SubscribersRepository $subscribersRepository,
Cookies $cookies Cookies $cookies
) { ) {
$this->woocommerceHelper = $woocommerceHelper; $this->woocommerceHelper = $woocommerceHelper;
$this->cookies = $cookies; $this->cookies = $cookies;
$this->statisticsWooCommercePurchasesRepository = $statisticsWooCommercePurchasesRepository;
$this->statisticsClicksRepository = $statisticsClicksRepository;
$this->subscribersRepository = $subscribersRepository;
} }
public function trackPurchase($id, $useCookies = true) { public function trackPurchase($id, $useCookies = true) {
@@ -40,13 +58,18 @@ class WooCommercePurchases {
$from = clone $fromDate; $from = clone $fromDate;
$from->modify(-self::USE_CLICKS_SINCE_DAYS_AGO . ' days'); $from->modify(-self::USE_CLICKS_SINCE_DAYS_AGO . ' days');
$to = $order->get_date_created(); $to = $order->get_date_created();
if (is_null($to)) {
return;
}
// track purchases from all clicks matched by order email // track purchases from all clicks matched by order email
$processedNewsletterIdsMap = []; $processedNewsletterIdsMap = [];
$orderEmailClicks = $this->getClicks($order->get_billing_email(), $from, $to); $orderEmailClicks = $this->getClicks($order->get_billing_email(), $from, $to);
foreach ($orderEmailClicks as $click) { foreach ($orderEmailClicks as $click) {
StatisticsWooCommercePurchases::createOrUpdateByClickDataAndOrder($click, $order); $this->statisticsWooCommercePurchasesRepository->createOrUpdateByClickDataAndOrder($click, $order);
$processedNewsletterIdsMap[$click->newsletterId] = true; $newsletter = $click->getNewsletter();
if (!$newsletter instanceof NewsletterEntity) continue;
$processedNewsletterIdsMap[$newsletter->getId()] = true;
} }
if (!$useCookies) { if (!$useCookies) {
@@ -56,35 +79,44 @@ class WooCommercePurchases {
// track purchases from clicks matched by cookie email (only for newsletters not tracked by order) // track purchases from clicks matched by cookie email (only for newsletters not tracked by order)
$cookieEmailClicks = $this->getClicks($this->getSubscriberEmailFromCookie(), $from, $to); $cookieEmailClicks = $this->getClicks($this->getSubscriberEmailFromCookie(), $from, $to);
foreach ($cookieEmailClicks as $click) { foreach ($cookieEmailClicks as $click) {
if (isset($processedNewsletterIdsMap[$click->newsletterId])) { $newsletter = $click->getNewsletter();
if (!$newsletter instanceof NewsletterEntity) continue;
if (isset($processedNewsletterIdsMap[$newsletter->getId()])) {
continue; // do not track click for newsletters that were already tracked by order email continue; // do not track click for newsletters that were already tracked by order email
} }
StatisticsWooCommercePurchases::createOrUpdateByClickDataAndOrder($click, $order); $this->statisticsWooCommercePurchasesRepository->createOrUpdateByClickDataAndOrder($click, $order);
} }
} }
private function getClicks($email, $from, $to) { /**
$subscriber = Subscriber::findOne($email); * @param ?string $email
if (!$subscriber instanceof Subscriber) { * @param \DateTimeInterface $from
* @param \DateTimeInterface $to
* @return StatisticsClickEntity[]
*/
private function getClicks(?string $email, \DateTimeInterface $from, \DateTimeInterface $to): array {
if (!$email) return [];
$subscriber = $this->subscribersRepository->findOneBy(['email' => $email]);
if (!$subscriber instanceof SubscriberEntity) {
return []; return [];
} }
return StatisticsClicks::findLatestPerNewsletterBySubscriber($subscriber, $from, $to); return $this->statisticsClicksRepository->findLatestPerNewsletterBySubscriber($subscriber, $from, $to);
} }
private function getSubscriberEmailFromCookie() { private function getSubscriberEmailFromCookie(): ?string {
$cookieData = $this->cookies->get(Clicks::REVENUE_TRACKING_COOKIE_NAME); $cookieData = $this->cookies->get(Clicks::REVENUE_TRACKING_COOKIE_NAME);
if (!$cookieData) { if (!$cookieData) {
return null; return null;
} }
$click = StatisticsClicks::findOne($cookieData['statistics_clicks']); $click = $this->statisticsClicksRepository->findOneById($cookieData['statistics_clicks']);
if (!$click instanceof StatisticsClicks) { if (!$click instanceof StatisticsClickEntity) {
return null; return null;
} }
$subscriber = Subscriber::findOne($click->subscriberId); $subscriber = $click->getSubscriber();
if ($subscriber) { if ($subscriber instanceof SubscriberEntity) {
return $subscriber->email; return $subscriber->getEmail();
} }
return null; return null;
} }

View File

@@ -9,7 +9,10 @@ use MailPoet\Models\SendingQueue;
use MailPoet\Models\StatisticsClicks; use MailPoet\Models\StatisticsClicks;
use MailPoet\Models\StatisticsWooCommercePurchases; use MailPoet\Models\StatisticsWooCommercePurchases;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Statistics\StatisticsClicksRepository;
use MailPoet\Statistics\StatisticsWooCommercePurchasesRepository;
use MailPoet\Statistics\Track\WooCommercePurchases; use MailPoet\Statistics\Track\WooCommercePurchases;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Tasks\Sending; use MailPoet\Tasks\Sending;
use MailPoet\Util\Cookies; use MailPoet\Util\Cookies;
use MailPoet\WooCommerce\Helper as WooCommerceHelper; use MailPoet\WooCommerce\Helper as WooCommerceHelper;
@@ -52,7 +55,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
$wrongClick = $this->createClick($this->link, $wrongSubscriber, 1); $wrongClick = $this->createClick($this->link, $wrongSubscriber, 1);
$orderMock = $this->createOrderMock($this->subscriber->email); $orderMock = $this->createOrderMock($this->subscriber->email);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
$purchaseStats = StatisticsWooCommercePurchases::findMany(); $purchaseStats = StatisticsWooCommercePurchases::findMany();
expect(count($purchaseStats))->equals(1); expect(count($purchaseStats))->equals(1);
@@ -62,7 +71,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
public function testItTracksPayment() { public function testItTracksPayment() {
$click = $this->createClick($this->link, $this->subscriber); $click = $this->createClick($this->link, $this->subscriber);
$orderMock = $this->createOrderMock($this->subscriber->email); $orderMock = $this->createOrderMock($this->subscriber->email);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
$purchaseStats = StatisticsWooCommercePurchases::findMany(); $purchaseStats = StatisticsWooCommercePurchases::findMany();
expect(count($purchaseStats))->equals(1); expect(count($purchaseStats))->equals(1);
@@ -85,7 +100,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
$click2 = $this->createClick($link, $this->subscriber, 1); $click2 = $this->createClick($link, $this->subscriber, 1);
$orderMock = $this->createOrderMock($this->subscriber->email); $orderMock = $this->createOrderMock($this->subscriber->email);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
$purchaseStats = StatisticsWooCommercePurchases::findMany(); $purchaseStats = StatisticsWooCommercePurchases::findMany();
expect(count($purchaseStats))->equals(2); expect(count($purchaseStats))->equals(2);
@@ -108,12 +129,24 @@ class WooCommercePurchasesTest extends \MailPoetTest {
// first order // first order
$orderMock = $this->createOrderMock($this->subscriber->email, 10.0, 123); $orderMock = $this->createOrderMock($this->subscriber->email, 10.0, 123);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
// second order // second order
$orderMock = $this->createOrderMock($this->subscriber->email, 20.0, 456); $orderMock = $this->createOrderMock($this->subscriber->email, 20.0, 456);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
expect(count(StatisticsWooCommercePurchases::findMany()))->equals(2); expect(count(StatisticsWooCommercePurchases::findMany()))->equals(2);
@@ -124,7 +157,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
$this->createClick($this->link, $this->subscriber, 5); $this->createClick($this->link, $this->subscriber, 5);
$latestClick = $this->createClick($this->link, $this->subscriber, 1); $latestClick = $this->createClick($this->link, $this->subscriber, 1);
$orderMock = $this->createOrderMock($this->subscriber->email); $orderMock = $this->createOrderMock($this->subscriber->email);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
$purchaseStats = StatisticsWooCommercePurchases::orderByDesc('created_at')->findMany(); $purchaseStats = StatisticsWooCommercePurchases::orderByDesc('created_at')->findMany();
@@ -135,7 +174,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
public function testItTracksPaymentOnlyOnce() { public function testItTracksPaymentOnlyOnce() {
$this->createClick($this->link, $this->subscriber); $this->createClick($this->link, $this->subscriber);
$orderMock = $this->createOrderMock($this->subscriber->email); $orderMock = $this->createOrderMock($this->subscriber->email);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
expect(count(StatisticsWooCommercePurchases::findMany()))->equals(1); expect(count(StatisticsWooCommercePurchases::findMany()))->equals(1);
@@ -144,7 +189,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
public function testItTracksPaymentOnlyOnceWhenNewClickAppears() { public function testItTracksPaymentOnlyOnceWhenNewClickAppears() {
$this->createClick($this->link, $this->subscriber, 5); $this->createClick($this->link, $this->subscriber, 5);
$orderMock = $this->createOrderMock($this->subscriber->email); $orderMock = $this->createOrderMock($this->subscriber->email);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
$this->createClick($this->link, $this->subscriber, 1); $this->createClick($this->link, $this->subscriber, 1);
@@ -155,7 +206,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
public function testItDoesNotTrackPaymentWhenClickTooOld() { public function testItDoesNotTrackPaymentWhenClickTooOld() {
$this->createClick($this->link, $this->subscriber, 20); $this->createClick($this->link, $this->subscriber, 20);
$orderMock = $this->createOrderMock($this->subscriber->email); $orderMock = $this->createOrderMock($this->subscriber->email);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
expect(count(StatisticsWooCommercePurchases::findMany()))->equals(0); expect(count(StatisticsWooCommercePurchases::findMany()))->equals(0);
} }
@@ -163,7 +220,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
public function testItDoesNotTrackPaymentForDifferentEmail() { public function testItDoesNotTrackPaymentForDifferentEmail() {
$this->createClick($this->link, $this->subscriber); $this->createClick($this->link, $this->subscriber);
$orderMock = $this->createOrderMock('different.email@example.com'); $orderMock = $this->createOrderMock('different.email@example.com');
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
expect(count(StatisticsWooCommercePurchases::findMany()))->equals(0); expect(count(StatisticsWooCommercePurchases::findMany()))->equals(0);
} }
@@ -171,7 +234,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
public function testItDoesNotTrackPaymentWhenClickNewerThanOrder() { public function testItDoesNotTrackPaymentWhenClickNewerThanOrder() {
$this->createClick($this->link, $this->subscriber, 0); $this->createClick($this->link, $this->subscriber, 0);
$orderMock = $this->createOrderMock($this->subscriber->email); $orderMock = $this->createOrderMock($this->subscriber->email);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
expect(count(StatisticsWooCommercePurchases::findMany()))->equals(0); expect(count(StatisticsWooCommercePurchases::findMany()))->equals(0);
} }
@@ -181,7 +250,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
$this->createClick($this->link, $this->subscriber, 0); // wrong click, should not be tracked $this->createClick($this->link, $this->subscriber, 0); // wrong click, should not be tracked
$orderMock = $this->createOrderMock($this->subscriber->email); $orderMock = $this->createOrderMock($this->subscriber->email);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
$purchaseStats = StatisticsWooCommercePurchases::findMany(); $purchaseStats = StatisticsWooCommercePurchases::findMany();
expect($purchaseStats)->count(1); expect($purchaseStats)->count(1);
@@ -201,7 +276,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
]); ]);
$orderMock = $this->createOrderMock($orderEmail); $orderMock = $this->createOrderMock($orderEmail);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
$purchaseStats = StatisticsWooCommercePurchases::findMany(); $purchaseStats = StatisticsWooCommercePurchases::findMany();
expect(count($purchaseStats))->equals(1); expect(count($purchaseStats))->equals(1);
@@ -224,7 +305,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
]); ]);
$orderMock = $this->createOrderMock($orderEmail); $orderMock = $this->createOrderMock($orderEmail);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
$purchaseStats = StatisticsWooCommercePurchases::findMany(); $purchaseStats = StatisticsWooCommercePurchases::findMany();
expect(count($purchaseStats))->equals(1); expect(count($purchaseStats))->equals(1);
@@ -252,7 +339,13 @@ class WooCommercePurchasesTest extends \MailPoetTest {
]); ]);
$orderMock = $this->createOrderMock($orderEmail); $orderMock = $this->createOrderMock($orderEmail);
$woocommercePurchases = new WooCommercePurchases($this->createWooCommerceHelperMock($orderMock), $this->cookies); $woocommercePurchases = new WooCommercePurchases(
$this->createWooCommerceHelperMock($orderMock),
$this->diContainer->get(StatisticsWooCommercePurchasesRepository::class),
$this->diContainer->get(StatisticsClicksRepository::class),
$this->diContainer->get(SubscribersRepository::class),
$this->cookies
);
$woocommercePurchases->trackPurchase($orderMock->get_id()); $woocommercePurchases->trackPurchase($orderMock->get_id());
$purchaseStats = StatisticsWooCommercePurchases::findMany(); $purchaseStats = StatisticsWooCommercePurchases::findMany();
expect(count($purchaseStats))->equals(2); expect(count($purchaseStats))->equals(2);