Replace most of the uses of Newsletter model with Doctrine in NewsletterTest

[MAILPOET-4363]
This commit is contained in:
Rodrigo Primo
2022-08-23 12:59:33 -03:00
committed by Aschepikov
parent d0c65b9446
commit cc43b25b7d

View File

@ -23,6 +23,7 @@ use MailPoet\Models\NewsletterSegment;
use MailPoet\Models\SendingQueue; use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\NewsletterPostsRepository; use MailPoet\Newsletter\NewsletterPostsRepository;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Router\Router; use MailPoet\Router\Router;
use MailPoet\Settings\SettingsRepository; use MailPoet\Settings\SettingsRepository;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
@ -52,6 +53,9 @@ class NewsletterTest extends \MailPoetTest {
/** @var NewsletterLinkRepository */ /** @var NewsletterLinkRepository */
private $newsletterLinkRepository; private $newsletterLinkRepository;
/** @var NewslettersRepository */
private $newslettersRepository;
public function _before() { public function _before() {
parent::_before(); parent::_before();
$this->newsletterTask = new NewsletterTask(); $this->newsletterTask = new NewsletterTask();
@ -61,15 +65,15 @@ class NewsletterTest extends \MailPoetTest {
$this->subscriber->lastName = 'Doe'; $this->subscriber->lastName = 'Doe';
$this->subscriber->save(); $this->subscriber->save();
$this->newsletter = Newsletter::create(); $this->newsletter = Newsletter::create();
$this->newsletter->type = Newsletter::TYPE_STANDARD; $this->newsletter->type = NewsletterEntity::TYPE_STANDARD;
$this->newsletter->status = Newsletter::STATUS_ACTIVE; $this->newsletter->status = NewsletterEntity::STATUS_ACTIVE;
$this->newsletter->subject = Fixtures::get('newsletter_subject_template'); $this->newsletter->subject = Fixtures::get('newsletter_subject_template');
$this->newsletter->body = Fixtures::get('newsletter_body_template'); $this->newsletter->body = Fixtures::get('newsletter_body_template');
$this->newsletter->preheader = ''; $this->newsletter->preheader = '';
$this->newsletter->save(); $this->newsletter->save();
$this->parentNewsletter = Newsletter::create(); $this->parentNewsletter = Newsletter::create();
$this->parentNewsletter->type = Newsletter::TYPE_STANDARD; $this->parentNewsletter->type = NewsletterEntity::TYPE_STANDARD;
$this->parentNewsletter->status = Newsletter::STATUS_ACTIVE; $this->parentNewsletter->status = NewsletterEntity::STATUS_ACTIVE;
$this->parentNewsletter->subject = 'parent newsletter'; $this->parentNewsletter->subject = 'parent newsletter';
$this->parentNewsletter->body = 'parent body'; $this->parentNewsletter->body = 'parent body';
$this->parentNewsletter->preheader = ''; $this->parentNewsletter->preheader = '';
@ -78,6 +82,7 @@ class NewsletterTest extends \MailPoetTest {
$this->queue->newsletter_id = $this->newsletter->id; $this->queue->newsletter_id = $this->newsletter->id;
$this->queue->save(); $this->queue->save();
$this->loggerFactory = LoggerFactory::getInstance(); $this->loggerFactory = LoggerFactory::getInstance();
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
$this->newsletterLinkRepository = $this->diContainer->get(NewsletterLinkRepository::class); $this->newsletterLinkRepository = $this->diContainer->get(NewsletterLinkRepository::class);
} }
@ -88,18 +93,18 @@ class NewsletterTest extends \MailPoetTest {
public function testItDoesNotGetNewsletterWhenStatusIsNotActiveOrSending() { public function testItDoesNotGetNewsletterWhenStatusIsNotActiveOrSending() {
// draft or any other status return false // draft or any other status return false
$newsletter = $this->newsletter; $newsletter = $this->newsletter;
$newsletter->status = Newsletter::STATUS_DRAFT; $newsletter->status = NewsletterEntity::STATUS_DRAFT;
$newsletter->save(); $newsletter->save();
expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->false(); expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->false();
// active or sending statuses return newsletter // active or sending statuses return newsletter
$newsletter = $this->newsletter; $newsletter = $this->newsletter;
$newsletter->status = Newsletter::STATUS_ACTIVE; $newsletter->status = NewsletterEntity::STATUS_ACTIVE;
$newsletter->save(); $newsletter->save();
expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->isInstanceOf('Mailpoet\Models\Newsletter'); expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->isInstanceOf('Mailpoet\Models\Newsletter');
$newsletter = $this->newsletter; $newsletter = $this->newsletter;
$newsletter->status = Newsletter::STATUS_SENDING; $newsletter->status = NewsletterEntity::STATUS_SENDING;
$newsletter->save(); $newsletter->save();
expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->isInstanceOf('Mailpoet\Models\Newsletter'); expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->isInstanceOf('Mailpoet\Models\Newsletter');
} }
@ -114,29 +119,29 @@ class NewsletterTest extends \MailPoetTest {
public function testItDoesNotGetNewsletterWhenParentNewsletterStatusIsNotActiveOrSending() { public function testItDoesNotGetNewsletterWhenParentNewsletterStatusIsNotActiveOrSending() {
// draft or any other status return false // draft or any other status return false
$parentNewsletter = $this->parentNewsletter; $parentNewsletter = $this->parentNewsletter;
$parentNewsletter->status = Newsletter::STATUS_DRAFT; $parentNewsletter->status = NewsletterEntity::STATUS_DRAFT;
$parentNewsletter->save(); $parentNewsletter->save();
$newsletter = $this->newsletter; $newsletter = $this->newsletter;
$newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY; $newsletter->type = NewsletterEntity::TYPE_NOTIFICATION_HISTORY;
$newsletter->parentId = $parentNewsletter->id; $newsletter->parentId = $parentNewsletter->id;
$newsletter->save(); $newsletter->save();
expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->false(); expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->false();
// active or sending statuses return newsletter // active or sending statuses return newsletter
$parentNewsletter = $this->parentNewsletter; $parentNewsletter = $this->parentNewsletter;
$parentNewsletter->status = Newsletter::STATUS_ACTIVE; $parentNewsletter->status = NewsletterEntity::STATUS_ACTIVE;
$parentNewsletter->save(); $parentNewsletter->save();
$newsletter = $this->newsletter; $newsletter = $this->newsletter;
$newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY; $newsletter->type = NewsletterEntity::TYPE_NOTIFICATION_HISTORY;
$newsletter->parentId = $parentNewsletter->id; $newsletter->parentId = $parentNewsletter->id;
$newsletter->save(); $newsletter->save();
expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->isInstanceOf('Mailpoet\Models\Newsletter'); expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->isInstanceOf('Mailpoet\Models\Newsletter');
$parentNewsletter = $this->parentNewsletter; $parentNewsletter = $this->parentNewsletter;
$parentNewsletter->status = Newsletter::STATUS_SENDING; $parentNewsletter->status = NewsletterEntity::STATUS_SENDING;
$parentNewsletter->save(); $parentNewsletter->save();
$newsletter = $this->newsletter; $newsletter = $this->newsletter;
$newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY; $newsletter->type = NewsletterEntity::TYPE_NOTIFICATION_HISTORY;
$newsletter->parentId = $parentNewsletter->id; $newsletter->parentId = $parentNewsletter->id;
$newsletter->save(); $newsletter->save();
expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->isInstanceOf('Mailpoet\Models\Newsletter'); expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->isInstanceOf('Mailpoet\Models\Newsletter');
@ -147,7 +152,7 @@ class NewsletterTest extends \MailPoetTest {
$parentNewsletter->set_expr('deleted_at', 'NOW()'); $parentNewsletter->set_expr('deleted_at', 'NOW()');
$parentNewsletter->save(); $parentNewsletter->save();
$newsletter = $this->newsletter; $newsletter = $this->newsletter;
$newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY; $newsletter->type = NewsletterEntity::TYPE_NOTIFICATION_HISTORY;
$newsletter->parentId = $parentNewsletter->id; $newsletter->parentId = $parentNewsletter->id;
$newsletter->save(); $newsletter->save();
expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->false(); expect($this->newsletterTask->getNewsletterFromQueue($this->queue))->false();
@ -211,7 +216,7 @@ class NewsletterTest extends \MailPoetTest {
public function testItReturnsFalseAndDeletesNewsletterWhenPostNotificationContainsNoPosts() { public function testItReturnsFalseAndDeletesNewsletterWhenPostNotificationContainsNoPosts() {
$newsletter = $this->newsletter; $newsletter = $this->newsletter;
$newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY; $newsletter->type = NewsletterEntity::TYPE_NOTIFICATION_HISTORY;
$newsletter->parentId = $newsletter->id; $newsletter->parentId = $newsletter->id;
// replace post id data tag with something else // replace post id data tag with something else
$newsletter->body = str_replace('data-post-id', 'id', $newsletter->getBodyString()); $newsletter->body = str_replace('data-post-id', 'id', $newsletter->getBodyString());
@ -219,14 +224,15 @@ class NewsletterTest extends \MailPoetTest {
// returned result is false // returned result is false
$result = $this->newsletterTask->preProcessNewsletter($this->newsletter, $this->queue); $result = $this->newsletterTask->preProcessNewsletter($this->newsletter, $this->queue);
expect($result)->false(); expect($result)->false();
// newsletter is deleted // newsletter is deleted.
$newsletter = Newsletter::findOne($newsletter->id); $this->entityManager->clear(); // needed while part of the code uses Paris models and part uses Doctrine
expect($newsletter)->false(); $newsletter = $this->newslettersRepository->findOneById($newsletter->id);
expect($newsletter)->null();
} }
public function testItSavesNewsletterPosts() { public function testItSavesNewsletterPosts() {
$newsletterPostRepository = ContainerWrapper::getInstance()->get(NewsletterPostsRepository::class); $newsletterPostRepository = ContainerWrapper::getInstance()->get(NewsletterPostsRepository::class);
$this->newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY; $this->newsletter->type = NewsletterEntity::TYPE_NOTIFICATION_HISTORY;
$this->newsletter->parentId = $this->newsletter->id; $this->newsletter->parentId = $this->newsletter->id;
$postsTask = $this->make(PostsTask::class, [ $postsTask = $this->make(PostsTask::class, [
'getAlcPostsCount' => 1, 'getAlcPostsCount' => 1,
@ -243,38 +249,46 @@ class NewsletterTest extends \MailPoetTest {
} }
public function testItUpdatesStatusAndSetsSentAtDateOnlyForStandardAndPostNotificationNewsletters() { public function testItUpdatesStatusAndSetsSentAtDateOnlyForStandardAndPostNotificationNewsletters() {
$newsletter = $this->newsletter; $newsletter = $this->newslettersRepository->findOneById($this->newsletter->id);
$this->assertInstanceOf(NewsletterEntity::class, $newsletter);
$queue = new \stdClass(); $queue = new \stdClass();
$queue->processedAt = date('Y-m-d H:i:s'); $queue->processedAt = date('Y-m-d H:i:s');
// newsletter type is 'standard' // newsletter type is 'standard'
$newsletter->type = Newsletter::TYPE_STANDARD; $newsletter->setType(NewsletterEntity::TYPE_STANDARD);
$newsletter->status = 'not_sent'; $newsletter->setStatus('not_sent');
$newsletter->save(); $this->newslettersRepository->persist($newsletter);
$this->newslettersRepository->flush();
$this->newsletterTask->markNewsletterAsSent($newsletter, $queue); $this->newsletterTask->markNewsletterAsSent($newsletter, $queue);
$updatedNewsletter = Newsletter::findOne($newsletter->id); $updatedNewsletter = $this->newslettersRepository->findOneById($newsletter->getId());
assert($updatedNewsletter instanceof Newsletter); assert($updatedNewsletter instanceof NewsletterEntity);
expect($updatedNewsletter->status)->equals(Newsletter::STATUS_SENT); expect($updatedNewsletter->getStatus())->equals(NewsletterEntity::STATUS_SENT);
expect($updatedNewsletter->sentAt)->equals($queue->processedAt); $sentAt = $updatedNewsletter->getSentAt();
$this->assertInstanceOf(\DateTime::class, $sentAt);
expect($sentAt->format('Y-m-d H:i:s'))->equals($queue->processedAt);
// newsletter type is 'notification history' // newsletter type is 'notification history'
$newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY; $newsletter->setType(NewsletterEntity::TYPE_NOTIFICATION_HISTORY);
$newsletter->status = 'not_sent'; $newsletter->setStatus('not_sent');
$newsletter->save(); $this->newslettersRepository->persist($newsletter);
$this->newslettersRepository->flush();
$this->newsletterTask->markNewsletterAsSent($newsletter, $queue); $this->newsletterTask->markNewsletterAsSent($newsletter, $queue);
$updatedNewsletter = Newsletter::findOne($newsletter->id); $updatedNewsletter = $this->newslettersRepository->findOneById($newsletter->getId());
assert($updatedNewsletter instanceof Newsletter); assert($updatedNewsletter instanceof NewsletterEntity);
expect($updatedNewsletter->status)->equals(Newsletter::STATUS_SENT); expect($updatedNewsletter->getStatus())->equals(NewsletterEntity::STATUS_SENT);
expect($updatedNewsletter->sentAt)->equals($queue->processedAt); $sentAt = $updatedNewsletter->getSentAt();
$this->assertInstanceOf(\DateTime::class, $sentAt);
expect($sentAt->format('Y-m-d H:i:s'))->equals($queue->processedAt);
// all other newsletter types // all other newsletter types
$newsletter->type = Newsletter::TYPE_WELCOME; $newsletter->setType(NewsletterEntity::TYPE_WELCOME);
$newsletter->status = 'not_sent'; $newsletter->setStatus('not_sent');
$newsletter->save(); $this->newslettersRepository->persist($newsletter);
$this->newslettersRepository->flush();
$this->newsletterTask->markNewsletterAsSent($newsletter, $queue); $this->newsletterTask->markNewsletterAsSent($newsletter, $queue);
$updatedNewsletter = Newsletter::findOne($newsletter->id); $updatedNewsletter = $this->newslettersRepository->findOneById($newsletter->getId());
assert($updatedNewsletter instanceof Newsletter); assert($updatedNewsletter instanceof NewsletterEntity);
expect($updatedNewsletter->status)->notEquals(Newsletter::STATUS_SENT); expect($updatedNewsletter->getStatus())->notEquals(NewsletterEntity::STATUS_SENT);
} }
public function testItDoesNotRenderSubscriberShortcodeInSubjectWhenPreprocessingNewsletter() { public function testItDoesNotRenderSubscriberShortcodeInSubjectWhenPreprocessingNewsletter() {