Create SendingQueuesRepository::countAllByNewsletterAndTaskStatus()

This method will be used in a subsequent commit to replace some of the
usages of the method SendingQueue::findTaskByNewsletterId() as part of
the refactor from Paris to Doctrine.

[MAILPOET-4138]
This commit is contained in:
Rodrigo Primo
2022-04-28 14:19:47 -03:00
committed by Veljko V
parent abd4c7b52d
commit dd6cbbbbce
2 changed files with 44 additions and 5 deletions

View File

@@ -48,6 +48,19 @@ class SendingQueuesRepository extends Repository {
->getOneOrNullResult();
}
public function countAllByNewsletterAndTaskStatus(NewsletterEntity $newsletter, string $status): int {
return intval($this->entityManager->createQueryBuilder()
->select('count(s.task)')
->from(SendingQueueEntity::class, 's')
->join('s.task', 't')
->where('t.status = :status')
->andWhere('s.newsletter = :newsletter')
->setParameter('status', $status)
->setParameter('newsletter', $newsletter)
->getQuery()
->getSingleScalarResult());
}
public function getTaskIdsByNewsletterId(int $newsletterId): array {
$results = $this->entityManager->createQueryBuilder()
->select('IDENTITY(s.task) as task_id')

View File

@@ -92,6 +92,29 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
expect($newsletter->getStatus())->equals(NewsletterEntity::STATUS_SENDING);
}
public function testItReturnsCountOfQueuesByNewsletterAndTaskStatus() {
$taskStatus = ScheduledTaskEntity::STATUS_PAUSED;
$task1 = $this->createTask();
$task1->setStatus($taskStatus);
$queue1 = $this->createQueue($task1);
$newsletter = $queue1->getNewsletter();
$task2 = $this->createTask();
$task2->setStatus($taskStatus);
$this->createQueue($task2, $newsletter);
$task3 = $this->createTask();
$task3->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED);
$this->createQueue($task3, $newsletter);
$this->entityManager->flush();
$this->assertInstanceOf(NewsletterEntity::class, $newsletter);
// should return the two queues with tasks of the type STATUS_PAUSED and exclude the queue with task of the type STATUS_SCHEDULED
$this->assertSame(2, $this->repository->countAllByNewsletterAndTaskStatus($newsletter, $taskStatus));
}
private function createTaskSubscriber(ScheduledTaskEntity $task, SubscriberEntity $subscriber, int $processed) {
$taskSubscriber = new ScheduledTaskSubscriberEntity(
$task,
@@ -107,11 +130,13 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
return $task;
}
private function createQueue(ScheduledTaskEntity $task): SendingQueueEntity {
private function createQueue(ScheduledTaskEntity $task, NewsletterEntity $newsletter = null): SendingQueueEntity {
if (!$newsletter) {
$newsletter = new NewsletterEntity();
$newsletter->setType('type');
$newsletter->setSubject('Subject');
$this->entityManager->persist($newsletter);
}
$queue = new SendingQueueEntity();
$queue->setNewsletter($newsletter);
@@ -134,5 +159,6 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
$this->truncateEntity(SubscriberEntity::class);
$this->truncateEntity(ScheduledTaskEntity::class);
$this->truncateEntity(ScheduledTaskSubscriberEntity::class);
$this->truncateEntity(SendingQueueEntity::class);
}
}