Refactor Sending::removeSubscribers() to use Doctrine instead of Paris
[MAILPOET-4368]
This commit is contained in:
committed by
Aschepikov
parent
59d4ce3ba2
commit
fefaf174cd
@@ -126,6 +126,19 @@ class ScheduledTaskSubscribersRepository extends Repository {
|
||||
->execute();
|
||||
}
|
||||
|
||||
public function deleteByScheduledTaskAndSubscriberIds(ScheduledTaskEntity $scheduledTask, array $subscriberIds): void {
|
||||
$this->entityManager->createQueryBuilder()
|
||||
->delete(ScheduledTaskSubscriberEntity::class, 'sts')
|
||||
->where('sts.task = :task')
|
||||
->andWhere('sts.subscriber IN (:subscriberIds)')
|
||||
->setParameter('task', $scheduledTask)
|
||||
->setParameter('subscriberIds', $subscriberIds, Connection::PARAM_INT_ARRAY)
|
||||
->getQuery()
|
||||
->execute();
|
||||
|
||||
$this->checkCompleted($scheduledTask);
|
||||
}
|
||||
|
||||
public function setSubscribers(ScheduledTaskEntity $task, array $subscriberIds): void {
|
||||
$this->deleteByScheduledTask($task);
|
||||
|
||||
|
@@ -254,8 +254,20 @@ class Sending {
|
||||
}
|
||||
|
||||
public function removeSubscribers(array $subscriberIds) {
|
||||
$this->taskSubscribers->removeSubscribers($subscriberIds);
|
||||
$this->updateCount();
|
||||
$scheduledTaskEntity = $this->scheduledTasksRepository->findOneById($this->task->id);
|
||||
|
||||
if ($scheduledTaskEntity instanceof ScheduledTaskEntity) {
|
||||
$this->scheduledTaskSubscribersRepository->deleteByScheduledTaskAndSubscriberIds($scheduledTaskEntity, $subscriberIds);
|
||||
|
||||
// we need to update those fields here as the Sending class is in a mixed state using Paris and Doctrine at the same time
|
||||
// this probably won't be necessary anymore once https://mailpoet.atlassian.net/browse/MAILPOET-4375 is finished
|
||||
$this->task->status = $scheduledTaskEntity->getStatus();
|
||||
if (!is_null($scheduledTaskEntity->getProcessedAt())) {
|
||||
$this->task->processedAt = $scheduledTaskEntity->getProcessedAt()->format('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
$this->updateCount();
|
||||
}
|
||||
}
|
||||
|
||||
public function removeAllSubscribers() {
|
||||
|
@@ -18,13 +18,6 @@ class Subscribers {
|
||||
return ScheduledTaskSubscriber::where('task_id', $this->task->id);
|
||||
}
|
||||
|
||||
public function removeSubscribers(array $subscribersToRemove) {
|
||||
$this->getSubscribers()
|
||||
->whereIn('subscriber_id', $subscribersToRemove)
|
||||
->deleteMany();
|
||||
$this->checkCompleted();
|
||||
}
|
||||
|
||||
public function removeAllSubscribers() {
|
||||
$this->getSubscribers()
|
||||
->deleteMany();
|
||||
|
@@ -3,6 +3,7 @@
|
||||
namespace integration\Newsletter\Sending;
|
||||
|
||||
use MailPoet\Entities\ScheduledTaskEntity;
|
||||
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
|
||||
use MailPoet\Test\DataFactories\ScheduledTask as ScheduledTaskFactory;
|
||||
@@ -29,6 +30,21 @@ class ScheduledTaskSubscribersRepositoryTest extends \MailPoetTest {
|
||||
/** @var SubscriberEntity */
|
||||
private $subscriberProcessed;
|
||||
|
||||
/** @var ScheduledTaskSubscriberEntity */
|
||||
private $taskSubscriber1;
|
||||
|
||||
/** @var ScheduledTaskSubscriberEntity */
|
||||
private $taskSubscriber2;
|
||||
|
||||
/** @var ScheduledTaskSubscriberEntity */
|
||||
private $taskSubscriber3;
|
||||
|
||||
/** @var ScheduledTaskSubscriberEntity */
|
||||
private $taskSubscriber4;
|
||||
|
||||
/** @var ScheduledTaskSubscriberEntity */
|
||||
private $taskSubscriber5;
|
||||
|
||||
public function _before() {
|
||||
parent::_before();
|
||||
$this->repository = $this->diContainer->get(ScheduledTaskSubscribersRepository::class);
|
||||
@@ -44,12 +60,12 @@ class ScheduledTaskSubscribersRepositoryTest extends \MailPoetTest {
|
||||
$this->scheduledTask1 = $scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_COMPLETED, Carbon::now()->subDay());
|
||||
$this->scheduledTask2 = $scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_COMPLETED, Carbon::now()->subDay());
|
||||
|
||||
$taskSubscriberFactory->createUnprocessed($this->scheduledTask1, $this->subscriberUnprocessed);
|
||||
$taskSubscriberFactory->createProcessed($this->scheduledTask1, $this->subscriberProcessed);
|
||||
$taskSubscriberFactory->createFailed($this->scheduledTask1, $subscriberFailed, 'Error Message');
|
||||
$this->taskSubscriber1 = $taskSubscriberFactory->createUnprocessed($this->scheduledTask1, $this->subscriberUnprocessed);
|
||||
$this->taskSubscriber2 = $taskSubscriberFactory->createProcessed($this->scheduledTask1, $this->subscriberProcessed);
|
||||
$this->taskSubscriber3 = $taskSubscriberFactory->createFailed($this->scheduledTask1, $subscriberFailed, 'Error Message');
|
||||
|
||||
$taskSubscriberFactory->createUnprocessed($this->scheduledTask2, $this->subscriberUnprocessed);
|
||||
$taskSubscriberFactory->createProcessed($this->scheduledTask2, $this->subscriberProcessed);
|
||||
$this->taskSubscriber4 = $taskSubscriberFactory->createUnprocessed($this->scheduledTask2, $this->subscriberUnprocessed);
|
||||
$this->taskSubscriber5 = $taskSubscriberFactory->createProcessed($this->scheduledTask2, $this->subscriberProcessed);
|
||||
}
|
||||
|
||||
public function testItSetsSubscribers() {
|
||||
@@ -70,4 +86,14 @@ class ScheduledTaskSubscribersRepositoryTest extends \MailPoetTest {
|
||||
$this->assertEquals($this->subscriberUnprocessed->getId(), $task2Subscribers[0]->getSubscriber()->getId());
|
||||
$this->assertEquals($this->subscriberProcessed->getId(), $task2Subscribers[1]->getSubscriber()->getId());
|
||||
}
|
||||
|
||||
public function testItDeleteByScheduledTaskAndSubscriberIds() {
|
||||
$this->repository->deleteByScheduledTaskAndSubscriberIds($this->scheduledTask1, [$this->taskSubscriber1->getSubscriberId()]);
|
||||
$this->assertSame([$this->taskSubscriber2, $this->taskSubscriber3], $this->repository->findBy(['task' => $this->scheduledTask1]));
|
||||
$this->assertSame([$this->taskSubscriber4, $this->taskSubscriber5], $this->repository->findBy(['task' => $this->scheduledTask2]));
|
||||
|
||||
$this->repository->deleteByScheduledTaskAndSubscriberIds($this->scheduledTask2, [$this->taskSubscriber4->getSubscriberId(), $this->taskSubscriber5->getSubscriberId()]);
|
||||
$this->assertSame([$this->taskSubscriber2, $this->taskSubscriber3], $this->repository->findBy(['task' => $this->scheduledTask1]));
|
||||
$this->assertSame([], $this->repository->findBy(['task' => $this->scheduledTask2]));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user