Remove usages of StatisticsUnsubscribes model

[MAILPOET-3819]
This commit is contained in:
wxa
2021-10-19 16:01:58 +03:00
committed by Veljko V
parent ba15b9b251
commit bacfd3c4dc
6 changed files with 94 additions and 61 deletions

View File

@@ -3,7 +3,11 @@
namespace MailPoet\Statistics;
use MailPoet\Doctrine\Repository;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Entities\StatisticsUnsubscribeEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoetVendor\Carbon\Carbon;
/**
* @extends Repository<StatisticsUnsubscribeEntity>
@@ -12,4 +16,27 @@ class StatisticsUnsubscribesRepository extends Repository {
protected function getEntityClassName() {
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;
}
}

View File

@@ -4,8 +4,9 @@ namespace MailPoet\Cron\Workers\StatsNotifications;
use MailPoet\Config\Renderer;
use MailPoet\Cron\CronHelper;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\StatisticsUnsubscribeEntity;
use MailPoet\Entities\StatsNotificationEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\MetaInfo;
use MailPoet\Models\Newsletter;
@@ -14,9 +15,11 @@ use MailPoet\Models\ScheduledTask;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\StatisticsClicks;
use MailPoet\Models\StatisticsOpens;
use MailPoet\Models\StatisticsUnsubscribes;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository;
use MailPoet\Settings\SettingsController;
use MailPoet\Statistics\StatisticsUnsubscribesRepository;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
use MailPoetVendor\Idiorm\ORM;
@@ -51,19 +54,28 @@ class WorkerTest extends \MailPoetTest {
/** @var NewsletterLinkRepository */
private $newsletterLinkRepository;
/** @var NewslettersRepository */
private $newslettersRepository;
/** @var SendingQueuesRepository */
private $sendingQueuesRepository;
/** @var StatisticsUnsubscribesRepository */
private $statisticsUnsubscribesRepository;
public function _before() {
parent::_before();
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->repository = ContainerWrapper::getInstance()->get(StatsNotificationsRepository::class);
$this->newsletterLinkRepository = ContainerWrapper::getInstance()->get(NewsletterLinkRepository::class);
$this->cleanup();
$this->repository = $this->diContainer->get(StatsNotificationsRepository::class);
$this->newsletterLinkRepository = $this->diContainer->get(NewsletterLinkRepository::class);
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
$this->sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class);
$this->statisticsUnsubscribesRepository = $this->diContainer->get(StatisticsUnsubscribesRepository::class);
$this->repository->truncate();
$this->mailer = $this->createMock(Mailer::class);
$this->renderer = $this->createMock(Renderer::class);
$this->settings = SettingsController::getInstance();
$this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class);
$this->cronHelper = $this->diContainer->get(CronHelper::class);
$this->statsNotifications = new Worker(
$this->mailer,
$this->renderer,
@@ -72,10 +84,10 @@ class WorkerTest extends \MailPoetTest {
new MetaInfo,
$this->repository,
$this->newsletterLinkRepository,
ContainerWrapper::getInstance()->get(NewsletterStatisticsRepository::class),
$this->diContainer->get(NewsletterStatisticsRepository::class),
$this->entityManager,
ContainerWrapper::getInstance()->get(SubscribersFeature::class),
ContainerWrapper::getInstance()->get(SubscribersRepository::class)
$this->diContainer->get(SubscribersFeature::class),
$this->diContainer->get(SubscribersRepository::class)
);
$this->settings->set(Worker::SETTINGS_KEY, [
'enabled' => true,
@@ -156,10 +168,10 @@ class WorkerTest extends \MailPoetTest {
'queue_id' => $this->queue->id(),
'created_at' => '2017-01-02 21:23:45',
]);
StatisticsUnsubscribes::createOrUpdate([
'subscriber_id' => '12',
'newsletter_id' => $this->newsletter->id(),
'queue_id' => $this->queue->id(),
$this->statisticsUnsubscribesRepository->createOrUpdate([
'subscriber' => $this->createSubscriber(),
'newsletter' => $this->newslettersRepository->findOneById($this->newsletter->id()),
'queue' => $this->sendingQueuesRepository->findOneById($this->queue->id()),
'created_at' => '2017-01-02 21:23:45',
]);
}
@@ -311,4 +323,25 @@ class WorkerTest extends \MailPoetTest {
$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();
}
}

View File

@@ -2,6 +2,9 @@
namespace MailPoet\Test\Models;
use MailPoet\Entities\StatisticsClickEntity;
use MailPoet\Entities\StatisticsOpenEntity;
use MailPoet\Entities\StatisticsUnsubscribeEntity;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField;
@@ -9,9 +12,6 @@ use MailPoet\Models\NewsletterSegment;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Segment;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\StatisticsClicks;
use MailPoet\Models\StatisticsOpens;
use MailPoet\Models\StatisticsUnsubscribes;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\Util\Security;
use MailPoet\WP\Functions as WPFunctions;
@@ -539,8 +539,8 @@ class NewsletterTest extends \MailPoetTest {
ORM::raw_execute('TRUNCATE ' . NewsletterSegment::$_table);
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
ORM::raw_execute('TRUNCATE ' . StatisticsOpens::$_table);
ORM::raw_execute('TRUNCATE ' . StatisticsClicks::$_table);
ORM::raw_execute('TRUNCATE ' . StatisticsUnsubscribes::$_table);
$this->truncateEntity(StatisticsClickEntity::class);
$this->truncateEntity(StatisticsOpenEntity::class);
$this->truncateEntity(StatisticsUnsubscribeEntity::class);
}
}

View File

@@ -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();
}
}

