Merge pull request #1256 from mailpoet/bugfix

fixing Segment::bulkDelete not deleting subscribers assiciations [MAILPOET-1287]
This commit is contained in:
stoletniy
2018-02-05 17:53:04 +03:00
committed by GitHub
3 changed files with 19 additions and 1 deletions

View File

@ -258,9 +258,15 @@ class Segment extends Model {
static function bulkDelete($orm) { static function bulkDelete($orm) {
$count = parent::bulkAction($orm, function($ids) { $count = parent::bulkAction($orm, function($ids) {
// delete segments (only default) // delete segments (only default)
Segment::whereIn('id', $ids) $segments = Segment::whereIn('id', $ids)
->where('type', Segment::TYPE_DEFAULT) ->where('type', Segment::TYPE_DEFAULT)
->findMany();
$ids = array_map(function($segment) {
return $segment->id;
}, $segments);
SubscriberSegment::whereIn('segment_id', $ids)
->deleteMany(); ->deleteMany();
Segment::whereIn('id', $ids)->deleteMany();
}); });
return array('count' => $count); return array('count' => $count);

View File

@ -13,6 +13,7 @@ use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField; use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\NewsletterSegment; use MailPoet\Models\NewsletterSegment;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Models\SendingQueue; use MailPoet\Models\SendingQueue;
use MailPoet\Newsletter\Scheduler\Scheduler; use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Newsletter\Url; use MailPoet\Newsletter\Url;
@ -816,6 +817,7 @@ class NewslettersTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . NewsletterSegment::$_table); \ORM::raw_execute('TRUNCATE ' . NewsletterSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table); \ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
\ORM::raw_execute('TRUNCATE ' . Segment::$_table); \ORM::raw_execute('TRUNCATE ' . Segment::$_table);
\ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table); \ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
} }
} }

View File

@ -4,6 +4,8 @@ namespace MailPoet\Test\API\JSON\v1;
use MailPoet\API\JSON\v1\Segments; use MailPoet\API\JSON\v1\Segments;
use MailPoet\API\JSON\Response as APIResponse; use MailPoet\API\JSON\Response as APIResponse;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment;
class SegmentsTest extends \MailPoetTest { class SegmentsTest extends \MailPoetTest {
function _before() { function _before() {
@ -122,6 +124,12 @@ class SegmentsTest extends \MailPoetTest {
} }
function testItCanBulkDeleteSegments() { function testItCanBulkDeleteSegments() {
$subscriber_segment = SubscriberSegment::create(array(
'subscriber_id' => 1,
'segment_id' => $this->segment_1->id,
'status' => Subscriber::STATUS_SUBSCRIBED
));
$router = new Segments(); $router = new Segments();
$response = $router->bulkAction(array( $response = $router->bulkAction(array(
'action' => 'trash', 'action' => 'trash',
@ -145,6 +153,8 @@ class SegmentsTest extends \MailPoetTest {
)); ));
expect($response->status)->equals(APIResponse::STATUS_OK); expect($response->status)->equals(APIResponse::STATUS_OK);
expect($response->meta['count'])->equals(0); expect($response->meta['count'])->equals(0);
expect(SubscriberSegment::findOne($subscriber_segment->id))->equals(false);
} }
function _after() { function _after() {