- Fixes mailer error message not being displayed when newsletter preview
sending fails
This commit is contained in:
@ -284,7 +284,7 @@ class Newsletters extends APIEndpoint {
|
|||||||
if($result['response'] === false) {
|
if($result['response'] === false) {
|
||||||
$error = sprintf(
|
$error = sprintf(
|
||||||
__('The email could not be sent: %s', 'mailpoet'),
|
__('The email could not be sent: %s', 'mailpoet'),
|
||||||
$result['error']
|
$result['error_message']
|
||||||
);
|
);
|
||||||
return $this->errorResponse(array(APIError::BAD_REQUEST => $error));
|
return $this->errorResponse(array(APIError::BAD_REQUEST => $error));
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,27 +1,27 @@
|
|||||||
<?php
|
<?php
|
||||||
use Codeception\Util\Fixtures;
|
use Codeception\Util\Fixtures;
|
||||||
use Codeception\Util\Stub;
|
use Codeception\Util\Stub;
|
||||||
use \MailPoet\API\Response as APIResponse;
|
use MailPoet\API\Endpoints\Newsletters;
|
||||||
use \MailPoet\API\Endpoints\Newsletters;
|
use MailPoet\API\Response as APIResponse;
|
||||||
use \MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
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\Newsletter\Scheduler\Scheduler;
|
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||||
|
|
||||||
class NewslettersTest extends MailPoetTest {
|
class NewslettersTest extends MailPoetTest {
|
||||||
function _before() {
|
function _before() {
|
||||||
$this->newsletter = Newsletter::createOrUpdate(array(
|
$this->newsletter = Newsletter::createOrUpdate(array(
|
||||||
'subject' => 'My Standard Newsletter',
|
'subject' => 'My Standard Newsletter',
|
||||||
'body' => Fixtures::get('newsletter_body_template'),
|
'body' => Fixtures::get('newsletter_body_template'),
|
||||||
'type' => Newsletter::TYPE_STANDARD,
|
'type' => Newsletter::TYPE_STANDARD,
|
||||||
));
|
));
|
||||||
|
|
||||||
$this->post_notification = Newsletter::createOrUpdate(array(
|
$this->post_notification = Newsletter::createOrUpdate(array(
|
||||||
'subject' => 'My Post Notification',
|
'subject' => 'My Post Notification',
|
||||||
'body' => Fixtures::get('newsletter_body_template'),
|
'body' => Fixtures::get('newsletter_body_template'),
|
||||||
'type' => Newsletter::TYPE_NOTIFICATION
|
'type' => Newsletter::TYPE_NOTIFICATION
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanGetANewsletter() {
|
function testItCanGetANewsletter() {
|
||||||
@ -63,7 +63,8 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
|
|
||||||
$router = new Newsletters();
|
$router = new Newsletters();
|
||||||
$response = $router->save($valid_data);
|
$response = $router->save($valid_data);
|
||||||
$saved_newsletter = Newsletter::filter('filterWithOptions')->findOne($response->data['id']);
|
$saved_newsletter = Newsletter::filter('filterWithOptions')
|
||||||
|
->findOne($response->data['id']);
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->data)->equals($saved_newsletter->asArray());
|
expect($response->data)->equals($saved_newsletter->asArray());
|
||||||
// newsletter option should be saved
|
// newsletter option should be saved
|
||||||
@ -131,7 +132,8 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
// schedule should be recalculated when options change
|
// schedule should be recalculated when options change
|
||||||
$newsletter_data['options']['intervalType'] = Scheduler::INTERVAL_IMMEDIATELY;
|
$newsletter_data['options']['intervalType'] = Scheduler::INTERVAL_IMMEDIATELY;
|
||||||
$response = $router->save($newsletter_data);
|
$response = $router->save($newsletter_data);
|
||||||
$saved_newsletter = Newsletter::filter('filterWithOptions')->findOne($response->data['id']);
|
$saved_newsletter = Newsletter::filter('filterWithOptions')
|
||||||
|
->findOne($response->data['id']);
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($saved_newsletter->schedule)->equals('* * * * *');
|
expect($saved_newsletter->schedule)->equals('* * * * *');
|
||||||
}
|
}
|
||||||
@ -144,14 +146,18 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
$newsletter_data = array(
|
$newsletter_data = array(
|
||||||
'id' => $this->newsletter->id,
|
'id' => $this->newsletter->id,
|
||||||
'subject' => 'My Updated Newsletter',
|
'subject' => 'My Updated Newsletter',
|
||||||
'segments' => array($segment_1->asArray(), $fake_segment_id)
|
'segments' => array(
|
||||||
|
$segment_1->asArray(),
|
||||||
|
$fake_segment_id
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$response = $router->save($newsletter_data);
|
$response = $router->save($newsletter_data);
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
|
|
||||||
$updated_newsletter =
|
$updated_newsletter =
|
||||||
Newsletter::findOne($this->newsletter->id)->withSegments();
|
Newsletter::findOne($this->newsletter->id)
|
||||||
|
->withSegments();
|
||||||
|
|
||||||
expect(count($updated_newsletter->segments))->equals(1);
|
expect(count($updated_newsletter->segments))->equals(1);
|
||||||
expect($updated_newsletter->segments[0]['name'])->equals('Segment 1');
|
expect($updated_newsletter->segments[0]['name'])->equals('Segment 1');
|
||||||
@ -161,32 +167,32 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
$router = new Newsletters();
|
$router = new Newsletters();
|
||||||
// set status to sending
|
// set status to sending
|
||||||
$response = $router->setStatus(array(
|
$response = $router->setStatus(array(
|
||||||
'id' => $this->newsletter->id,
|
'id' => $this->newsletter->id,
|
||||||
'status' => Newsletter::STATUS_SENDING
|
'status' => Newsletter::STATUS_SENDING
|
||||||
));
|
));
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->data['status'])->equals(Newsletter::STATUS_SENDING);
|
expect($response->data['status'])->equals(Newsletter::STATUS_SENDING);
|
||||||
|
|
||||||
// set status to draft
|
// set status to draft
|
||||||
$response = $router->setStatus(array(
|
$response = $router->setStatus(array(
|
||||||
'id' => $this->newsletter->id,
|
'id' => $this->newsletter->id,
|
||||||
'status' => Newsletter::STATUS_DRAFT
|
'status' => Newsletter::STATUS_DRAFT
|
||||||
));
|
));
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->data['status'])->equals(Newsletter::STATUS_DRAFT);
|
expect($response->data['status'])->equals(Newsletter::STATUS_DRAFT);
|
||||||
|
|
||||||
// no status specified throws an error
|
// no status specified throws an error
|
||||||
$response = $router->setStatus(array(
|
$response = $router->setStatus(array(
|
||||||
'id' => $this->newsletter->id,
|
'id' => $this->newsletter->id,
|
||||||
));
|
));
|
||||||
expect($response->status)->equals(APIResponse::STATUS_BAD_REQUEST);
|
expect($response->status)->equals(APIResponse::STATUS_BAD_REQUEST);
|
||||||
expect($response->errors[0]['message'])
|
expect($response->errors[0]['message'])
|
||||||
->equals('You need to specify a status.');
|
->equals('You need to specify a status.');
|
||||||
|
|
||||||
// invalid newsletter id throws an error
|
// invalid newsletter id throws an error
|
||||||
$response = $router->setStatus(array(
|
$response = $router->setStatus(array(
|
||||||
'status' => Newsletter::STATUS_DRAFT
|
'status' => Newsletter::STATUS_DRAFT
|
||||||
));
|
));
|
||||||
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
||||||
expect($response->errors[0]['message'])
|
expect($response->errors[0]['message'])
|
||||||
->equals('This newsletter does not exist.');
|
->equals('This newsletter does not exist.');
|
||||||
@ -202,7 +208,8 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
$response = $router->restore(array('id' => $this->newsletter->id));
|
$response = $router->restore(array('id' => $this->newsletter->id));
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->data)->equals(
|
expect($response->data)->equals(
|
||||||
Newsletter::findOne($this->newsletter->id)->asArray()
|
Newsletter::findOne($this->newsletter->id)
|
||||||
|
->asArray()
|
||||||
);
|
);
|
||||||
expect($response->data['deleted_at'])->null();
|
expect($response->data['deleted_at'])->null();
|
||||||
expect($response->meta['count'])->equals(1);
|
expect($response->meta['count'])->equals(1);
|
||||||
@ -213,7 +220,8 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
$response = $router->trash(array('id' => $this->newsletter->id));
|
$response = $router->trash(array('id' => $this->newsletter->id));
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->data)->equals(
|
expect($response->data)->equals(
|
||||||
Newsletter::findOne($this->newsletter->id)->asArray()
|
Newsletter::findOne($this->newsletter->id)
|
||||||
|
->asArray()
|
||||||
);
|
);
|
||||||
expect($response->data['deleted_at'])->notNull();
|
expect($response->data['deleted_at'])->notNull();
|
||||||
expect($response->meta['count'])->equals(1);
|
expect($response->meta['count'])->equals(1);
|
||||||
@ -273,23 +281,23 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
|
|
||||||
$newsletter_segment = NewsletterSegment::create();
|
$newsletter_segment = NewsletterSegment::create();
|
||||||
$newsletter_segment->hydrate(array(
|
$newsletter_segment->hydrate(array(
|
||||||
'newsletter_id' => $this->newsletter->id,
|
'newsletter_id' => $this->newsletter->id,
|
||||||
'segment_id' => $segment_1->id
|
'segment_id' => $segment_1->id
|
||||||
));
|
));
|
||||||
$newsletter_segment->save();
|
$newsletter_segment->save();
|
||||||
|
|
||||||
$newsletter_segment = NewsletterSegment::create();
|
$newsletter_segment = NewsletterSegment::create();
|
||||||
$newsletter_segment->hydrate(array(
|
$newsletter_segment->hydrate(array(
|
||||||
'newsletter_id' => $this->newsletter->id,
|
'newsletter_id' => $this->newsletter->id,
|
||||||
'segment_id' => $segment_2->id
|
'segment_id' => $segment_2->id
|
||||||
));
|
));
|
||||||
$newsletter_segment->save();
|
$newsletter_segment->save();
|
||||||
|
|
||||||
$newsletter_segment = NewsletterSegment::create();
|
$newsletter_segment = NewsletterSegment::create();
|
||||||
$newsletter_segment->hydrate(array(
|
$newsletter_segment->hydrate(array(
|
||||||
'newsletter_id' => $this->post_notification->id,
|
'newsletter_id' => $this->post_notification->id,
|
||||||
'segment_id' => $segment_2->id
|
'segment_id' => $segment_2->id
|
||||||
));
|
));
|
||||||
$newsletter_segment->save();
|
$newsletter_segment->save();
|
||||||
|
|
||||||
$router = new Newsletters();
|
$router = new Newsletters();
|
||||||
@ -326,34 +334,34 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
// link standard newsletter to the 2 segments
|
// link standard newsletter to the 2 segments
|
||||||
$newsletter_segment = NewsletterSegment::create();
|
$newsletter_segment = NewsletterSegment::create();
|
||||||
$newsletter_segment->hydrate(array(
|
$newsletter_segment->hydrate(array(
|
||||||
'newsletter_id' => $this->newsletter->id,
|
'newsletter_id' => $this->newsletter->id,
|
||||||
'segment_id' => $segment_1->id
|
'segment_id' => $segment_1->id
|
||||||
));
|
));
|
||||||
$newsletter_segment->save();
|
$newsletter_segment->save();
|
||||||
|
|
||||||
$newsletter_segment = NewsletterSegment::create();
|
$newsletter_segment = NewsletterSegment::create();
|
||||||
$newsletter_segment->hydrate(array(
|
$newsletter_segment->hydrate(array(
|
||||||
'newsletter_id' => $this->newsletter->id,
|
'newsletter_id' => $this->newsletter->id,
|
||||||
'segment_id' => $segment_2->id
|
'segment_id' => $segment_2->id
|
||||||
));
|
));
|
||||||
$newsletter_segment->save();
|
$newsletter_segment->save();
|
||||||
|
|
||||||
// link post notification to the 2nd segment
|
// link post notification to the 2nd segment
|
||||||
$newsletter_segment = NewsletterSegment::create();
|
$newsletter_segment = NewsletterSegment::create();
|
||||||
$newsletter_segment->hydrate(array(
|
$newsletter_segment->hydrate(array(
|
||||||
'newsletter_id' => $this->post_notification->id,
|
'newsletter_id' => $this->post_notification->id,
|
||||||
'segment_id' => $segment_2->id
|
'segment_id' => $segment_2->id
|
||||||
));
|
));
|
||||||
$newsletter_segment->save();
|
$newsletter_segment->save();
|
||||||
|
|
||||||
$router = new Newsletters();
|
$router = new Newsletters();
|
||||||
|
|
||||||
// filter by 1st segment
|
// filter by 1st segment
|
||||||
$response = $router->listing(array(
|
$response = $router->listing(array(
|
||||||
'filter' => array(
|
'filter' => array(
|
||||||
'segment' => $segment_1->id
|
'segment' => $segment_1->id
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
|
|
||||||
@ -363,10 +371,10 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
|
|
||||||
// filter by 2nd segment
|
// filter by 2nd segment
|
||||||
$response = $router->listing(array(
|
$response = $router->listing(array(
|
||||||
'filter' => array(
|
'filter' => array(
|
||||||
'segment' => $segment_2->id
|
'segment' => $segment_2->id
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
|
|
||||||
@ -378,10 +386,10 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
$router = new Newsletters();
|
$router = new Newsletters();
|
||||||
// get 1st page (limit items per page to 1)
|
// get 1st page (limit items per page to 1)
|
||||||
$response = $router->listing(array(
|
$response = $router->listing(array(
|
||||||
'limit' => 1,
|
'limit' => 1,
|
||||||
'sort_by' => 'subject',
|
'sort_by' => 'subject',
|
||||||
'sort_order' => 'asc'
|
'sort_order' => 'asc'
|
||||||
));
|
));
|
||||||
|
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
|
|
||||||
@ -393,11 +401,11 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
|
|
||||||
// get 1st page (limit items per page to 1)
|
// get 1st page (limit items per page to 1)
|
||||||
$response = $router->listing(array(
|
$response = $router->listing(array(
|
||||||
'limit' => 1,
|
'limit' => 1,
|
||||||
'offset' => 1,
|
'offset' => 1,
|
||||||
'sort_by' => 'subject',
|
'sort_by' => 'subject',
|
||||||
'sort_order' => 'asc'
|
'sort_order' => 'asc'
|
||||||
));
|
));
|
||||||
|
|
||||||
expect($response->meta['count'])->equals(2);
|
expect($response->meta['count'])->equals(2);
|
||||||
expect($response->data)->count(1);
|
expect($response->data)->count(1);
|
||||||
@ -414,11 +422,11 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
|
|
||||||
$router = new Newsletters();
|
$router = new Newsletters();
|
||||||
$response = $router->bulkAction(array(
|
$response = $router->bulkAction(array(
|
||||||
'listing' => array(
|
'listing' => array(
|
||||||
'selection' => $selection_ids
|
'selection' => $selection_ids
|
||||||
),
|
),
|
||||||
'action' => 'delete'
|
'action' => 'delete'
|
||||||
));
|
));
|
||||||
|
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->meta['count'])->equals(count($selection_ids));
|
expect($response->meta['count'])->equals(count($selection_ids));
|
||||||
@ -427,24 +435,24 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
function testItCanBulkDeleteNewsletters() {
|
function testItCanBulkDeleteNewsletters() {
|
||||||
$router = new Newsletters();
|
$router = new Newsletters();
|
||||||
$response = $router->bulkAction(array(
|
$response = $router->bulkAction(array(
|
||||||
'action' => 'trash',
|
'action' => 'trash',
|
||||||
'listing' => array('group' => 'all')
|
'listing' => array('group' => 'all')
|
||||||
));
|
));
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->meta['count'])->equals(2);
|
expect($response->meta['count'])->equals(2);
|
||||||
|
|
||||||
$router = new Newsletters();
|
$router = new Newsletters();
|
||||||
$response = $router->bulkAction(array(
|
$response = $router->bulkAction(array(
|
||||||
'action' => 'delete',
|
'action' => 'delete',
|
||||||
'listing' => array('group' => 'trash')
|
'listing' => array('group' => 'trash')
|
||||||
));
|
));
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->meta['count'])->equals(2);
|
expect($response->meta['count'])->equals(2);
|
||||||
|
|
||||||
$response = $router->bulkAction(array(
|
$response = $router->bulkAction(array(
|
||||||
'action' => 'delete',
|
'action' => 'delete',
|
||||||
'listing' => array('group' => 'trash')
|
'listing' => array('group' => 'trash')
|
||||||
));
|
));
|
||||||
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);
|
||||||
}
|
}
|
||||||
@ -471,6 +479,31 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItReturnsMaillerErrorWhenSendingFailed() {
|
||||||
|
$subscriber = 'test@subscriber.com';
|
||||||
|
$data = array(
|
||||||
|
'subscriber' => $subscriber,
|
||||||
|
'id' => $this->newsletter->id,
|
||||||
|
'mailer' => Stub::makeEmpty(
|
||||||
|
'\MailPoet\Mailer\Mailer',
|
||||||
|
array(
|
||||||
|
'send' => function($newsletter, $subscriber) {
|
||||||
|
expect(is_array($newsletter))->true();
|
||||||
|
expect($newsletter['body']['text'])->contains('Hello test');
|
||||||
|
expect($subscriber)->equals($subscriber);
|
||||||
|
return array(
|
||||||
|
'response' => false,
|
||||||
|
'error_message' => 'failed'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$router = new Newsletters();
|
||||||
|
$response = $router->sendPreview($data);
|
||||||
|
expect($response->errors[0]['message'])->equals('The email could not be sent: failed');
|
||||||
|
}
|
||||||
|
|
||||||
function _after() {
|
function _after() {
|
||||||
Newsletter::deleteMany();
|
Newsletter::deleteMany();
|
||||||
NewsletterSegment::deleteMany();
|
NewsletterSegment::deleteMany();
|
||||||
|
Reference in New Issue
Block a user