View File

@@ -2,11 +2,11 @@
namespace MailPoet\Test\Statistics\Track;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\StatisticsUnsubscribeEntity;
use MailPoet\Models\Newsletter;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\StatisticsUnsubscribes;
use MailPoet\Models\Subscriber;
use MailPoet\Statistics\StatisticsUnsubscribesRepository;
use MailPoet\Statistics\Track\Unsubscribes;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoetVendor\Idiorm\ORM;
@@ -15,6 +15,9 @@ class UnsubscribesTest extends \MailPoetTest {
/** @var Unsubscribes */
private $unsubscribes;
/** @var StatisticsUnsubscribesRepository */
private $statisticsUnsubscribesRepository;
public $queue;
public $subscriber;
public $newsletter;
@@ -38,7 +41,8 @@ class UnsubscribesTest extends \MailPoetTest {
$queue->updateProcessedSubscribers([$subscriber->id]);
$this->queue = $queue->save();
// 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() {
@@ -47,7 +51,7 @@ class UnsubscribesTest extends \MailPoetTest {
'source',
$this->queue->id
);
expect(count(StatisticsUnsubscribes::findMany()))->equals(1);
expect(count($this->statisticsUnsubscribesRepository->findAll()))->equals(1);
}
public function testItDoesNotTrackRepeatedUnsubscribeEvents() {
@@ -58,13 +62,13 @@ class UnsubscribesTest extends \MailPoetTest {
$this->queue->id
);
}
expect(count(StatisticsUnsubscribes::findMany()))->equals(1);
expect(count($this->statisticsUnsubscribesRepository->findAll()))->equals(1);
}
public function _after() {
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
ORM::raw_execute('TRUNCATE ' . StatisticsUnsubscribes::$_table);
$this->truncateEntity(StatisticsUnsubscribeEntity::class);
}
}

View File

@@ -5,6 +5,7 @@ namespace MailPoet\Test\Subscription;
use Codeception\Stub;
use MailPoet\Config\Renderer;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\StatisticsUnsubscribeEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Form\AssetsController;
use MailPoet\Models\Newsletter;
@@ -13,7 +14,6 @@ use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Segment;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\StatisticsUnsubscribes;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
@@ -193,7 +193,7 @@ class PagesTest extends \MailPoetTest {
ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
ORM::raw_execute('TRUNCATE ' . StatisticsUnsubscribes::$_table);
$this->truncateEntity(StatisticsUnsubscribeEntity::class);
}
private function getPages(