Adjust tests, remove models and Tasks\Sending

[MAILPOET-4371]
This commit is contained in:
Sam Najian
2022-08-11 18:34:20 +02:00
committed by Veljko V
parent 873c295e99
commit b7cccdae95

View File

@@ -3,6 +3,7 @@
namespace MailPoet\Newsletter\Scheduler; namespace MailPoet\Newsletter\Scheduler;
use MailPoet\Config\Hooks; use MailPoet\Config\Hooks;
use MailPoet\Cron\Workers\SendingQueue\SendingQueue;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\NewsletterOptionEntity; use MailPoet\Entities\NewsletterOptionEntity;
use MailPoet\Entities\NewsletterOptionFieldEntity; use MailPoet\Entities\NewsletterOptionFieldEntity;
@@ -11,14 +12,15 @@ use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\ScheduledTaskSubscriberEntity; use MailPoet\Entities\ScheduledTaskSubscriberEntity;
use MailPoet\Entities\SendingQueueEntity; use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberEntity;
use MailPoet\Models\Newsletter;
use MailPoet\Models\SendingQueue;
use MailPoet\Newsletter\NewsletterPostsRepository; use MailPoet\Newsletter\NewsletterPostsRepository;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Options\NewsletterOptionsRepository; use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\Test\DataFactories\NewsletterOption as NewsletterOptionsFactory; use MailPoet\Test\DataFactories\NewsletterOption as NewsletterOptionsFactory;
use MailPoet\Test\DataFactories\ScheduledTask;
use MailPoet\Test\DataFactories\SendingQueue as SendingQueueFactory;
use MailPoet\Test\DataFactories\Newsletter as NewsletterFactory;
use MailPoet\WP\DateTime;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoet\WP\Posts as WPPosts; use MailPoet\WP\Posts as WPPosts;
use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Carbon\Carbon;
@@ -87,7 +89,7 @@ class PostNotificationTest extends \MailPoetTest {
$newsletter = $this->newslettersRepository->findOneById($newsletterId); $newsletter = $this->newslettersRepository->findOneById($newsletterId);
assert($newsletter instanceof NewsletterEntity); assert($newsletter instanceof NewsletterEntity);
$this->postNotificationScheduler->createPostNotificationSendingTask($newsletter); $this->postNotificationScheduler->createPostNotificationSendingTask($newsletter);
expect(SendingQueue::where('newsletter_id', $newsletter->getId())->findMany())->count(1); expect($this->sendingQueuesRepository->findBy(['newsletter' => $newsletter]))->count(1);
} }
public function testItCreatesPostNotificationSendingTaskIfAPausedNotificationExists() { public function testItCreatesPostNotificationSendingTaskIfAPausedNotificationExists() {
@@ -124,7 +126,7 @@ class PostNotificationTest extends \MailPoetTest {
$newsletter = $this->newslettersRepository->findOneById($newsletterId); $newsletter = $this->newslettersRepository->findOneById($newsletterId);
assert($newsletter instanceof NewsletterEntity); assert($newsletter instanceof NewsletterEntity);
$this->postNotificationScheduler->createPostNotificationSendingTask($newsletter); $this->postNotificationScheduler->createPostNotificationSendingTask($newsletter);
expect(SendingQueue::where('newsletter_id', $newsletter->getId())->findMany())->count(2); expect($this->sendingQueuesRepository->findBy(['newsletter' => $newsletter]))->count(2);
} }
public function testItDoesNotSchedulePostNotificationWhenNotificationWasAlreadySentForPost() { public function testItDoesNotSchedulePostNotificationWhenNotificationWasAlreadySentForPost() {
@@ -134,9 +136,8 @@ class PostNotificationTest extends \MailPoetTest {
// queue is not created when notification was already sent for the post // queue is not created when notification was already sent for the post
$this->postNotificationScheduler->schedulePostNotification($postId); $this->postNotificationScheduler->schedulePostNotification($postId);
$queue = SendingQueue::findTaskByNewsletterId($newsletter->getId()) $queue = $this->sendingQueuesRepository->findOneBy(['newsletter' => $newsletter]);
->findOne(); expect($queue)->null();
expect($queue)->false();
} }
public function testItSchedulesPostNotification() { public function testItSchedulesPostNotification() {
@@ -152,9 +153,9 @@ class PostNotificationTest extends \MailPoetTest {
$nextRunDate = ($currentTime->hour < 5) ? $nextRunDate = ($currentTime->hour < 5) ?
$currentTime : $currentTime :
$currentTime->addDay(); $currentTime->addDay();
$queue = SendingQueue::findTaskByNewsletterId($newsletter->getId()) $queue = $this->sendingQueuesRepository->findOneBy(['newsletter' => $newsletter]);
->findOne(); expect($queue->getTask()->getScheduledAt()->format(DateTime::DEFAULT_DATE_TIME_FORMAT))
expect($queue->scheduledAt)->startsWith($nextRunDate->format('Y-m-d 05:00')); ->equals($nextRunDate->format('Y-m-d 05:00:00'));
} }
public function testItProcessesPostNotificationScheduledForDailyDelivery() { public function testItProcessesPostNotificationScheduledForDailyDelivery() {
@@ -171,7 +172,7 @@ class PostNotificationTest extends \MailPoetTest {
$this->postNotificationScheduler->processPostNotificationSchedule($newsletter); $this->postNotificationScheduler->processPostNotificationSchedule($newsletter);
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE); $scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
assert($scheduleOption instanceof NewsletterOptionEntity); $this->assertInstanceOf(NewsletterOptionEntity::class, $scheduleOption);
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC) $currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime)) expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime))
->equals('2017-01-01 14:00:00'); ->equals('2017-01-01 14:00:00');
@@ -193,7 +194,7 @@ class PostNotificationTest extends \MailPoetTest {
$this->postNotificationScheduler->processPostNotificationSchedule($newsletter); $this->postNotificationScheduler->processPostNotificationSchedule($newsletter);
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE); $scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
assert($scheduleOption instanceof NewsletterOptionEntity); $this->assertInstanceOf(NewsletterOptionEntity::class, $scheduleOption);
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC) $currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime)) expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime))
->equals('2017-01-03 14:00:00'); ->equals('2017-01-03 14:00:00');
@@ -214,7 +215,7 @@ class PostNotificationTest extends \MailPoetTest {
$this->postNotificationScheduler->processPostNotificationSchedule($newsletter); $this->postNotificationScheduler->processPostNotificationSchedule($newsletter);
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE); $scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
assert($scheduleOption instanceof NewsletterOptionEntity); $this->assertInstanceOf(NewsletterOptionEntity::class, $scheduleOption);
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC) $currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime)) expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime))
->equals('2017-01-19 14:00:00'); ->equals('2017-01-19 14:00:00');
@@ -235,7 +236,7 @@ class PostNotificationTest extends \MailPoetTest {
$this->postNotificationScheduler->processPostNotificationSchedule($newsletter); $this->postNotificationScheduler->processPostNotificationSchedule($newsletter);
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE); $scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
assert($scheduleOption instanceof NewsletterOptionEntity); $this->assertInstanceOf(NewsletterOptionEntity::class, $scheduleOption);
$currentTime = 1485694800; // Sunday, 29 January 2017 @ 1:00pm (UTC) $currentTime = 1485694800; // Sunday, 29 January 2017 @ 1:00pm (UTC)
expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime)) expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime))
->equals('2017-02-25 14:00:00'); ->equals('2017-02-25 14:00:00');
@@ -256,7 +257,7 @@ class PostNotificationTest extends \MailPoetTest {
$this->postNotificationScheduler->processPostNotificationSchedule($newsletter); $this->postNotificationScheduler->processPostNotificationSchedule($newsletter);
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE); $scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
assert($scheduleOption instanceof NewsletterOptionEntity); $this->assertInstanceOf(NewsletterOptionEntity::class, $scheduleOption);
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC) $currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime)) expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime))
->equals('2017-01-01 13:01:00'); ->equals('2017-01-01 13:01:00');
@@ -280,8 +281,8 @@ class PostNotificationTest extends \MailPoetTest {
]; ];
wp_insert_post($postData); wp_insert_post($postData);
$queue = SendingQueue::findTaskByNewsletterId($newsletter->getId())->findOne(); $queue = $this->sendingQueuesRepository->findOneBy(['newsletter' => $newsletter]);
expect($queue)->equals(false); expect($queue)->null();
$this->_removePostNotificationHooks(); $this->_removePostNotificationHooks();
register_post_type('post', ['exclude_from_search' => false]); register_post_type('post', ['exclude_from_search' => false]);
@@ -289,8 +290,8 @@ class PostNotificationTest extends \MailPoetTest {
wp_insert_post($postData); wp_insert_post($postData);
$queue = SendingQueue::findTaskByNewsletterId($newsletter->getId())->findOne(); $queue = $this->sendingQueuesRepository->findOneBy(['newsletter' => $newsletter]);
expect($queue)->notequals(false); expect($queue)->notNull();
} }
public function testSchedulerWontRunIfUnsentNotificationHistoryExists() { public function testSchedulerWontRunIfUnsentNotificationHistoryExists() {
@@ -301,18 +302,20 @@ class PostNotificationTest extends \MailPoetTest {
NewsletterOptionFieldEntity::NAME_SCHEDULE => '* * * * *', NewsletterOptionFieldEntity::NAME_SCHEDULE => '* * * * *',
]); ]);
$notificationHistory = new NewsletterEntity(); $notificationHistory = (new NewsletterFactory())
$notificationHistory->setType(Newsletter::TYPE_NOTIFICATION_HISTORY); ->withSubject($newsletter->getSubject())
$notificationHistory->setStatus(Newsletter::STATUS_SENDING); ->withType(NewsletterEntity::TYPE_NOTIFICATION_HISTORY)
$notificationHistory->setParent($newsletter); ->withStatus(NewsletterEntity::STATUS_SENDING)
$notificationHistory->setSubject($newsletter->getSubject()); ->withParent($newsletter)
$this->newslettersRepository->persist($notificationHistory); ->create();
$this->newslettersRepository->flush();
$sendingTask = SendingTask::create(); $task = (new ScheduledTask())->create(
$sendingTask->newsletterId = $notificationHistory->getId(); SendingQueue::TASK_TYPE,
$sendingTask->status = SendingQueue::STATUS_SCHEDULED; SendingQueueEntity::STATUS_SCHEDULED, Carbon::now()
$sendingTask->save(); ->addDay()
);
(new SendingQueueFactory())->create($task, $notificationHistory);
$postData = [ $postData = [
'post_title' => 'title', 'post_title' => 'title',
@@ -324,8 +327,8 @@ class PostNotificationTest extends \MailPoetTest {
$this->hooks->setupPostNotifications(); $this->hooks->setupPostNotifications();
wp_insert_post($postData); wp_insert_post($postData);
$queue = SendingQueue::findTaskByNewsletterId($newsletter->getId())->findOne(); $queue = $this->sendingQueuesRepository->findOneBy(['newsletter' => $newsletter]);
expect($queue)->equals(false); expect($queue)->null();
} }
public function _removePostNotificationHooks() { public function _removePostNotificationHooks() {
@@ -336,17 +339,14 @@ class PostNotificationTest extends \MailPoetTest {
10 10
); );
} }
} }
private function createNewsletter(): NewsletterEntity { private function createNewsletter(): NewsletterEntity {
$newsletter = new NewsletterEntity(); return (new NewsletterFactory())
$newsletter->setType(Newsletter::TYPE_NOTIFICATION); ->withType(NewsletterEntity::TYPE_NOTIFICATION)
$newsletter->setStatus(Newsletter::STATUS_ACTIVE); ->withStatus(NewsletterEntity::STATUS_ACTIVE)
$newsletter->setSubject('Testing subject'); ->withSubject('Testing subject')
$this->newslettersRepository->persist($newsletter); ->create();
$this->newslettersRepository->flush();
return $newsletter;
} }
private function createPost(NewsletterEntity $newsletter, int $postId): NewsletterPostEntity { private function createPost(NewsletterEntity $newsletter, int $postId): NewsletterPostEntity {
@@ -367,4 +367,5 @@ class PostNotificationTest extends \MailPoetTest {
$this->truncateEntity(SubscriberEntity::class); $this->truncateEntity(SubscriberEntity::class);
$this->truncateEntity(SendingQueueEntity::class); $this->truncateEntity(SendingQueueEntity::class);
} }
} }