Add stats notifications cleanup to newsletter bulk delete
[MAILPOET-2898]
This commit is contained in:
committed by
Veljko V
parent
6f9a7382d7
commit
5dbc8d8a8c
@ -14,6 +14,7 @@ use MailPoet\Entities\NewsletterSegmentEntity;
|
|||||||
use MailPoet\Entities\ScheduledTaskEntity;
|
use MailPoet\Entities\ScheduledTaskEntity;
|
||||||
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
||||||
use MailPoet\Entities\SendingQueueEntity;
|
use MailPoet\Entities\SendingQueueEntity;
|
||||||
|
use MailPoet\Entities\StatsNotificationEntity;
|
||||||
use MailPoetVendor\Carbon\Carbon;
|
use MailPoetVendor\Carbon\Carbon;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Connection;
|
use MailPoetVendor\Doctrine\DBAL\Connection;
|
||||||
use MailPoetVendor\Doctrine\ORM\Query\Expr\Join;
|
use MailPoetVendor\Doctrine\ORM\Query\Expr\Join;
|
||||||
@ -218,6 +219,14 @@ class NewslettersRepository extends Repository {
|
|||||||
$scheduledTasksTable = $this->entityManager->getClassMetadata(ScheduledTaskEntity::class)->getTableName();
|
$scheduledTasksTable = $this->entityManager->getClassMetadata(ScheduledTaskEntity::class)->getTableName();
|
||||||
$sendingQueueTable = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName();
|
$sendingQueueTable = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName();
|
||||||
$scheduledTaskSubscribersTable = $this->entityManager->getClassMetadata(ScheduledTaskSubscriberEntity::class)->getTableName();
|
$scheduledTaskSubscribersTable = $this->entityManager->getClassMetadata(ScheduledTaskSubscriberEntity::class)->getTableName();
|
||||||
|
|
||||||
|
// Delete stats notifications
|
||||||
|
$statsNotificationsTable = $this->entityManager->getClassMetadata(StatsNotificationEntity::class)->getTableName();
|
||||||
|
$this->entityManager->getConnection()->executeUpdate("
|
||||||
|
DELETE sn FROM $statsNotificationsTable sn
|
||||||
|
WHERE sn.`newsletter_id` IN (:ids)
|
||||||
|
", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]);
|
||||||
|
|
||||||
// Delete sending tasks subscribers
|
// Delete sending tasks subscribers
|
||||||
$this->entityManager->getConnection()->executeUpdate("
|
$this->entityManager->getConnection()->executeUpdate("
|
||||||
DELETE ts FROM $scheduledTaskSubscribersTable ts
|
DELETE ts FROM $scheduledTaskSubscribersTable ts
|
||||||
|
@ -9,6 +9,7 @@ use MailPoet\Entities\ScheduledTaskEntity;
|
|||||||
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\Entities\SendingQueueEntity;
|
use MailPoet\Entities\SendingQueueEntity;
|
||||||
|
use MailPoet\Entities\StatsNotificationEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
|
use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
@ -31,7 +32,7 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
$newsletter1 = $this->createNewsletter(NewsletterEntity::TYPE_STANDARD);
|
$newsletter1 = $this->createNewsletter(NewsletterEntity::TYPE_STANDARD);
|
||||||
$this->createQueueWithTaskAndSegmentAndSubscribers($newsletter1);
|
$this->createQueueWithTaskAndSegmentAndSubscribers($newsletter1);
|
||||||
$newsletter2 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION, NewsletterEntity::STATUS_ACTIVE);
|
$newsletter2 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION, NewsletterEntity::STATUS_ACTIVE);
|
||||||
$newsletter2Child1 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION, NewsletterEntity::STATUS_SCHEDULED, $newsletter2);
|
$newsletter2Child1 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION_HISTORY, NewsletterEntity::STATUS_SCHEDULED, $newsletter2);
|
||||||
$this->createQueueWithTaskAndSegmentAndSubscribers($newsletter2Child1);
|
$this->createQueueWithTaskAndSegmentAndSubscribers($newsletter2Child1);
|
||||||
$this->repository->bulkTrash([$newsletter1->getId(), $newsletter2->getId()]);
|
$this->repository->bulkTrash([$newsletter1->getId(), $newsletter2->getId()]);
|
||||||
$this->entityManager->refresh($newsletter1);
|
$this->entityManager->refresh($newsletter1);
|
||||||
@ -68,7 +69,7 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
$newsletter1 = $this->createNewsletter(NewsletterEntity::TYPE_STANDARD, NewsletterEntity::STATUS_SENDING);
|
$newsletter1 = $this->createNewsletter(NewsletterEntity::TYPE_STANDARD, NewsletterEntity::STATUS_SENDING);
|
||||||
$this->createQueueWithTaskAndSegmentAndSubscribers($newsletter1, null); // Null for scheduled task being processed
|
$this->createQueueWithTaskAndSegmentAndSubscribers($newsletter1, null); // Null for scheduled task being processed
|
||||||
$newsletter2 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION, NewsletterEntity::STATUS_ACTIVE);
|
$newsletter2 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION, NewsletterEntity::STATUS_ACTIVE);
|
||||||
$newsletter2Child1 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION, NewsletterEntity::STATUS_SCHEDULED, $newsletter2);
|
$newsletter2Child1 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION_HISTORY, NewsletterEntity::STATUS_SCHEDULED, $newsletter2);
|
||||||
$this->createQueueWithTaskAndSegmentAndSubscribers($newsletter2Child1);
|
$this->createQueueWithTaskAndSegmentAndSubscribers($newsletter2Child1);
|
||||||
// Trash
|
// Trash
|
||||||
$this->repository->bulkTrash([$newsletter1->getId(), $newsletter2->getId()]);
|
$this->repository->bulkTrash([$newsletter1->getId(), $newsletter2->getId()]);
|
||||||
@ -111,18 +112,13 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItBulkDeleteNewslettersAndChildren() {
|
public function testItBulkDeleteNewslettersAndChildren() {
|
||||||
$newsletter1 = $this->createNewsletter(NewsletterEntity::TYPE_STANDARD, NewsletterEntity::STATUS_SENDING);
|
$newsletter1 = $this->createNewsletter(NewsletterEntity::TYPE_STANDARD, NewsletterEntity::STATUS_SENDING);
|
||||||
$this->createQueueWithTaskAndSegmentAndSubscribers($newsletter1, null); // Null for scheduled task being processed
|
$newsletter1Queue = $this->createQueueWithTaskAndSegmentAndSubscribers($newsletter1, null); // Null for scheduled task being processed
|
||||||
$newsletter2 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION, NewsletterEntity::STATUS_ACTIVE);
|
$newsletter2 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION, NewsletterEntity::STATUS_ACTIVE);
|
||||||
$newsletter2Child1 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION, NewsletterEntity::STATUS_SCHEDULED, $newsletter2);
|
$newsletter2Child1 = $this->createNewsletter(NewsletterEntity::TYPE_NOTIFICATION_HISTORY, NewsletterEntity::STATUS_SCHEDULED, $newsletter2);
|
||||||
$this->createQueueWithTaskAndSegmentAndSubscribers($newsletter2Child1);
|
$childrenQueue = $this->createQueueWithTaskAndSegmentAndSubscribers($newsletter2Child1);
|
||||||
// Trash
|
|
||||||
$this->repository->bulkTrash([$newsletter1->getId(), $newsletter2->getId()]);
|
|
||||||
$newsletter1Queue = $newsletter1->getLatestQueue();
|
|
||||||
assert($newsletter1Queue instanceof SendingQueueEntity);
|
|
||||||
$newsletter1Segment = $newsletter1->getNewsletterSegments()->first();
|
$newsletter1Segment = $newsletter1->getNewsletterSegments()->first();
|
||||||
assert($newsletter1Segment instanceof NewsletterSegmentEntity);
|
assert($newsletter1Segment instanceof NewsletterSegmentEntity);
|
||||||
$childrenQueue = $newsletter2Child1->getLatestQueue();
|
|
||||||
assert($childrenQueue instanceof SendingQueueEntity);
|
|
||||||
$scheduledTask1 = $newsletter1Queue->getTask();
|
$scheduledTask1 = $newsletter1Queue->getTask();
|
||||||
assert($scheduledTask1 instanceof ScheduledTaskEntity);
|
assert($scheduledTask1 instanceof ScheduledTaskEntity);
|
||||||
$scheduledTask1Subscriber = $this->taskSubscribersRepository->findOneBy(['task' => $scheduledTask1]);
|
$scheduledTask1Subscriber = $this->taskSubscribersRepository->findOneBy(['task' => $scheduledTask1]);
|
||||||
@ -133,7 +129,11 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
assert($childSegment instanceof NewsletterSegmentEntity);
|
assert($childSegment instanceof NewsletterSegmentEntity);
|
||||||
$childrenScheduledTaskSubscriber = $this->taskSubscribersRepository->findOneBy(['task' => $childrenScheduledTask]);
|
$childrenScheduledTaskSubscriber = $this->taskSubscribersRepository->findOneBy(['task' => $childrenScheduledTask]);
|
||||||
assert($childrenScheduledTaskSubscriber instanceof ScheduledTaskSubscriberEntity);
|
assert($childrenScheduledTaskSubscriber instanceof ScheduledTaskSubscriberEntity);
|
||||||
|
$newsletter1StatsNotification = $this->createStatNotification($newsletter1, $scheduledTask1);
|
||||||
|
$childNewsletterStatsNotification = $this->createStatNotification($newsletter2Child1, $childrenScheduledTask);
|
||||||
|
|
||||||
|
// Trash
|
||||||
|
$this->repository->bulkTrash([$newsletter1->getId(), $newsletter2->getId()]);
|
||||||
// Delete
|
// Delete
|
||||||
$this->repository->bulkDelete([$newsletter1->getId(), $newsletter2->getId()]);
|
$this->repository->bulkDelete([$newsletter1->getId(), $newsletter2->getId()]);
|
||||||
|
|
||||||
@ -147,6 +147,8 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
$this->entityManager->detach($childrenScheduledTask);
|
$this->entityManager->detach($childrenScheduledTask);
|
||||||
$this->entityManager->detach($newsletter1Segment);
|
$this->entityManager->detach($newsletter1Segment);
|
||||||
$this->entityManager->detach($childSegment);
|
$this->entityManager->detach($childSegment);
|
||||||
|
$this->entityManager->detach($newsletter1StatsNotification);
|
||||||
|
$this->entityManager->detach($childNewsletterStatsNotification);
|
||||||
|
|
||||||
// Check they were all deleted
|
// Check they were all deleted
|
||||||
// Newsletters
|
// Newsletters
|
||||||
@ -169,6 +171,10 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
// Newsletter segments
|
// Newsletter segments
|
||||||
expect($this->entityManager->find(NewsletterSegmentEntity::class, $newsletter1Segment->getId()))->null();
|
expect($this->entityManager->find(NewsletterSegmentEntity::class, $newsletter1Segment->getId()))->null();
|
||||||
expect($this->entityManager->find(NewsletterSegmentEntity::class, $childSegment->getId()))->null();
|
expect($this->entityManager->find(NewsletterSegmentEntity::class, $childSegment->getId()))->null();
|
||||||
|
|
||||||
|
// Newsletter stats notifications
|
||||||
|
expect($this->entityManager->find(StatsNotificationEntity::class, $newsletter1StatsNotification->getId()))->null();
|
||||||
|
expect($this->entityManager->find(StatsNotificationEntity::class, $childNewsletterStatsNotification->getId()))->null();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function _after() {
|
public function _after() {
|
||||||
@ -209,6 +215,7 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
$subscriber->setEmail("sub{$newsletter->getId()}@mailpoet.com");
|
$subscriber->setEmail("sub{$newsletter->getId()}@mailpoet.com");
|
||||||
$subscriber->setStatus(SubscriberEntity::STATUS_SUBSCRIBED);
|
$subscriber->setStatus(SubscriberEntity::STATUS_SUBSCRIBED);
|
||||||
$this->entityManager->persist($subscriber);
|
$this->entityManager->persist($subscriber);
|
||||||
|
$this->entityManager->flush();
|
||||||
$scheduledTaskSubscriber = new ScheduledTaskSubscriberEntity($task, $subscriber);
|
$scheduledTaskSubscriber = new ScheduledTaskSubscriberEntity($task, $subscriber);
|
||||||
$this->entityManager->persist($scheduledTaskSubscriber);
|
$this->entityManager->persist($scheduledTaskSubscriber);
|
||||||
|
|
||||||
@ -219,6 +226,13 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
return $queue;
|
return $queue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function createStatNotification(NewsletterEntity $newsletter, ScheduledTaskEntity $task): StatsNotificationEntity {
|
||||||
|
$statsNotification = new StatsNotificationEntity($newsletter, $task);
|
||||||
|
$this->entityManager->persist($statsNotification);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
return $statsNotification;
|
||||||
|
}
|
||||||
|
|
||||||
private function cleanup() {
|
private function cleanup() {
|
||||||
$this->truncateEntity(NewsletterEntity::class);
|
$this->truncateEntity(NewsletterEntity::class);
|
||||||
$this->truncateEntity(ScheduledTaskEntity::class);
|
$this->truncateEntity(ScheduledTaskEntity::class);
|
||||||
@ -227,5 +241,6 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
$this->truncateEntity(SegmentEntity::class);
|
$this->truncateEntity(SegmentEntity::class);
|
||||||
$this->truncateEntity(SubscriberEntity::class);
|
$this->truncateEntity(SubscriberEntity::class);
|
||||||
$this->truncateEntity(ScheduledTaskSubscriberEntity::class);
|
$this->truncateEntity(ScheduledTaskSubscriberEntity::class);
|
||||||
|
$this->truncateEntity(StatsNotificationEntity::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user