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();
}
/**
* @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
* @return ScheduledTaskEntity[]

View File

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