Refactor getNewsletterFromQueue() to use Doctrine instead of Paris
[MAILPOET-4363]
This commit is contained in:
committed by
Aschepikov
parent
4ca656a217
commit
ccbdbd3e93
@@ -15,6 +15,7 @@ use MailPoet\Logging\LoggerFactory;
|
||||
use MailPoet\Mailer\MailerError;
|
||||
use MailPoet\Mailer\MailerLog;
|
||||
use MailPoet\Mailer\MetaInfo;
|
||||
use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Models\ScheduledTask;
|
||||
use MailPoet\Models\StatisticsNewsletters as StatisticsNewslettersModel;
|
||||
use MailPoet\Models\Subscriber as SubscriberModel;
|
||||
@@ -150,12 +151,13 @@ class SendingQueue {
|
||||
['task_id' => $queue->taskId]
|
||||
);
|
||||
|
||||
$newsletter = $this->newsletterTask->getNewsletterFromQueue($queue);
|
||||
if (!$newsletter) {
|
||||
$newsletterEntity = $this->newsletterTask->getNewsletterFromQueue($queue);
|
||||
if (!$newsletterEntity) {
|
||||
return;
|
||||
}
|
||||
$newsletterEntity = $this->newslettersRepository->findOneById($newsletter->id);
|
||||
if (!$newsletterEntity) {
|
||||
|
||||
$newsletter = Newsletter::findOne($newsletterEntity->getId());
|
||||
if (!$newsletter) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -97,32 +97,32 @@ class Newsletter {
|
||||
$this->newsletterSegmentRepository = ContainerWrapper::getInstance()->get(NewsletterSegmentRepository::class);
|
||||
}
|
||||
|
||||
public function getNewsletterFromQueue(Sending $sendingTask) {
|
||||
public function getNewsletterFromQueue(Sending $sendingTask): ?NewsletterEntity {
|
||||
// get existing active or sending newsletter
|
||||
$sendingQueue = $sendingTask->queue();
|
||||
$newsletter = $sendingQueue->newsletter()
|
||||
->whereNull('deleted_at')
|
||||
->whereAnyIs(
|
||||
[
|
||||
['status' => NewsletterEntity::STATUS_ACTIVE],
|
||||
['status' => NewsletterEntity::STATUS_SENDING],
|
||||
]
|
||||
)
|
||||
->findOne();
|
||||
if (!$newsletter) return false;
|
||||
// if this is a notification history, get existing active or sending parent newsletter
|
||||
if ($newsletter->type == NewsletterEntity::TYPE_NOTIFICATION_HISTORY) {
|
||||
$parentNewsletter = $newsletter->parent()
|
||||
->whereNull('deleted_at')
|
||||
->whereAnyIs(
|
||||
[
|
||||
['status' => NewsletterEntity::STATUS_ACTIVE],
|
||||
['status' => NewsletterEntity::STATUS_SENDING],
|
||||
]
|
||||
)
|
||||
->findOne();
|
||||
if (!$parentNewsletter) return false;
|
||||
$sendingQueue = $sendingTask->getSendingQueueEntity();
|
||||
$newsletter = $sendingQueue->getNewsletter();
|
||||
|
||||
if (
|
||||
is_null($newsletter)
|
||||
|| $newsletter->getDeletedAt() !== null
|
||||
|| !in_array($newsletter->getStatus(), [NewsletterEntity::STATUS_ACTIVE, NewsletterEntity::STATUS_SENDING])
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// if this is a notification history, get existing active or sending parent newsletter
|
||||
if ($newsletter->getType() == NewsletterEntity::TYPE_NOTIFICATION_HISTORY) {
|
||||
$parentNewsletter = $newsletter->getParent();
|
||||
|
||||
if (
|
||||
is_null($parentNewsletter)
|
||||
|| $parentNewsletter->getDeletedAt() !== null
|
||||
|| !in_array($parentNewsletter->getStatus(), [NewsletterEntity::STATUS_ACTIVE, NewsletterEntity::STATUS_SENDING])
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return $newsletter;
|
||||
}
|
||||
|
||||
|
@@ -3,10 +3,13 @@
|
||||
namespace MailPoet\Tasks;
|
||||
|
||||
use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueAlias;
|
||||
use MailPoet\DI\ContainerWrapper;
|
||||
use MailPoet\Entities\SendingQueueEntity;
|
||||
use MailPoet\Logging\LoggerFactory;
|
||||
use MailPoet\Models\ScheduledTask;
|
||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||
use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||
use MailPoet\Util\Helpers;
|
||||
|
||||
/**
|
||||
@@ -188,6 +191,13 @@ class Sending {
|
||||
return $this->queue;
|
||||
}
|
||||
|
||||
public function getSendingQueueEntity(): SendingQueueEntity {
|
||||
$sendingQueuesRepository = ContainerWrapper::getInstance()->get(SendingQueuesRepository::class);
|
||||
$sendingQueueEntity = $sendingQueuesRepository->findOneById($this->queue->id);
|
||||
|
||||
return $sendingQueueEntity;
|
||||
}
|
||||
|
||||
public function task() {
|
||||
return $this->task;
|
||||
}
|
||||
|
@@ -75,7 +75,6 @@ class NewsletterTest extends \MailPoetTest {
|
||||
$this->parentNewsletter->type = NewsletterEntity::TYPE_STANDARD;
|
||||
$this->parentNewsletter->status = NewsletterEntity::STATUS_ACTIVE;
|
||||
$this->parentNewsletter->subject = 'parent newsletter';
|
||||
$this->parentNewsletter->body = 'parent body';
|
||||
$this->parentNewsletter->preheader = '';
|
||||
$this->parentNewsletter->save();
|
||||
$this->sendingTask = SendingTask::create();
|
||||
@@ -93,59 +92,57 @@ class NewsletterTest extends \MailPoetTest {
|
||||
|
||||
public function testItDoesNotGetNewsletterWhenStatusIsNotActiveOrSending() {
|
||||
// draft or any other status return false
|
||||
$newsletter = $this->newsletter;
|
||||
$newsletter->status = NewsletterEntity::STATUS_DRAFT;
|
||||
$newsletter->save();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->false();
|
||||
$newsletterEntity = $this->newslettersRepository->findOneById($this->newsletter->id);
|
||||
$this->assertInstanceOf(NewsletterEntity::class, $newsletterEntity);
|
||||
$newsletterEntity->setStatus(NewsletterEntity::STATUS_DRAFT);
|
||||
$this->newslettersRepository->persist($newsletterEntity);
|
||||
$this->newslettersRepository->flush();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->null();
|
||||
|
||||
// active or sending statuses return newsletter
|
||||
$newsletter = $this->newsletter;
|
||||
$newsletter->status = NewsletterEntity::STATUS_ACTIVE;
|
||||
$newsletter->save();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->isInstanceOf('Mailpoet\Models\Newsletter');
|
||||
$newsletterEntity->setStatus(NewsletterEntity::STATUS_ACTIVE);
|
||||
$this->newslettersRepository->persist($newsletterEntity);
|
||||
$this->newslettersRepository->flush();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->isInstanceOf(NewsletterEntity::class);
|
||||
|
||||
$newsletter = $this->newsletter;
|
||||
$newsletter->status = NewsletterEntity::STATUS_SENDING;
|
||||
$newsletter->save();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->isInstanceOf('Mailpoet\Models\Newsletter');
|
||||
$newsletterEntity->setStatus(NewsletterEntity::STATUS_SENDING);
|
||||
$this->newslettersRepository->persist($newsletterEntity);
|
||||
$this->newslettersRepository->flush();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->isInstanceOf(NewsletterEntity::class);
|
||||
}
|
||||
|
||||
public function testItDoesNotGetDeletedNewsletter() {
|
||||
$newsletter = $this->newsletter;
|
||||
$newsletter->set_expr('deleted_at', 'NOW()');
|
||||
$newsletter->save();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->false();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->null();
|
||||
}
|
||||
|
||||
public function testItDoesNotGetNewsletterWhenParentNewsletterStatusIsNotActiveOrSending() {
|
||||
// draft or any other status return false
|
||||
$parentNewsletter = $this->parentNewsletter;
|
||||
$parentNewsletter->status = NewsletterEntity::STATUS_DRAFT;
|
||||
$parentNewsletter->save();
|
||||
$newsletter = $this->newsletter;
|
||||
$newsletter->type = NewsletterEntity::TYPE_NOTIFICATION_HISTORY;
|
||||
$newsletter->parentId = $parentNewsletter->id;
|
||||
$newsletter->save();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->false();
|
||||
$parentNewsletterEntity = $this->newslettersRepository->findOneById($this->parentNewsletter->id);
|
||||
$this->assertInstanceOf(NewsletterEntity::class, $parentNewsletterEntity);
|
||||
$parentNewsletterEntity->setStatus( NewsletterEntity::STATUS_DRAFT);
|
||||
$this->newslettersRepository->persist($parentNewsletterEntity);
|
||||
$this->newslettersRepository->flush();
|
||||
$newsletterEntity = $this->newslettersRepository->findOneById($this->newsletter->id);
|
||||
$this->assertInstanceOf(NewsletterEntity::class, $newsletterEntity);
|
||||
$newsletterEntity->setType(NewsletterEntity::TYPE_NOTIFICATION_HISTORY);
|
||||
$newsletterEntity->setParent($parentNewsletterEntity);
|
||||
$this->newslettersRepository->persist($newsletterEntity);
|
||||
$this->newslettersRepository->flush();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->null();
|
||||
|
||||
// active or sending statuses return newsletter
|
||||
$parentNewsletter = $this->parentNewsletter;
|
||||
$parentNewsletter->status = NewsletterEntity::STATUS_ACTIVE;
|
||||
$parentNewsletter->save();
|
||||
$newsletter = $this->newsletter;
|
||||
$newsletter->type = NewsletterEntity::TYPE_NOTIFICATION_HISTORY;
|
||||
$newsletter->parentId = $parentNewsletter->id;
|
||||
$newsletter->save();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->isInstanceOf('Mailpoet\Models\Newsletter');
|
||||
$parentNewsletterEntity->setStatus(NewsletterEntity::STATUS_ACTIVE);
|
||||
$this->newslettersRepository->persist($parentNewsletterEntity);
|
||||
$this->newslettersRepository->flush();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->isInstanceOf(NewsletterEntity::class);
|
||||
|
||||
$parentNewsletter = $this->parentNewsletter;
|
||||
$parentNewsletter->status = NewsletterEntity::STATUS_SENDING;
|
||||
$parentNewsletter->save();
|
||||
$newsletter = $this->newsletter;
|
||||
$newsletter->type = NewsletterEntity::TYPE_NOTIFICATION_HISTORY;
|
||||
$newsletter->parentId = $parentNewsletter->id;
|
||||
$newsletter->save();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->isInstanceOf('Mailpoet\Models\Newsletter');
|
||||
$parentNewsletterEntity->setStatus(NewsletterEntity::STATUS_SENDING);
|
||||
$this->newslettersRepository->persist($parentNewsletterEntity);
|
||||
$this->newslettersRepository->flush();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->isInstanceOf(NewsletterEntity::class);
|
||||
}
|
||||
|
||||
public function testItDoesNotGetDeletedNewsletterWhenParentNewsletterIsDeleted() {
|
||||
@@ -156,7 +153,7 @@ class NewsletterTest extends \MailPoetTest {
|
||||
$newsletter->type = NewsletterEntity::TYPE_NOTIFICATION_HISTORY;
|
||||
$newsletter->parentId = $parentNewsletter->id;
|
||||
$newsletter->save();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->false();
|
||||
expect($this->newsletterTask->getNewsletterFromQueue($this->sendingTask))->null();
|
||||
}
|
||||
|
||||
public function testItReturnsNewsletterObjectWhenRenderedNewsletterBodyExistsInTheQueue() {
|
||||
|
Reference in New Issue
Block a user