Use Doctrine in WooCommercePurchases class
[MAILPOET-3814]
This commit is contained in:
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -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(),
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user