- 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,12 +1,12 @@
<?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 {
@ -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');
@ -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);
@ -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();