Add check for orphaned subscriptions
[MAILPOET-1587]
This commit is contained in:
committed by
Aschepikov
parent
0d7898b3a5
commit
fe66e31b5f
@@ -5,10 +5,12 @@ namespace MailPoet\Util\DataInconsistency;
|
||||
use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueWorker;
|
||||
use MailPoet\Entities\ScheduledTaskEntity;
|
||||
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Test\DataFactories\Newsletter;
|
||||
use MailPoet\Test\DataFactories\ScheduledTask;
|
||||
use MailPoet\Test\DataFactories\ScheduledTaskSubscriber;
|
||||
use MailPoet\Test\DataFactories\Segment;
|
||||
use MailPoet\Test\DataFactories\SendingQueue;
|
||||
use MailPoet\Test\DataFactories\Subscriber;
|
||||
|
||||
@@ -98,4 +100,33 @@ class DataInconsistencyRepositoryTest extends \MailPoetTest {
|
||||
verify($this->repository->getOrphanedSendingTasksCount())->equals(0);
|
||||
verify($this->repository->getOrphanedScheduledTasksSubscribersCount())->equals(0);
|
||||
}
|
||||
|
||||
public function testItHandlesOrphanedSubscriptions(): void {
|
||||
$segmentToDelete = (new Segment())->create();
|
||||
$segmentToKeep = (new Segment())->create();
|
||||
|
||||
$subscriberToDelete = (new Subscriber())->withSegments([$segmentToDelete, $segmentToKeep])->create();
|
||||
$subscriberToKeep = (new Subscriber())->withSegments([$segmentToDelete, $segmentToKeep])->create();
|
||||
|
||||
$subscriberTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||
$this->entityManager->getConnection()
|
||||
->executeQuery("DELETE s FROM $subscriberTable s WHERE id = :id", ['id' => $subscriberToDelete->getId()]);
|
||||
|
||||
$segmentTable = $this->entityManager->getClassMetadata(SegmentEntity::class)->getTableName();
|
||||
$this->entityManager->getConnection()
|
||||
->executeQuery("DELETE s FROM $segmentTable s WHERE id = :id", ['id' => $segmentToDelete->getId()]);
|
||||
|
||||
// Expect 3 because both subscribers were associated to the deleted segment + deleted subscriber to segment we kept
|
||||
verify($this->repository->getOrphanedSubscriptionsCount())->equals(3);
|
||||
$this->repository->cleanupOrphanedSubscriptions();
|
||||
verify($this->repository->getOrphanedSubscriptionsCount())->equals(0);
|
||||
|
||||
$this->entityManager->detach($subscriberToKeep);
|
||||
$subscriberToKeep = $this->entityManager->find(SubscriberEntity::class, $subscriberToKeep->getId());
|
||||
$this->assertInstanceOf(SubscriberEntity::class, $subscriberToKeep);
|
||||
|
||||
$this->entityManager->detach($segmentToKeep);
|
||||
$segmentToKeep = $this->entityManager->find(SegmentEntity::class, $segmentToKeep->getId());
|
||||
$this->assertInstanceOf(SegmentEntity::class, $segmentToKeep);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user