Listing method update for Newsletters/Forms/Segments/Subscribers
- updated unit tests
This commit is contained in:
@ -456,20 +456,28 @@ const Listing = React.createClass({
|
||||
sort_by: this.state.sort_by,
|
||||
sort_order: this.state.sort_order
|
||||
}
|
||||
}).always(() => {
|
||||
this.setState({ loading: false });
|
||||
}).done((response) => {
|
||||
this.setState({
|
||||
items: response.items || [],
|
||||
filters: response.filters || {},
|
||||
groups: response.groups || [],
|
||||
count: response.count || 0,
|
||||
loading: false
|
||||
items: response.data || [],
|
||||
filters: response.meta.filters || {},
|
||||
groups: response.meta.groups || [],
|
||||
count: response.meta.count || 0
|
||||
}, () => {
|
||||
// if viewing an empty trash
|
||||
if (this.state.group === 'trash' && response.count === 0) {
|
||||
if (this.state.group === 'trash' && response.meta.count === 0) {
|
||||
// redirect to default group
|
||||
this.handleGroup('all');
|
||||
}
|
||||
});
|
||||
}).fail(function(response) {
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true }
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
@ -32,8 +32,8 @@ class Forms extends APIEndpoint {
|
||||
|
||||
$listing_data = $listing->get();
|
||||
|
||||
// fetch segments relations for each returned item
|
||||
foreach($listing_data['items'] as $key => $form) {
|
||||
$data = array();
|
||||
foreach($listing_data['items'] as $form) {
|
||||
$form = $form->asArray();
|
||||
|
||||
$form['signups'] = StatisticsForms::getTotalSignups($form['id']);
|
||||
@ -43,10 +43,15 @@ class Forms extends APIEndpoint {
|
||||
? $form['settings']['segments']
|
||||
: array()
|
||||
);
|
||||
$listing_data['items'][$key] = $form;
|
||||
|
||||
$data[] = $form;
|
||||
}
|
||||
|
||||
return $listing_data;
|
||||
return $this->successResponse($data, array(
|
||||
'count' => $listing_data['count'],
|
||||
'filters' => $listing_data['filters'],
|
||||
'groups' => $listing_data['groups']
|
||||
));
|
||||
}
|
||||
|
||||
function create() {
|
||||
|
@ -285,15 +285,14 @@ class Newsletters extends APIEndpoint {
|
||||
}
|
||||
|
||||
function listing($data = array()) {
|
||||
|
||||
$listing = new Listing\Handler(
|
||||
'\MailPoet\Models\Newsletter',
|
||||
$data
|
||||
);
|
||||
$listing_data = $listing->get();
|
||||
$subscriber = Subscriber::getCurrentWPUser();
|
||||
|
||||
foreach($listing_data['items'] as $key => $newsletter) {
|
||||
$data = array();
|
||||
foreach($listing_data['items'] as $newsletter) {
|
||||
$queue = false;
|
||||
|
||||
if($newsletter->type === Newsletter::TYPE_STANDARD) {
|
||||
@ -325,14 +324,18 @@ class Newsletters extends APIEndpoint {
|
||||
}
|
||||
|
||||
// get preview url
|
||||
$subscriber = Subscriber::getCurrentWPUser();
|
||||
$newsletter->preview_url = NewsletterUrl::getViewInBrowserUrl(
|
||||
$newsletter, $subscriber, $queue, $preview = true);
|
||||
|
||||
// convert object to array
|
||||
$listing_data['items'][$key] = $newsletter->asArray();
|
||||
$data[] = $newsletter->asArray();
|
||||
}
|
||||
|
||||
return $listing_data;
|
||||
return $this->successResponse($data, array(
|
||||
'count' => $listing_data['count'],
|
||||
'filters' => $listing_data['filters'],
|
||||
'groups' => $listing_data['groups']
|
||||
));
|
||||
}
|
||||
|
||||
function bulkAction($data = array()) {
|
||||
|
@ -32,18 +32,22 @@ class Segments extends APIEndpoint {
|
||||
|
||||
$listing_data = $listing->get();
|
||||
|
||||
// fetch segments relations for each returned item
|
||||
foreach($listing_data['items'] as $key => $segment) {
|
||||
$data = array();
|
||||
foreach($listing_data['items'] as $segment) {
|
||||
$segment->subscribers_url = admin_url(
|
||||
'admin.php?page=mailpoet-subscribers#/filter[segment='.$segment->id.']'
|
||||
);
|
||||
|
||||
$listing_data['items'][$key] = $segment
|
||||
$data[] = $segment
|
||||
->withSubscribersCount()
|
||||
->asArray();
|
||||
}
|
||||
|
||||
return $listing_data;
|
||||
return $this->successResponse($data, array(
|
||||
'count' => $listing_data['count'],
|
||||
'filters' => $listing_data['filters'],
|
||||
'groups' => $listing_data['groups']
|
||||
));
|
||||
}
|
||||
|
||||
function save($data = array()) {
|
||||
|
@ -41,14 +41,18 @@ class Subscribers extends APIEndpoint {
|
||||
|
||||
$listing_data = $listing->get();
|
||||
|
||||
// fetch segments relations for each returned item
|
||||
foreach($listing_data['items'] as $key => $subscriber) {
|
||||
$listing_data['items'][$key] = $subscriber
|
||||
$data = array();
|
||||
foreach($listing_data['items'] as $subscriber) {
|
||||
$data[] = $subscriber
|
||||
->withSubscriptions()
|
||||
->asArray();
|
||||
}
|
||||
|
||||
return $listing_data;
|
||||
return $this->successResponse($data, array(
|
||||
'count' => $listing_data['count'],
|
||||
'filters' => $listing_data['filters'],
|
||||
'groups' => $listing_data['groups']
|
||||
));
|
||||
}
|
||||
|
||||
function subscribe($data = array()) {
|
||||
|
@ -106,6 +106,7 @@ class Handler {
|
||||
);
|
||||
}
|
||||
|
||||
// get items and total count
|
||||
if(method_exists($this->model_class, 'listingQuery')) {
|
||||
$custom_query = call_user_func_array(
|
||||
array($this->model_class, 'listingQuery'),
|
||||
@ -135,7 +136,6 @@ class Handler {
|
||||
->findMany();
|
||||
}
|
||||
|
||||
|
||||
return array(
|
||||
'count' => $count,
|
||||
'filters' => $filters,
|
||||
|
@ -34,13 +34,17 @@ class FormsTest extends MailPoetTest {
|
||||
function testItCanGetListingData() {
|
||||
$router = new Forms();
|
||||
$response = $router->listing();
|
||||
expect($response)->hasKey('filters');
|
||||
expect($response)->hasKey('groups');
|
||||
expect($response['count'])->equals(3);
|
||||
expect($response['items'])->count(3);
|
||||
expect($response['items'][0]['name'])->equals('Form 1');
|
||||
expect($response['items'][1]['name'])->equals('Form 2');
|
||||
expect($response['items'][2]['name'])->equals('Form 3');
|
||||
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
|
||||
expect($response->meta)->hasKey('filters');
|
||||
expect($response->meta)->hasKey('groups');
|
||||
expect($response->meta['count'])->equals(3);
|
||||
|
||||
expect($response->data)->count(3);
|
||||
expect($response->data[0]['name'])->equals('Form 1');
|
||||
expect($response->data[1]['name'])->equals('Form 2');
|
||||
expect($response->data[2]['name'])->equals('Form 3');
|
||||
}
|
||||
|
||||
function testItCanCreateANewForm() {
|
||||
|
@ -220,25 +220,26 @@ class NewslettersTest extends MailPoetTest {
|
||||
$router = new Newsletters();
|
||||
$response = $router->listing();
|
||||
|
||||
expect($response)->hasKey('filters');
|
||||
expect($response)->hasKey('groups');
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
|
||||
expect($response['count'])->equals(2);
|
||||
expect($response['items'])->count(2);
|
||||
expect($response->meta)->hasKey('filters');
|
||||
expect($response->meta)->hasKey('groups');
|
||||
expect($response->meta['count'])->equals(2);
|
||||
|
||||
expect($response['items'][0]['subject'])->equals('My Standard Newsletter');
|
||||
expect($response['items'][1]['subject'])->equals('My Post Notification');
|
||||
expect($response->data)->count(2);
|
||||
expect($response->data[0]['subject'])->equals('My Standard Newsletter');
|
||||
expect($response->data[1]['subject'])->equals('My Post Notification');
|
||||
|
||||
// 1st subscriber has 2 segments
|
||||
expect($response['items'][0]['segments'])->count(2);
|
||||
expect($response['items'][0]['segments'][0]['id'])
|
||||
expect($response->data[0]['segments'])->count(2);
|
||||
expect($response->data[0]['segments'][0]['id'])
|
||||
->equals($segment_1->id);
|
||||
expect($response['items'][0]['segments'][1]['id'])
|
||||
expect($response->data[0]['segments'][1]['id'])
|
||||
->equals($segment_2->id);
|
||||
|
||||
// 2nd subscriber has 1 segment
|
||||
expect($response['items'][1]['segments'])->count(1);
|
||||
expect($response['items'][1]['segments'][0]['id'])
|
||||
expect($response->data[1]['segments'])->count(1);
|
||||
expect($response->data[1]['segments'][0]['id'])
|
||||
->equals($segment_2->id);
|
||||
}
|
||||
|
||||
@ -279,9 +280,11 @@ class NewslettersTest extends MailPoetTest {
|
||||
)
|
||||
));
|
||||
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
|
||||
// we should only get the standard newsletter
|
||||
expect($response['count'])->equals(1);
|
||||
expect($response['items'][0]['subject'])->equals($this->newsletter->subject);
|
||||
expect($response->meta['count'])->equals(1);
|
||||
expect($response->data[0]['subject'])->equals($this->newsletter->subject);
|
||||
|
||||
// filter by 2nd segment
|
||||
$response = $router->listing(array(
|
||||
@ -290,8 +293,10 @@ class NewslettersTest extends MailPoetTest {
|
||||
)
|
||||
));
|
||||
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
|
||||
// we should have the 2 newsletters
|
||||
expect($response['count'])->equals(2);
|
||||
expect($response->meta['count'])->equals(2);
|
||||
}
|
||||
|
||||
function testItCanLimitListing() {
|
||||
@ -303,9 +308,11 @@ class NewslettersTest extends MailPoetTest {
|
||||
'sort_order' => 'asc'
|
||||
));
|
||||
|
||||
expect($response['count'])->equals(2);
|
||||
expect($response['items'])->count(1);
|
||||
expect($response['items'][0]['subject'])->equals(
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
|
||||
expect($response->meta['count'])->equals(2);
|
||||
expect($response->data)->count(1);
|
||||
expect($response->data[0]['subject'])->equals(
|
||||
$this->post_notification->subject
|
||||
);
|
||||
|
||||
@ -317,9 +324,9 @@ class NewslettersTest extends MailPoetTest {
|
||||
'sort_order' => 'asc'
|
||||
));
|
||||
|
||||
expect($response['count'])->equals(2);
|
||||
expect($response['items'])->count(1);
|
||||
expect($response['items'][0]['subject'])->equals(
|
||||
expect($response->meta['count'])->equals(2);
|
||||
expect($response->data)->count(1);
|
||||
expect($response->data[0]['subject'])->equals(
|
||||
$this->newsletter->subject
|
||||
);
|
||||
}
|
||||
|
@ -31,15 +31,17 @@ class SegmentsTest extends MailPoetTest {
|
||||
function testItCanGetListingData() {
|
||||
$router = new Segments();
|
||||
$response = $router->listing();
|
||||
expect($response)->hasKey('filters');
|
||||
expect($response)->hasKey('groups');
|
||||
|
||||
expect($response['count'])->equals(3);
|
||||
expect($response['items'])->count(3);
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
|
||||
expect($response['items'][0]['name'])->equals($this->segment_1->name);
|
||||
expect($response['items'][1]['name'])->equals($this->segment_2->name);
|
||||
expect($response['items'][2]['name'])->equals($this->segment_3->name);
|
||||
expect($response->meta)->hasKey('filters');
|
||||
expect($response->meta)->hasKey('groups');
|
||||
expect($response->meta['count'])->equals(3);
|
||||
|
||||
expect($response->data)->count(3);
|
||||
expect($response->data[0]['name'])->equals($this->segment_1->name);
|
||||
expect($response->data[1]['name'])->equals($this->segment_2->name);
|
||||
expect($response->data[2]['name'])->equals($this->segment_3->name);
|
||||
}
|
||||
|
||||
function testItCanSaveASegment() {
|
||||
|
@ -155,7 +155,7 @@ class SubscribersTest extends MailPoetTest {
|
||||
));
|
||||
|
||||
// it should return all subscribers
|
||||
expect($response['count'])->equals(2);
|
||||
expect($response->meta['count'])->equals(2);
|
||||
|
||||
// filter by 1st segment
|
||||
$response = $router->listing(array(
|
||||
@ -164,8 +164,8 @@ class SubscribersTest extends MailPoetTest {
|
||||
)
|
||||
));
|
||||
|
||||
expect($response['count'])->equals(1);
|
||||
expect($response['items'][0]['email'])->equals($this->subscriber_2->email);
|
||||
expect($response->meta['count'])->equals(1);
|
||||
expect($response->data[0]['email'])->equals($this->subscriber_2->email);
|
||||
|
||||
// filter by 2nd segment
|
||||
$response = $router->listing(array(
|
||||
@ -174,8 +174,8 @@ class SubscribersTest extends MailPoetTest {
|
||||
)
|
||||
));
|
||||
|
||||
expect($response['count'])->equals(1);
|
||||
expect($response['items'][0]['email'])->equals($this->subscriber_2->email);
|
||||
expect($response->meta['count'])->equals(1);
|
||||
expect($response->data[0]['email'])->equals($this->subscriber_2->email);
|
||||
}
|
||||
|
||||
function testItCanSearchListing() {
|
||||
@ -191,29 +191,29 @@ class SubscribersTest extends MailPoetTest {
|
||||
$response = $router->listing(array(
|
||||
'search' => ''
|
||||
));
|
||||
expect($response['count'])->equals(3);
|
||||
expect($response->meta['count'])->equals(3);
|
||||
|
||||
// search by email
|
||||
$response = $router->listing(array(
|
||||
'search' => '.me'
|
||||
));
|
||||
expect($response['count'])->equals(1);
|
||||
expect($response['items'][0]['email'])->equals($new_subscriber->email);
|
||||
expect($response->meta['count'])->equals(1);
|
||||
expect($response->data[0]['email'])->equals($new_subscriber->email);
|
||||
|
||||
// search by last name
|
||||
$response = $router->listing(array(
|
||||
'search' => 'doe'
|
||||
));
|
||||
expect($response['count'])->equals(2);
|
||||
expect($response['items'][0]['email'])->equals($this->subscriber_1->email);
|
||||
expect($response['items'][1]['email'])->equals($this->subscriber_2->email);
|
||||
expect($response->meta['count'])->equals(2);
|
||||
expect($response->data[0]['email'])->equals($this->subscriber_1->email);
|
||||
expect($response->data[1]['email'])->equals($this->subscriber_2->email);
|
||||
|
||||
// search by first name
|
||||
$response = $router->listing(array(
|
||||
'search' => 'billy'
|
||||
));
|
||||
expect($response['count'])->equals(1);
|
||||
expect($response['items'][0]['email'])->equals($new_subscriber->email);
|
||||
expect($response->meta['count'])->equals(1);
|
||||
expect($response->data[0]['email'])->equals($new_subscriber->email);
|
||||
}
|
||||
|
||||
function testItCanGroupListing() {
|
||||
@ -222,28 +222,28 @@ class SubscribersTest extends MailPoetTest {
|
||||
$subscribed_group = $router->listing(array(
|
||||
'group' => Subscriber::STATUS_SUBSCRIBED
|
||||
));
|
||||
expect($subscribed_group['count'])->equals(1);
|
||||
expect($subscribed_group['items'][0]['email'])->equals(
|
||||
expect($subscribed_group->meta['count'])->equals(1);
|
||||
expect($subscribed_group->data[0]['email'])->equals(
|
||||
$this->subscriber_2->email
|
||||
);
|
||||
|
||||
$unsubscribed_group = $router->listing(array(
|
||||
'group' => Subscriber::STATUS_UNSUBSCRIBED
|
||||
));
|
||||
expect($unsubscribed_group['count'])->equals(0);
|
||||
expect($unsubscribed_group->meta['count'])->equals(0);
|
||||
|
||||
$unconfirmed_group = $router->listing(array(
|
||||
'group' => Subscriber::STATUS_UNCONFIRMED
|
||||
));
|
||||
expect($unconfirmed_group['count'])->equals(1);
|
||||
expect($unconfirmed_group['items'][0]['email'])->equals(
|
||||
expect($unconfirmed_group->meta['count'])->equals(1);
|
||||
expect($unconfirmed_group->data[0]['email'])->equals(
|
||||
$this->subscriber_1->email
|
||||
);
|
||||
|
||||
$trashed_group = $router->listing(array(
|
||||
'group' => 'trash'
|
||||
));
|
||||
expect($trashed_group['count'])->equals(0);
|
||||
expect($trashed_group->meta['count'])->equals(0);
|
||||
|
||||
// trash 1st subscriber
|
||||
$this->subscriber_1->trash();
|
||||
@ -251,8 +251,8 @@ class SubscribersTest extends MailPoetTest {
|
||||
$trashed_group = $router->listing(array(
|
||||
'group' => 'trash'
|
||||
));
|
||||
expect($trashed_group['count'])->equals(1);
|
||||
expect($trashed_group['items'][0]['email'])->equals(
|
||||
expect($trashed_group->meta['count'])->equals(1);
|
||||
expect($trashed_group->data[0]['email'])->equals(
|
||||
$this->subscriber_1->email
|
||||
);
|
||||
}
|
||||
@ -266,9 +266,9 @@ class SubscribersTest extends MailPoetTest {
|
||||
'sort_order' => 'asc'
|
||||
));
|
||||
|
||||
expect($response['count'])->equals(2);
|
||||
expect($response['items'])->count(1);
|
||||
expect($response['items'][0]['email'])->equals(
|
||||
expect($response->meta['count'])->equals(2);
|
||||
expect($response->data)->count(1);
|
||||
expect($response->data[0]['email'])->equals(
|
||||
$this->subscriber_2->email
|
||||
);
|
||||
|
||||
@ -280,9 +280,9 @@ class SubscribersTest extends MailPoetTest {
|
||||
'sort_order' => 'asc'
|
||||
));
|
||||
|
||||
expect($response['count'])->equals(2);
|
||||
expect($response['items'])->count(1);
|
||||
expect($response['items'][0]['email'])->equals(
|
||||
expect($response->meta['count'])->equals(2);
|
||||
expect($response->data)->count(1);
|
||||
expect($response->data[0]['email'])->equals(
|
||||
$this->subscriber_1->email
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user