Remove SendingTask usages from AutomaticEmailTest

[MAILPOET-4372]
This commit is contained in:
Jan Lysý
2022-09-28 13:13:13 +02:00
committed by Aschepikov
parent d141f23bb4
commit 745ff6af2a
2 changed files with 41 additions and 15 deletions

View File

@@ -47,6 +47,22 @@ class ScheduledTasksRepository extends Repository {
->getResult(); ->getResult();
} }
/**
* @param NewsletterEntity $newsletter
*/
public function findOneByNewsletter(NewsletterEntity $newsletter): ?ScheduledTaskEntity {
$scheduledTask = $this->doctrineRepository->createQueryBuilder('st')
->join(SendingQueueEntity::class, 'sq', Join::WITH, 'st = sq.task')
->andWhere('sq.newsletter = :newsletter')
->orderBy('sq.updatedAt', 'desc')
->setMaxResults(1)
->setParameter('newsletter', $newsletter)
->getQuery()
->getOneOrNullResult();
// for phpstan because it detects mixed instead of entity
return ($scheduledTask instanceof ScheduledTaskEntity) ? $scheduledTask : null;
}
/** /**
* @param NewsletterEntity $newsletter * @param NewsletterEntity $newsletter
* @return ScheduledTaskEntity[] * @return ScheduledTaskEntity[]

View File

@@ -11,8 +11,8 @@ use MailPoet\Entities\ScheduledTaskSubscriberEntity;
use MailPoet\Entities\SendingQueueEntity; use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberEntity;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\Test\DataFactories\Newsletter as NewsletterFactory; use MailPoet\Test\DataFactories\Newsletter as NewsletterFactory;
use MailPoet\Test\DataFactories\NewsletterOption as NewsletterOptionFactory; use MailPoet\Test\DataFactories\NewsletterOption as NewsletterOptionFactory;
use MailPoet\Test\DataFactories\Subscriber as SubscriberFactory; use MailPoet\Test\DataFactories\Subscriber as SubscriberFactory;
@@ -39,11 +39,15 @@ class AutomaticEmailTest extends \MailPoetTest {
/** @var SendingQueuesRepository */ /** @var SendingQueuesRepository */
private $sendingQueuesRepository; private $sendingQueuesRepository;
/** @var ScheduledTasksRepository */
private $scheduledTasksRepository;
public function _before() { public function _before() {
parent::_before(); parent::_before();
$this->automaticEmailScheduler = $this->diContainer->get(AutomaticEmailScheduler::class); $this->automaticEmailScheduler = $this->diContainer->get(AutomaticEmailScheduler::class);
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class); $this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
$this->sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class); $this->sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class);
$this->scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class);
$this->newsletterFactory = new NewsletterFactory(); $this->newsletterFactory = new NewsletterFactory();
$this->newsletter = $this->newsletterFactory->withActiveStatus()->withAutomaticType()->create(); $this->newsletter = $this->newsletterFactory->withActiveStatus()->withAutomaticType()->create();
@@ -65,18 +69,21 @@ class AutomaticEmailTest extends \MailPoetTest {
$this->automaticEmailScheduler->createAutomaticEmailSendingTask($newsletter, $subscriber->getId()); $this->automaticEmailScheduler->createAutomaticEmailSendingTask($newsletter, $subscriber->getId());
// new scheduled task should be created // new scheduled task should be created
$task = SendingTask::getByNewsletterId($newsletter->getId()); $task = $this->scheduledTasksRepository->findOneByNewsletter($newsletter);
$currentTime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); $currentTime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
Carbon::setTestNow($currentTime); // mock carbon to return current time Carbon::setTestNow($currentTime); // mock carbon to return current time
expect($task->id)->greaterOrEquals(1); $this->assertInstanceOf(ScheduledTaskEntity::class, $task);
expect($task->priority)->equals(SendingQueueEntity::PRIORITY_MEDIUM); expect($task->getId())->greaterOrEquals(1);
expect($task->status)->equals(SendingQueueEntity::STATUS_SCHEDULED); expect($task->getPriority())->equals(SendingQueueEntity::PRIORITY_MEDIUM);
expect(Carbon::parse($task->scheduledAt)->format('Y-m-d H:i')) expect($task->getStatus())->equals(SendingQueueEntity::STATUS_SCHEDULED);
$scheduledAt = $task->getScheduledAt();
$this->assertInstanceOf(\DateTimeInterface::class, $scheduledAt);
expect(Carbon::parse($scheduledAt)->format('Y-m-d H:i'))
->equals($currentTime->addHours(2)->format('Y-m-d H:i')); ->equals($currentTime->addHours(2)->format('Y-m-d H:i'));
// task should have 1 associated user // task should have 1 associated user
$subscribers = $task->subscribers()->findMany(); $subscribers = $task->getSubscribers()->toArray();
expect($subscribers)->count(1); expect($subscribers)->count(1);
expect($subscribers[0]->id)->equals($subscriber->getId()); expect($subscribers[0]->getSubscriber())->equals($subscriber);
} }
public function testItAddsMetaToSendingQueueWhenCreatingAutomaticEmailSendingTask() { public function testItAddsMetaToSendingQueueWhenCreatingAutomaticEmailSendingTask() {
@@ -96,18 +103,21 @@ class AutomaticEmailTest extends \MailPoetTest {
$newsletter = $this->newslettersRepository->findOneById($this->newsletter->getId()); $newsletter = $this->newslettersRepository->findOneById($this->newsletter->getId());
$this->assertInstanceOf(NewsletterEntity::class, $newsletter); $this->assertInstanceOf(NewsletterEntity::class, $newsletter);
$this->automaticEmailScheduler->createAutomaticEmailSendingTask($newsletter, $subscriber = null, $meta = null); $this->automaticEmailScheduler->createAutomaticEmailSendingTask($newsletter, null);
// new scheduled task should be created // new scheduled task should be created
$task = SendingTask::getByNewsletterId($newsletter->getId()); $task = $this->scheduledTasksRepository->findOneByNewsletter($newsletter);
$currentTime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); $currentTime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
$this->assertInstanceOf(ScheduledTaskEntity::class, $task);
Carbon::setTestNow($currentTime); // mock carbon to return current time Carbon::setTestNow($currentTime); // mock carbon to return current time
expect($task->id)->greaterOrEquals(1); expect($task->getId())->greaterOrEquals(1);
expect($task->priority)->equals(SendingQueueEntity::PRIORITY_MEDIUM); expect($task->getPriority())->equals(SendingQueueEntity::PRIORITY_MEDIUM);
expect($task->status)->equals(SendingQueueEntity::STATUS_SCHEDULED); expect($task->getStatus())->equals(SendingQueueEntity::STATUS_SCHEDULED);
expect(Carbon::parse($task->scheduledAt)->format('Y-m-d H:i')) $scheduledAt = $task->getScheduledAt();
$this->assertInstanceOf(\DateTimeInterface::class, $scheduledAt);
expect(Carbon::parse($scheduledAt)->format('Y-m-d H:i'))
->equals($currentTime->addHours(2)->format('Y-m-d H:i')); ->equals($currentTime->addHours(2)->format('Y-m-d H:i'));
// task should not have any subscribers // task should not have any subscribers
$subscribers = $task->subscribers()->findMany(); $subscribers = $task->getSubscribers();
expect($subscribers)->count(0); expect($subscribers)->count(0);
} }