diff --git a/lib/Models/Newsletter.php b/lib/Models/Newsletter.php index 4d9110f4cb..f7bdc84dd6 100644 --- a/lib/Models/Newsletter.php +++ b/lib/Models/Newsletter.php @@ -86,10 +86,12 @@ class Newsletter extends Model { } function trash() { - // trash queue association - if($queue = $this->queue()->findOne()) { - $queue->trash(); - } + // trash queue associations + SendingQueue::rawExecute( + 'UPDATE `' . SendingQueue::$_table . '` ' . + 'SET `deleted_at` = NOW() ' . + 'WHERE `newsletter_id` = ' . $this->id + ); return parent::trash(); } @@ -113,9 +115,7 @@ class Newsletter extends Model { // delete segment associations $this->segmentRelations()->deleteMany(); // delete queue association - if($queue = $this->queue()->findOne()) { - $queue->delete(); - } + $this->queue()->deleteMany(); return parent::delete(); } @@ -137,10 +137,12 @@ class Newsletter extends Model { } function restore() { - // restore trashed queue association - if($queue = $this->queue()->findOne()) { - $queue->restore(); - } + // trash queue associations + SendingQueue::rawExecute( + 'UPDATE `' . SendingQueue::$_table . '` ' . + 'SET `deleted_at` = null ' . + 'WHERE `newsletter_id` = ' . $this->id + ); if($this->status == self::STATUS_SENDING) { $this->set('status', self::STATUS_DRAFT); diff --git a/tests/unit/Models/NewsletterTest.php b/tests/unit/Models/NewsletterTest.php index e77a0ad7e1..4bad72ee97 100644 --- a/tests/unit/Models/NewsletterTest.php +++ b/tests/unit/Models/NewsletterTest.php @@ -439,29 +439,41 @@ class NewsletterTest extends MailPoetTest { expect($newsletter_segments)->isEmpty(); } - function testItTrashesQueueAssociationWhenNewsletterIsTrashed() { - // make sure relation exists - $newsletter = $this->newsletter; - $sending_queue = SendingQueue::where('newsletter_id', $newsletter->id)->findOne(); - expect($sending_queue->deleted_at)->null(); + function testItTrashesQueueAssociationsWhenNewsletterIsTrashed() { + // delete default records + $this->_after(); - // trash newsletter and check that relation is trashed + // create multiple sending queues + $newsletter = $this->newsletter; + for($i = 1; $i <= 5; $i++) { + $sending_queue = SendingQueue::create(); + $sending_queue->newsletter_id = $newsletter->id; + $sending_queue->save(); + } + expect(SendingQueue::whereNull('deleted_at')->findArray())->count(5); + + // trash newsletter and check that relations are trashed $newsletter->trash(); - $sending_queue = SendingQueue::where('newsletter_id', $newsletter->id)->findOne(); - expect($sending_queue->deleted_at)->notNull(); + expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(5); } - function testItRestoresTrashedQueueAssociationWhenNewsletterIsRestored() { - // trash newsletter and check that relation is trashed - $newsletter = $this->newsletter; - $newsletter->trash(); - $sending_queue = SendingQueue::where('newsletter_id', $newsletter->id)->findOne(); - expect($sending_queue->deleted_at)->notNull(); + function testItRestoresTrashedQueueAssociationsWhenNewsletterIsRestored() { + // delete default records + $this->_after(); - // restore newsletter and check that relation is restores + // create multiple sending queues + $newsletter = $this->newsletter; + for($i = 1; $i <= 5; $i++) { + $sending_queue = SendingQueue::create(); + $sending_queue->newsletter_id = $newsletter->id; + $sending_queue->deleted_at = date('Y-m-d H:i:s'); + $sending_queue->save(); + } + expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(5); + + // restore newsletter and check that relations are restored $newsletter->restore(); - $sending_queue = SendingQueue::where('newsletter_id', $newsletter->id)->findOne(); - expect($sending_queue->deleted_at)->null(); + expect(SendingQueue::whereNull('deleted_at')->findArray())->count(5); } function testItTrashesAllQueueAssociationsWhenNewslettersAreBulkTrashed() { @@ -480,16 +492,13 @@ class NewsletterTest extends MailPoetTest { $sending_queue->newsletter_id = $newsletter->id; $sending_queue->save(); } - expect(Newsletter::findArray())->count(5); - expect(SendingQueue::findArray())->count(5); + expect(Newsletter::whereNull('deleted_at')->findArray())->count(5); + expect(SendingQueue::whereNull('deleted_at')->findArray())->count(5); // bulk trash newsletters and check that relations are trashed Newsletter::bulkTrash(ORM::forTable(Newsletter::$_table)); - $newsletters = Newsletter::findMany(); - foreach($newsletters as $newsletter) { - expect($newsletter->deleted_at)->notNull(); - expect($newsletter->queue()->findOne()->deleted_at)->notNull(); - } + expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(5); + expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(5); } function testItBulkRestoresTrashedQueueAssociationsWhenNewslettersAreBulkRestored() { @@ -510,16 +519,14 @@ class NewsletterTest extends MailPoetTest { $sending_queue->deleted_at = date('Y-m-d H:i:s'); $sending_queue->save(); } - expect(Newsletter::findArray())->count(5); - expect(SendingQueue::findArray())->count(5); + expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(5); + expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(5); // bulk restore newsletters and check that relations are restored Newsletter::bulkRestore(ORM::forTable(Newsletter::$_table)); - $newsletters = Newsletter::findMany(); - foreach($newsletters as $newsletter) { - expect($newsletter->deleted_at)->null(); - expect($newsletter->queue()->findOne()->deleted_at)->null(); - } + expect(Newsletter::whereNull('deleted_at')->findArray())->count(5); + expect(SendingQueue::whereNull('deleted_at')->findArray())->count(5); + } function testItBulkDeletesSegmentAndQueueAssociationsWhenNewslettersAreBulkDeleted() {