Trashes/restores multiple associated queues when newsletter is

trashed/restored
This commit is contained in:
Vlad
2017-05-01 20:15:41 -04:00
parent e29ae4d7c9
commit a0289775cb
2 changed files with 51 additions and 42 deletions

View File

@@ -86,10 +86,12 @@ class Newsletter extends Model {
} }
function trash() { function trash() {
// trash queue association // trash queue associations
if($queue = $this->queue()->findOne()) { SendingQueue::rawExecute(
$queue->trash(); 'UPDATE `' . SendingQueue::$_table . '` ' .
} 'SET `deleted_at` = NOW() ' .
'WHERE `newsletter_id` = ' . $this->id
);
return parent::trash(); return parent::trash();
} }
@@ -113,9 +115,7 @@ class Newsletter extends Model {
// delete segment associations // delete segment associations
$this->segmentRelations()->deleteMany(); $this->segmentRelations()->deleteMany();
// delete queue association // delete queue association
if($queue = $this->queue()->findOne()) { $this->queue()->deleteMany();
$queue->delete();
}
return parent::delete(); return parent::delete();
} }
@@ -137,10 +137,12 @@ class Newsletter extends Model {
} }
function restore() { function restore() {
// restore trashed queue association // trash queue associations
if($queue = $this->queue()->findOne()) { SendingQueue::rawExecute(
$queue->restore(); 'UPDATE `' . SendingQueue::$_table . '` ' .
} 'SET `deleted_at` = null ' .
'WHERE `newsletter_id` = ' . $this->id
);
if($this->status == self::STATUS_SENDING) { if($this->status == self::STATUS_SENDING) {
$this->set('status', self::STATUS_DRAFT); $this->set('status', self::STATUS_DRAFT);

View File

@@ -439,29 +439,41 @@ class NewsletterTest extends MailPoetTest {
expect($newsletter_segments)->isEmpty(); expect($newsletter_segments)->isEmpty();
} }
function testItTrashesQueueAssociationWhenNewsletterIsTrashed() { function testItTrashesQueueAssociationsWhenNewsletterIsTrashed() {
// make sure relation exists // delete default records
$newsletter = $this->newsletter; $this->_after();
$sending_queue = SendingQueue::where('newsletter_id', $newsletter->id)->findOne();
expect($sending_queue->deleted_at)->null();
// 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(); $newsletter->trash();
$sending_queue = SendingQueue::where('newsletter_id', $newsletter->id)->findOne(); expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(5);
expect($sending_queue->deleted_at)->notNull();
} }
function testItRestoresTrashedQueueAssociationWhenNewsletterIsRestored() { function testItRestoresTrashedQueueAssociationsWhenNewsletterIsRestored() {
// trash newsletter and check that relation is trashed // delete default records
$newsletter = $this->newsletter; $this->_after();
$newsletter->trash();
$sending_queue = SendingQueue::where('newsletter_id', $newsletter->id)->findOne();
expect($sending_queue->deleted_at)->notNull();
// 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(); $newsletter->restore();
$sending_queue = SendingQueue::where('newsletter_id', $newsletter->id)->findOne(); expect(SendingQueue::whereNull('deleted_at')->findArray())->count(5);
expect($sending_queue->deleted_at)->null();
} }
function testItTrashesAllQueueAssociationsWhenNewslettersAreBulkTrashed() { function testItTrashesAllQueueAssociationsWhenNewslettersAreBulkTrashed() {
@@ -480,16 +492,13 @@ class NewsletterTest extends MailPoetTest {
$sending_queue->newsletter_id = $newsletter->id; $sending_queue->newsletter_id = $newsletter->id;
$sending_queue->save(); $sending_queue->save();
} }
expect(Newsletter::findArray())->count(5); expect(Newsletter::whereNull('deleted_at')->findArray())->count(5);
expect(SendingQueue::findArray())->count(5); expect(SendingQueue::whereNull('deleted_at')->findArray())->count(5);
// bulk trash newsletters and check that relations are trashed // bulk trash newsletters and check that relations are trashed
Newsletter::bulkTrash(ORM::forTable(Newsletter::$_table)); Newsletter::bulkTrash(ORM::forTable(Newsletter::$_table));
$newsletters = Newsletter::findMany(); expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(5);
foreach($newsletters as $newsletter) { expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(5);
expect($newsletter->deleted_at)->notNull();
expect($newsletter->queue()->findOne()->deleted_at)->notNull();
}
} }
function testItBulkRestoresTrashedQueueAssociationsWhenNewslettersAreBulkRestored() { function testItBulkRestoresTrashedQueueAssociationsWhenNewslettersAreBulkRestored() {
@@ -510,16 +519,14 @@ class NewsletterTest extends MailPoetTest {
$sending_queue->deleted_at = date('Y-m-d H:i:s'); $sending_queue->deleted_at = date('Y-m-d H:i:s');
$sending_queue->save(); $sending_queue->save();
} }
expect(Newsletter::findArray())->count(5); expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(5);
expect(SendingQueue::findArray())->count(5); expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(5);
// bulk restore newsletters and check that relations are restored // bulk restore newsletters and check that relations are restored
Newsletter::bulkRestore(ORM::forTable(Newsletter::$_table)); Newsletter::bulkRestore(ORM::forTable(Newsletter::$_table));
$newsletters = Newsletter::findMany(); expect(Newsletter::whereNull('deleted_at')->findArray())->count(5);
foreach($newsletters as $newsletter) { expect(SendingQueue::whereNull('deleted_at')->findArray())->count(5);
expect($newsletter->deleted_at)->null();
expect($newsletter->queue()->findOne()->deleted_at)->null();
}
} }
function testItBulkDeletesSegmentAndQueueAssociationsWhenNewslettersAreBulkDeleted() { function testItBulkDeletesSegmentAndQueueAssociationsWhenNewslettersAreBulkDeleted() {