- Fixes mailer error message not being displayed when newsletter preview

sending fails
This commit is contained in:
Vlad
2017-01-04 13:04:53 -05:00
parent f5dce907ff
commit 3a1568a31d
2 changed files with 112 additions and 79 deletions

View File

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

View File

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