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:
@@ -48,6 +48,19 @@ class SendingQueuesRepository extends Repository {
|
|||||||
->getOneOrNullResult();
|
->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 {
|
public function getTaskIdsByNewsletterId(int $newsletterId): array {
|
||||||
$results = $this->entityManager->createQueryBuilder()
|
$results = $this->entityManager->createQueryBuilder()
|
||||||
->select('IDENTITY(s.task) as task_id')
|
->select('IDENTITY(s.task) as task_id')
|
||||||
|
@@ -92,6 +92,29 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
|
|||||||
expect($newsletter->getStatus())->equals(NewsletterEntity::STATUS_SENDING);
|
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) {
|
private function createTaskSubscriber(ScheduledTaskEntity $task, SubscriberEntity $subscriber, int $processed) {
|
||||||
$taskSubscriber = new ScheduledTaskSubscriberEntity(
|
$taskSubscriber = new ScheduledTaskSubscriberEntity(
|
||||||
$task,
|
$task,
|
||||||
@@ -107,11 +130,13 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
|
|||||||
return $task;
|
return $task;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function createQueue(ScheduledTaskEntity $task): SendingQueueEntity {
|
private function createQueue(ScheduledTaskEntity $task, NewsletterEntity $newsletter = null): SendingQueueEntity {
|
||||||
$newsletter = new NewsletterEntity();
|
if (!$newsletter) {
|
||||||
$newsletter->setType('type');
|
$newsletter = new NewsletterEntity();
|
||||||
$newsletter->setSubject('Subject');
|
$newsletter->setType('type');
|
||||||
$this->entityManager->persist($newsletter);
|
$newsletter->setSubject('Subject');
|
||||||
|
$this->entityManager->persist($newsletter);
|
||||||
|
}
|
||||||
|
|
||||||
$queue = new SendingQueueEntity();
|
$queue = new SendingQueueEntity();
|
||||||
$queue->setNewsletter($newsletter);
|
$queue->setNewsletter($newsletter);
|
||||||
@@ -134,5 +159,6 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
|
|||||||
$this->truncateEntity(SubscriberEntity::class);
|
$this->truncateEntity(SubscriberEntity::class);
|
||||||
$this->truncateEntity(ScheduledTaskEntity::class);
|
$this->truncateEntity(ScheduledTaskEntity::class);
|
||||||
$this->truncateEntity(ScheduledTaskSubscriberEntity::class);
|
$this->truncateEntity(ScheduledTaskSubscriberEntity::class);
|
||||||
|
$this->truncateEntity(SendingQueueEntity::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user