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