Fix all lists removal when editing subscribers [MAILPOET-726]

This commit is contained in:
Alexey Stoletniy
2017-01-18 15:33:20 +03:00
parent 63d1fe17a9
commit ce0ad33c32
4 changed files with 48 additions and 6 deletions

View File

@ -107,6 +107,9 @@ class Subscribers extends APIEndpoint {
} }
function save($data = array()) { function save($data = array()) {
if (empty($data['segments'])) {
$data['segments'] = array();
}
$subscriber = Subscriber::createOrUpdate($data); $subscriber = Subscriber::createOrUpdate($data);
$errors = $subscriber->getErrors(); $errors = $subscriber->getErrors();

View File

@ -54,6 +54,15 @@ class SubscriberSegment extends Model {
return true; return true;
} }
static function resubscribeToAllSegments($subscriber) {
if($subscriber === false) return false;
// (re)subscribe to all segments linked to the subscriber
return self::where('subscriber_id', $subscriber->id)
->findResultSet()
->set('status', Subscriber::STATUS_SUBSCRIBED)
->save();
}
static function subscribeToSegments($subscriber, $segment_ids = array()) { static function subscribeToSegments($subscriber, $segment_ids = array()) {
if($subscriber === false) return false; if($subscriber === false) return false;
if(!empty($segment_ids)) { if(!empty($segment_ids)) {
@ -68,12 +77,6 @@ class SubscriberSegment extends Model {
} }
} }
return true; return true;
} else {
// (re)subscribe to all segments linked to the subscriber
return self::where('subscriber_id', $subscriber->id)
->findResultSet()
->set('status', Subscriber::STATUS_SUBSCRIBED)
->save();
} }
} }

View File

@ -116,6 +116,20 @@ class SubscribersTest extends MailPoetTest {
expect($response->data['first_name'])->equals('Super Jane'); expect($response->data['first_name'])->equals('Super Jane');
} }
function testItCanRemoveListsFromAnExistingSubscriber() {
$router = new Subscribers();
$subscriber_data = $this->subscriber_2->asArray();
unset($subscriber_data['created_at']);
unset($subscriber_data['segments']);
$response = $router->save($subscriber_data);
expect($response->status)->equals(APIResponse::STATUS_OK);
expect($response->data)->equals(
Subscriber::findOne($this->subscriber_2->id)->asArray()
);
expect($this->subscriber_2->segments()->findArray())->count(0);
}
function testItCanRestoreASubscriber() { function testItCanRestoreASubscriber() {
$this->subscriber_1->trash(); $this->subscriber_1->trash();

View File

@ -103,6 +103,28 @@ class SubscriberSegmentTest extends MailPoetTest {
expect($subscriptions_count)->equals(2); expect($subscriptions_count)->equals(2);
} }
function testItCanResubscribeToAllSegments() {
$result = SubscriberSegment::subscribeToSegments($this->subscriber, array(
$this->segment_1->id,
$this->segment_2->id
));
expect($result)->true();
$subscribed_segments = $this->subscriber->segments()->findArray();
expect($subscribed_segments)->count(2);
$result = SubscriberSegment::unsubscribeFromSegments($this->subscriber);
expect($result)->true();
$subscribed_segments = $this->subscriber->segments()->findArray();
expect($subscribed_segments)->count(0);
SubscriberSegment::resubscribeToAllSegments($this->subscriber);
$subscribed_segments = $this->subscriber->segments()->findArray();
expect($subscribed_segments)->count(2);
}
function testItCanDeleteSubscriptions() { function testItCanDeleteSubscriptions() {
SubscriberSegment::createOrUpdate(array( SubscriberSegment::createOrUpdate(array(
'subscriber_id' => $this->subscriber->id, 'subscriber_id' => $this->subscriber->id,