Listing method update for Newsletters/Forms/Segments/Subscribers

- updated unit tests
This commit is contained in:
Jonathan Labreuille
2016-09-08 14:34:21 +02:00
parent d6eaa4ac8a
commit 0c5589a3e3
10 changed files with 123 additions and 86 deletions

View File

@ -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 }
);
}
});
}
},

View File

@ -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() {

View File

@ -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()) {

View File

@ -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()) {

View File

@ -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()) {

View File

@ -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,

View File

@ -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() {

View File

@ -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
);
}

View File

@ -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() {

View File

@ -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
);
}