Remove bulk methods from legacy newsletter model

[MAILPOET-2898]
This commit is contained in:
Rostislav Wolny
2020-06-10 10:48:09 +02:00
committed by Veljko V
parent 8a78322854
commit babb27dd72
2 changed files with 0 additions and 282 deletions

View File

@@ -170,45 +170,6 @@ class Newsletter extends Model {
return parent::trash(); return parent::trash();
} }
public static function bulkTrash($orm) {
// bulk trash queue and notification history associations
parent::bulkAction($orm, function($ids) {
$children = Newsletter::whereIn('parent_id', $ids)->select('id')->findArray();
if ($children) {
Newsletter::rawExecute(
'UPDATE `' . Newsletter::$_table . '` ' .
'SET `deleted_at` = NOW() ' .
'WHERE `parent_id` IN (' . join(',', Helpers::flattenArray($ids)) . ')'
);
ScheduledTask::rawExecute(
'UPDATE `' . ScheduledTask::$_table . '` t ' .
'JOIN `' . SendingQueue::$_table . '` q ON t.`id` = q.`task_id` ' .
'SET t.`deleted_at` = NOW() ' .
'WHERE q.`newsletter_id` IN (' . join(',', array_merge(Helpers::flattenArray($children), $ids)) . ')'
);
SendingQueue::rawExecute(
'UPDATE `' . SendingQueue::$_table . '` ' .
'SET `deleted_at` = NOW() ' .
'WHERE `newsletter_id` IN (' . join(',', array_merge(Helpers::flattenArray($children), $ids)) . ')'
);
} else {
ScheduledTask::rawExecute(
'UPDATE `' . ScheduledTask::$_table . '` t ' .
'JOIN `' . SendingQueue::$_table . '` q ON t.`id` = q.`task_id` ' .
'SET t.`deleted_at` = NOW() ' .
'WHERE q.`newsletter_id` IN (' . join(',', Helpers::flattenArray($ids)) . ')'
);
SendingQueue::rawExecute(
'UPDATE `' . SendingQueue::$_table . '` ' .
'SET `deleted_at` = NOW() ' .
'WHERE `newsletter_id` IN (' . join(',', Helpers::flattenArray($ids)) . ')'
);
}
});
return parent::bulkTrash($orm);
}
public function delete() { public function delete() {
// delete queue, notification history and segment associations // delete queue, notification history and segment associations
$children = $this->children()->select('id')->findArray(); $children = $this->children()->select('id')->findArray();
@@ -233,32 +194,6 @@ class Newsletter extends Model {
return parent::delete(); return parent::delete();
} }
public static function bulkDelete($orm) {
// bulk delete queue, notification history and segment associations
parent::bulkAction($orm, function($ids) {
$children = Newsletter::whereIn('parent_id', $ids)->select('id')->findArray();
if ($children) {
$children = Helpers::flattenArray($children);
Newsletter::whereIn('parent_id', $ids)->deleteMany();
SendingQueue::getTasks()
->whereIn('queues.newsletter_id', array_merge($children, $ids))
->findResultSet()
->delete();
SendingQueue::whereIn('newsletter_id', array_merge($children, $ids))->deleteMany();
NewsletterSegment::whereIn('newsletter_id', array_merge($children, $ids))->deleteMany();
} else {
SendingQueue::getTasks()
->whereIn('queues.newsletter_id', $ids)
->findResultSet()
->delete();
SendingQueue::whereIn('newsletter_id', $ids)->deleteMany();
NewsletterSegment::whereIn('newsletter_id', $ids)->deleteMany();
}
});
return parent::bulkDelete($orm);
}
public function restore() { public function restore() {
// restore trashed queue and notification history associations // restore trashed queue and notification history associations
$children = $this->children()->select('id')->findArray(); $children = $this->children()->select('id')->findArray();
@@ -303,52 +238,6 @@ class Newsletter extends Model {
return parent::restore(); return parent::restore();
} }
public static function bulkRestore($orm) {
// bulk restore trashed queue and notification history associations
parent::bulkAction($orm, function($ids) {
$children = Newsletter::whereIn('parent_id', $ids)->select('id')->findArray();
if ($children) {
Newsletter::whereIn('parent_id', $ids)
->whereNotNull('deleted_at')
->findResultSet()
->set('deleted_at', null)
->save();
SendingQueue::getTasks()
->whereIn('queues.newsletter_id', Helpers::flattenArray($children))
->whereNotNull('tasks.deleted_at')
->findResultSet()
->set('deleted_at', null)
->save();
SendingQueue::whereIn('newsletter_id', Helpers::flattenArray($children))
->whereNotNull('deleted_at')
->findResultSet()
->set('deleted_at', null)
->save();
} else {
SendingQueue::getTasks()
->whereIn('queues.newsletter_id', $ids)
->whereNotNull('tasks.deleted_at')
->findResultSet()
->set('deleted_at', null)
->save();
// Pause associated running scheduled tasks
SendingQueue::getTasks()
->whereIn('queues.newsletter_id', $ids)
->whereNull('tasks.status')
->findResultSet()
->set('status', ScheduledTaskEntity::STATUS_PAUSED)
->save();
SendingQueue::whereIn('newsletter_id', $ids)
->whereNotNull('deleted_at')
->findResultSet()
->set('deleted_at', null)
->save();
}
});
return parent::bulkRestore($orm);
}
public function setStatus($status = null) { public function setStatus($status = null) {
if ($status === self::STATUS_ACTIVE) { if ($status === self::STATUS_ACTIVE) {
if (!$this->body || empty(json_decode($this->body))) { if (!$this->body || empty(json_decode($this->body))) {

View File

@@ -487,177 +487,6 @@ class NewsletterTest extends \MailPoetTest {
expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6); expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6);
} }
public function testItTrashesAllQueueAssociationsWhenNewslettersAreBulkTrashed() {
// create multiple newsletters and sending queues
for ($i = 1; $i <= 5; $i++) {
$newsletter = Newsletter::createOrUpdate(
[
'subject' => 'test',
'type' => Newsletter::TYPE_STANDARD,
]
);
$sendingQueue = SendingTask::create();
$sendingQueue->newsletterId = $newsletter->id;
$sendingQueue->save();
}
// 5 queues/newsletters + 1 of each created in _before() method
expect(Newsletter::whereNull('deleted_at')->findArray())->count(6);
expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6);
// bulk trash newsletters and check that relations are trashed
Newsletter::bulkTrash(ORM::forTable(Newsletter::$_table));
expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(6);
expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(6);
}
public function testItTrashesAllChildrenQueueAssociationsWhenParentNewslettersAreBulkTrashed() {
// create multiple children (post notification history) newsletters and sending queues
for ($i = 1; $i <= 5; $i++) {
$newsletter = Newsletter::createOrUpdate(
[
'subject' => 'test',
'type' => Newsletter::TYPE_NOTIFICATION_HISTORY,
'parent_id' => $this->newsletter->id,
]
);
$sendingQueue = SendingTask::create();
$sendingQueue->newsletterId = $newsletter->id;
$sendingQueue->save();
}
// 5 queues/newsletters + 1 of each created in _before() method
expect(Newsletter::whereNull('deleted_at')->findArray())->count(6);
expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6);
// bulk trash parent newsletters and check that relations are trashed
Newsletter::bulkTrash(ORM::forTable(Newsletter::$_table));
expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(6);
expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(6);
}
public function testItBulkRestoresTrashedQueueAssociationsWhenNewslettersAreBulkRestored() {
// create multiple newsletters and sending queues
$sendingTasks = [];
for ($i = 1; $i <= 5; $i++) {
$newsletter = Newsletter::createOrUpdate(
[
'subject' => 'test',
'type' => Newsletter::TYPE_STANDARD,
'deleted_at' => date('Y-m-d H:i:s'),
]
);
$sendingTask = SendingTask::create();
$sendingTask->newsletterId = $newsletter->id;
$sendingTask->deletedAt = date('Y-m-d H:i:s');
$sendingTask->status = ScheduledTask::STATUS_SCHEDULED;
$sendingTask->save();
$sendingTasks[] = $sendingTask;
}
$inProgressSendingTask = $sendingTasks[0];
$inProgressSendingTask->status = null;
$inProgressSendingTask->save();
expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(5);
expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(5);
// Expect one deleted task to be running
expect(ScheduledTask::whereNotNull('deleted_at')->whereNull('status')->findArray())->count(1);
// bulk restore newsletters and check that relations are restored
Newsletter::bulkRestore(ORM::forTable(Newsletter::$_table));
// 5 queues/newsletters + 1 of each created in _before() method
expect(Newsletter::whereNull('deleted_at')->findArray())->count(6);
expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6);
// Expect the previously running task to be paused
expect(ScheduledTask::where('status', ScheduledTask::STATUS_PAUSED)->findArray())->count(1);
}
public function testItBulkRestoresTrashedChildrenQueueAssociationsWhenParentNewslettersAreBulkRestored() {
// create multiple children (post notification history) newsletters and sending queues
for ($i = 1; $i <= 5; $i++) {
$newsletter = Newsletter::createOrUpdate(
[
'subject' => 'test',
'type' => Newsletter::TYPE_NOTIFICATION_HISTORY,
'parent_id' => $this->newsletter->id,
'deleted_at' => date('Y-m-d H:i:s'),
]
);
$sendingQueue = SendingTask::create();
$sendingQueue->newsletterId = $newsletter->id;
$sendingQueue->deletedAt = date('Y-m-d H:i:s');
$sendingQueue->save();
}
expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(5);
expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(5);
// bulk restore parent newsletters and check that relations are restored
Newsletter::bulkRestore(ORM::forTable(Newsletter::$_table));
// 1 parent and 5 queues/newsletters
expect(Newsletter::whereNull('deleted_at')->findArray())->count(6);
expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6);
}
public function testItBulkDeletesSegmentAndQueueAssociationsWhenNewslettersAreBulkDeleted() {
// create multiple newsletters, sending queues and newsletter segments
for ($i = 1; $i <= 5; $i++) {
$newsletter = Newsletter::createOrUpdate(
[
'subject' => 'test',
'type' => Newsletter::TYPE_STANDARD,
]
);
$sendingQueue = SendingTask::create();
$sendingQueue->newsletterId = $newsletter->id;
$sendingQueue->save();
$newsletterSegment = NewsletterSegment::create();
$newsletterSegment->newsletterId = $newsletter->id;
$newsletterSegment->segmentId = 1;
$newsletterSegment->save();
}
// 5 queues/newsletters + 1 of each created in _before() method
expect(Newsletter::findArray())->count(6);
expect(SendingQueue::findArray())->count(6);
// 5 segment associations + 2 created in _before() method
expect(NewsletterSegment::findArray())->count(7);
// bulk delete newsletters and check that relations are deleted
Newsletter::bulkDelete(ORM::forTable(Newsletter::$_table));
expect(Newsletter::findArray())->count(0);
expect(SendingQueue::findArray())->count(0);
expect(NewsletterSegment::findArray())->count(0);
}
public function testItBulkDeletesChildrenSegmentAndQueueAssociationsWhenParentNewslettersAreBulkDeleted() {
$this->_after();
// create multiple children (post notification history) newsletters, sending queues and newsletter segments
for ($i = 1; $i <= 5; $i++) {
$newsletter = Newsletter::createOrUpdate(
[
'subject' => 'test',
'type' => Newsletter::TYPE_NOTIFICATION_HISTORY,
'parent_id' => $this->newsletter->id,
]
);
$sendingQueue = SendingTask::create();
$sendingQueue->newsletterId = $newsletter->id;
$sendingQueue->save();
$newsletterSegment = NewsletterSegment::create();
$newsletterSegment->newsletterId = $newsletter->id;
$newsletterSegment->segmentId = 1;
$newsletterSegment->save();
}
// 5 queues/newsletters/segment associations
expect(Newsletter::findArray())->count(5);
expect(SendingQueue::findArray())->count(5);
expect(NewsletterSegment::findArray())->count(5);
// bulk delete newsletters and check that relations are deleted
Newsletter::bulkDelete(ORM::forTable(Newsletter::$_table));
expect(Newsletter::findArray())->count(0);
expect(SendingQueue::findArray())->count(0);
expect(NewsletterSegment::findArray())->count(0);
}
public function testItDuplicatesNewsletter() { public function testItDuplicatesNewsletter() {
$originalNewsletter = $this->newsletter; $originalNewsletter = $this->newsletter;
$originalNewsletter->status = Newsletter::STATUS_SENT; $originalNewsletter->status = Newsletter::STATUS_SENT;