Delete also task subscribers when fixing orphaned scheduled tasks
[MAILPOET-1587]
This commit is contained in:
committed by
Aschepikov
parent
c513befdb8
commit
34feae9f1f
@@ -4,6 +4,7 @@ namespace MailPoet\Util\DataInconsistency;
|
||||
|
||||
use MailPoet\Cron\Workers\SendingQueue\SendingQueue;
|
||||
use MailPoet\Entities\ScheduledTaskEntity;
|
||||
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||
use MailPoetVendor\Doctrine\ORM\Query;
|
||||
use MailPoetVendor\Doctrine\ORM\QueryBuilder;
|
||||
@@ -29,12 +30,27 @@ class DataInconsistencyRepository {
|
||||
->select('st.id')
|
||||
)->getResult();
|
||||
|
||||
if (!$ids) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// delete the orphaned tasks
|
||||
$qb = $this->entityManager->createQueryBuilder();
|
||||
return $qb->delete(ScheduledTaskEntity::class, 'st')
|
||||
$countDeletedTasks = $qb->delete(ScheduledTaskEntity::class, 'st')
|
||||
->where($qb->expr()->in('st.id', ':ids'))
|
||||
->setParameter('ids', array_column($ids, 'id'))
|
||||
->getQuery()
|
||||
->execute();
|
||||
|
||||
// delete the scheduled tasks subscribers
|
||||
$qb = $this->entityManager->createQueryBuilder();
|
||||
$qb->delete(ScheduledTaskSubscriberEntity::class, 'sts')
|
||||
->where($qb->expr()->in('sts.task', ':ids'))
|
||||
->setParameter('ids', array_column($ids, 'id'))
|
||||
->getQuery()
|
||||
->execute();
|
||||
|
||||
return $countDeletedTasks;
|
||||
}
|
||||
|
||||
private function buildOrphanedSendingTasksQuery(QueryBuilder $queryBuilder): Query {
|
||||
|
@@ -4,8 +4,12 @@ namespace MailPoet\Util\DataInconsistency;
|
||||
|
||||
use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueWorker;
|
||||
use MailPoet\Entities\ScheduledTaskEntity;
|
||||
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Test\DataFactories\ScheduledTask;
|
||||
use MailPoet\Test\DataFactories\ScheduledTaskSubscriber;
|
||||
use MailPoet\Test\DataFactories\SendingQueue;
|
||||
use MailPoet\Test\DataFactories\Subscriber;
|
||||
|
||||
class DataInconsistencyRepositoryTest extends \MailPoetTest {
|
||||
private DataInconsistencyRepository $repository;
|
||||
@@ -32,13 +36,28 @@ class DataInconsistencyRepositoryTest extends \MailPoetTest {
|
||||
}
|
||||
|
||||
public function testItCleansUpOrphanedSendingTasks(): void {
|
||||
(new ScheduledTask())->create(SendingQueueWorker::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||
$taskWithSubscriber = (new ScheduledTask())->create(SendingQueueWorker::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||
(new ScheduledTask())->create(SendingQueueWorker::TASK_TYPE, null);
|
||||
|
||||
$subscriber = (new Subscriber())->create();
|
||||
(new ScheduledTaskSubscriber())->createProcessed($taskWithSubscriber, $subscriber);
|
||||
|
||||
$orphanedSendingTasksCount = $this->repository->getOrphanedSendingTasksCount();
|
||||
verify($orphanedSendingTasksCount)->equals(2);
|
||||
$taskSubscriberCount = $this->entityManager->getRepository(ScheduledTaskSubscriberEntity::class)->count([]);
|
||||
verify($taskSubscriberCount)->equals(1);
|
||||
|
||||
$this->repository->cleanupOrphanedSendingTasks();
|
||||
$orphanedSendingTasksCount = $this->repository->getOrphanedSendingTasksCount();
|
||||
verify($orphanedSendingTasksCount)->equals(0);
|
||||
|
||||
// Check subscriber is not deleted
|
||||
$this->entityManager->detach($subscriber);
|
||||
$subscriber = $this->entityManager->find(SubscriberEntity::class, $subscriber->getId());
|
||||
$this->assertInstanceOf(SubscriberEntity::class, $subscriber);
|
||||
|
||||
// Check task subscriber is deleted
|
||||
$taskSubscriberCount = $this->entityManager->getRepository(ScheduledTaskSubscriberEntity::class)->count([]);
|
||||
verify($taskSubscriberCount)->equals(0);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user