Remove usages of StatisticsUnsubscribes model
[MAILPOET-3819]
This commit is contained in:
@@ -3,7 +3,11 @@
|
|||||||
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\StatisticsUnsubscribeEntity;
|
use MailPoet\Entities\StatisticsUnsubscribeEntity;
|
||||||
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
|
use MailPoetVendor\Carbon\Carbon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @extends Repository<StatisticsUnsubscribeEntity>
|
* @extends Repository<StatisticsUnsubscribeEntity>
|
||||||
@@ -12,4 +16,27 @@ class StatisticsUnsubscribesRepository extends Repository {
|
|||||||
protected function getEntityClassName() {
|
protected function getEntityClassName() {
|
||||||
return StatisticsUnsubscribeEntity::class;
|
return StatisticsUnsubscribeEntity::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $data
|
||||||
|
* @return StatisticsUnsubscribeEntity
|
||||||
|
*/
|
||||||
|
public function createOrUpdate($data) {
|
||||||
|
if (isset($data['id'])) {
|
||||||
|
$entity = $this->findOneById((int)$data['id']);
|
||||||
|
}
|
||||||
|
if (!isset($entity)) {
|
||||||
|
if (!isset($data['newsletter'], $data['queue'], $data['subscriber'])) {
|
||||||
|
throw new \Exception('Newsletter, SendingQueue and Subscriber entities are required for creation');
|
||||||
|
}
|
||||||
|
assert($data['newsletter'] instanceof NewsletterEntity);
|
||||||
|
assert($data['queue'] instanceof SendingQueueEntity);
|
||||||
|
assert($data['subscriber'] instanceof SubscriberEntity);
|
||||||
|
$entity = new StatisticsUnsubscribeEntity($data['newsletter'], $data['queue'], $data['subscriber']);
|
||||||
|
$this->entityManager->persist($entity);
|
||||||
|
}
|
||||||
|
if (isset($data['created_at'])) $entity->setCreatedAt(new Carbon($data['created_at']));
|
||||||
|
$this->entityManager->flush();
|
||||||
|
return $entity;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,8 +4,9 @@ namespace MailPoet\Cron\Workers\StatsNotifications;
|
|||||||
|
|
||||||
use MailPoet\Config\Renderer;
|
use MailPoet\Config\Renderer;
|
||||||
use MailPoet\Cron\CronHelper;
|
use MailPoet\Cron\CronHelper;
|
||||||
use MailPoet\DI\ContainerWrapper;
|
use MailPoet\Entities\StatisticsUnsubscribeEntity;
|
||||||
use MailPoet\Entities\StatsNotificationEntity;
|
use MailPoet\Entities\StatsNotificationEntity;
|
||||||
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Mailer\Mailer;
|
use MailPoet\Mailer\Mailer;
|
||||||
use MailPoet\Mailer\MetaInfo;
|
use MailPoet\Mailer\MetaInfo;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
@@ -14,9 +15,11 @@ use MailPoet\Models\ScheduledTask;
|
|||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Models\StatisticsClicks;
|
use MailPoet\Models\StatisticsClicks;
|
||||||
use MailPoet\Models\StatisticsOpens;
|
use MailPoet\Models\StatisticsOpens;
|
||||||
use MailPoet\Models\StatisticsUnsubscribes;
|
use MailPoet\Newsletter\NewslettersRepository;
|
||||||
|
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||||
use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository;
|
use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
|
use MailPoet\Statistics\StatisticsUnsubscribesRepository;
|
||||||
use MailPoet\Subscribers\SubscribersRepository;
|
use MailPoet\Subscribers\SubscribersRepository;
|
||||||
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
|
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
@@ -51,19 +54,28 @@ class WorkerTest extends \MailPoetTest {
|
|||||||
/** @var NewsletterLinkRepository */
|
/** @var NewsletterLinkRepository */
|
||||||
private $newsletterLinkRepository;
|
private $newsletterLinkRepository;
|
||||||
|
|
||||||
|
/** @var NewslettersRepository */
|
||||||
|
private $newslettersRepository;
|
||||||
|
|
||||||
|
/** @var SendingQueuesRepository */
|
||||||
|
private $sendingQueuesRepository;
|
||||||
|
|
||||||
|
/** @var StatisticsUnsubscribesRepository */
|
||||||
|
private $statisticsUnsubscribesRepository;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
$this->cleanup();
|
||||||
ORM::raw_execute('TRUNCATE ' . StatisticsClicks::$_table);
|
$this->repository = $this->diContainer->get(StatsNotificationsRepository::class);
|
||||||
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
$this->newsletterLinkRepository = $this->diContainer->get(NewsletterLinkRepository::class);
|
||||||
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
|
||||||
$this->repository = ContainerWrapper::getInstance()->get(StatsNotificationsRepository::class);
|
$this->sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class);
|
||||||
$this->newsletterLinkRepository = ContainerWrapper::getInstance()->get(NewsletterLinkRepository::class);
|
$this->statisticsUnsubscribesRepository = $this->diContainer->get(StatisticsUnsubscribesRepository::class);
|
||||||
$this->repository->truncate();
|
$this->repository->truncate();
|
||||||
$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 = SettingsController::getInstance();
|
$this->settings = SettingsController::getInstance();
|
||||||
$this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class);
|
$this->cronHelper = $this->diContainer->get(CronHelper::class);
|
||||||
$this->statsNotifications = new Worker(
|
$this->statsNotifications = new Worker(
|
||||||
$this->mailer,
|
$this->mailer,
|
||||||
$this->renderer,
|
$this->renderer,
|
||||||
@@ -72,10 +84,10 @@ class WorkerTest extends \MailPoetTest {
|
|||||||
new MetaInfo,
|
new MetaInfo,
|
||||||
$this->repository,
|
$this->repository,
|
||||||
$this->newsletterLinkRepository,
|
$this->newsletterLinkRepository,
|
||||||
ContainerWrapper::getInstance()->get(NewsletterStatisticsRepository::class),
|
$this->diContainer->get(NewsletterStatisticsRepository::class),
|
||||||
$this->entityManager,
|
$this->entityManager,
|
||||||
ContainerWrapper::getInstance()->get(SubscribersFeature::class),
|
$this->diContainer->get(SubscribersFeature::class),
|
||||||
ContainerWrapper::getInstance()->get(SubscribersRepository::class)
|
$this->diContainer->get(SubscribersRepository::class)
|
||||||
);
|
);
|
||||||
$this->settings->set(Worker::SETTINGS_KEY, [
|
$this->settings->set(Worker::SETTINGS_KEY, [
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
@@ -156,10 +168,10 @@ class WorkerTest extends \MailPoetTest {
|
|||||||
'queue_id' => $this->queue->id(),
|
'queue_id' => $this->queue->id(),
|
||||||
'created_at' => '2017-01-02 21:23:45',
|
'created_at' => '2017-01-02 21:23:45',
|
||||||
]);
|
]);
|
||||||
StatisticsUnsubscribes::createOrUpdate([
|
$this->statisticsUnsubscribesRepository->createOrUpdate([
|
||||||
'subscriber_id' => '12',
|
'subscriber' => $this->createSubscriber(),
|
||||||
'newsletter_id' => $this->newsletter->id(),
|
'newsletter' => $this->newslettersRepository->findOneById($this->newsletter->id()),
|
||||||
'queue_id' => $this->queue->id(),
|
'queue' => $this->sendingQueuesRepository->findOneById($this->queue->id()),
|
||||||
'created_at' => '2017-01-02 21:23:45',
|
'created_at' => '2017-01-02 21:23:45',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@@ -311,4 +323,25 @@ class WorkerTest extends \MailPoetTest {
|
|||||||
|
|
||||||
$this->statsNotifications->process();
|
$this->statsNotifications->process();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function createSubscriber(): SubscriberEntity {
|
||||||
|
$subscriber = new SubscriberEntity();
|
||||||
|
$subscriber->setStatus(SubscriberEntity::STATUS_SUBSCRIBED);
|
||||||
|
$subscriber->setEmail('subscriber' . rand(0, 10000) . '@example.com');
|
||||||
|
$this->entityManager->persist($subscriber);
|
||||||
|
return $subscriber;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function cleanup() {
|
||||||
|
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||||
|
ORM::raw_execute('TRUNCATE ' . StatisticsClicks::$_table);
|
||||||
|
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
||||||
|
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
||||||
|
$this->truncateEntity(StatisticsUnsubscribeEntity::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function _after() {
|
||||||
|
parent::_after();
|
||||||
|
$this->cleanup();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
namespace MailPoet\Test\Models;
|
namespace MailPoet\Test\Models;
|
||||||
|
|
||||||
|
use MailPoet\Entities\StatisticsClickEntity;
|
||||||
|
use MailPoet\Entities\StatisticsOpenEntity;
|
||||||
|
use MailPoet\Entities\StatisticsUnsubscribeEntity;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\NewsletterOption;
|
use MailPoet\Models\NewsletterOption;
|
||||||
use MailPoet\Models\NewsletterOptionField;
|
use MailPoet\Models\NewsletterOptionField;
|
||||||
@@ -9,9 +12,6 @@ use MailPoet\Models\NewsletterSegment;
|
|||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\Segment;
|
use MailPoet\Models\Segment;
|
||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Models\StatisticsClicks;
|
|
||||||
use MailPoet\Models\StatisticsOpens;
|
|
||||||
use MailPoet\Models\StatisticsUnsubscribes;
|
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
use MailPoet\Util\Security;
|
use MailPoet\Util\Security;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
@@ -539,8 +539,8 @@ class NewsletterTest extends \MailPoetTest {
|
|||||||
ORM::raw_execute('TRUNCATE ' . NewsletterSegment::$_table);
|
ORM::raw_execute('TRUNCATE ' . NewsletterSegment::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . StatisticsOpens::$_table);
|
$this->truncateEntity(StatisticsClickEntity::class);
|
||||||
ORM::raw_execute('TRUNCATE ' . StatisticsClicks::$_table);
|
$this->truncateEntity(StatisticsOpenEntity::class);
|
||||||
ORM::raw_execute('TRUNCATE ' . StatisticsUnsubscribes::$_table);
|
$this->truncateEntity(StatisticsUnsubscribeEntity::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,31 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace MailPoet\Test\Models;
|
|
||||||
|
|
||||||
use MailPoet\Models\StatisticsUnsubscribes;
|
|
||||||
|
|
||||||
class StatisticsUnsubscribesTest extends \MailPoetTest {
|
|
||||||
public function testItCanGetExistingStatisticsRecord() {
|
|
||||||
$unsubscribeStatistics = StatisticsUnsubscribes::create();
|
|
||||||
$unsubscribeStatistics->newsletterId = 123;
|
|
||||||
$unsubscribeStatistics->subscriberId = 456;
|
|
||||||
$unsubscribeStatistics->queueId = 789;
|
|
||||||
$unsubscribeStatistics->save();
|
|
||||||
$unsubscribeStatistics = StatisticsUnsubscribes::getOrCreate(456, 123, 789);
|
|
||||||
expect($unsubscribeStatistics->newsletterId)->equals(123);
|
|
||||||
expect($unsubscribeStatistics->subscriberId)->equals(456);
|
|
||||||
expect($unsubscribeStatistics->queueId)->equals(789);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testItCanCreateNewStatisticsRecord() {
|
|
||||||
expect(count(StatisticsUnsubscribes::findMany()))->equals(0);
|
|
||||||
$unsubscribeStatistics = StatisticsUnsubscribes::getOrCreate(456, 123, 789);
|
|
||||||
expect($unsubscribeStatistics->newsletterId)->equals(123);
|
|
||||||
expect($unsubscribeStatistics->subscriberId)->equals(456);
|
|
||||||
expect($unsubscribeStatistics->queueId)->equals(789);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function _after() {
|
|
||||||
StatisticsUnsubscribes::deleteMany();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
namespace MailPoet\Test\Statistics\Track;
|
namespace MailPoet\Test\Statistics\Track;
|
||||||
|
|
||||||
use MailPoet\DI\ContainerWrapper;
|
use MailPoet\Entities\StatisticsUnsubscribeEntity;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Models\StatisticsUnsubscribes;
|
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
|
use MailPoet\Statistics\StatisticsUnsubscribesRepository;
|
||||||
use MailPoet\Statistics\Track\Unsubscribes;
|
use MailPoet\Statistics\Track\Unsubscribes;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
@@ -15,6 +15,9 @@ class UnsubscribesTest extends \MailPoetTest {
|
|||||||
/** @var Unsubscribes */
|
/** @var Unsubscribes */
|
||||||
private $unsubscribes;
|
private $unsubscribes;
|
||||||
|
|
||||||
|
/** @var StatisticsUnsubscribesRepository */
|
||||||
|
private $statisticsUnsubscribesRepository;
|
||||||
|
|
||||||
public $queue;
|
public $queue;
|
||||||
public $subscriber;
|
public $subscriber;
|
||||||
public $newsletter;
|
public $newsletter;
|
||||||
@@ -38,7 +41,8 @@ class UnsubscribesTest extends \MailPoetTest {
|
|||||||
$queue->updateProcessedSubscribers([$subscriber->id]);
|
$queue->updateProcessedSubscribers([$subscriber->id]);
|
||||||
$this->queue = $queue->save();
|
$this->queue = $queue->save();
|
||||||
// instantiate class
|
// instantiate class
|
||||||
$this->unsubscribes = ContainerWrapper::getInstance()->get(Unsubscribes::class);
|
$this->unsubscribes = $this->diContainer->get(Unsubscribes::class);
|
||||||
|
$this->statisticsUnsubscribesRepository = $this->diContainer->get(StatisticsUnsubscribesRepository::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItTracksUnsubscribeEvent() {
|
public function testItTracksUnsubscribeEvent() {
|
||||||
@@ -47,7 +51,7 @@ class UnsubscribesTest extends \MailPoetTest {
|
|||||||
'source',
|
'source',
|
||||||
$this->queue->id
|
$this->queue->id
|
||||||
);
|
);
|
||||||
expect(count(StatisticsUnsubscribes::findMany()))->equals(1);
|
expect(count($this->statisticsUnsubscribesRepository->findAll()))->equals(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItDoesNotTrackRepeatedUnsubscribeEvents() {
|
public function testItDoesNotTrackRepeatedUnsubscribeEvents() {
|
||||||
@@ -58,13 +62,13 @@ class UnsubscribesTest extends \MailPoetTest {
|
|||||||
$this->queue->id
|
$this->queue->id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
expect(count(StatisticsUnsubscribes::findMany()))->equals(1);
|
expect(count($this->statisticsUnsubscribesRepository->findAll()))->equals(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function _after() {
|
public function _after() {
|
||||||
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . StatisticsUnsubscribes::$_table);
|
$this->truncateEntity(StatisticsUnsubscribeEntity::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,7 @@ namespace MailPoet\Test\Subscription;
|
|||||||
use Codeception\Stub;
|
use Codeception\Stub;
|
||||||
use MailPoet\Config\Renderer;
|
use MailPoet\Config\Renderer;
|
||||||
use MailPoet\DI\ContainerWrapper;
|
use MailPoet\DI\ContainerWrapper;
|
||||||
|
use MailPoet\Entities\StatisticsUnsubscribeEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Form\AssetsController;
|
use MailPoet\Form\AssetsController;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
@@ -13,7 +14,6 @@ use MailPoet\Models\NewsletterOptionField;
|
|||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\Segment;
|
use MailPoet\Models\Segment;
|
||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Models\StatisticsUnsubscribes;
|
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Models\SubscriberSegment;
|
use MailPoet\Models\SubscriberSegment;
|
||||||
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
|
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
|
||||||
@@ -193,7 +193,7 @@ class PagesTest extends \MailPoetTest {
|
|||||||
ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
|
ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
|
ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
|
ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . StatisticsUnsubscribes::$_table);
|
$this->truncateEntity(StatisticsUnsubscribeEntity::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getPages(
|
private function getPages(
|
||||||
|
Reference in New Issue
Block a user