Use mailer from DI in preview, remove $data['mailer'] param (misused for tests only)

[MAILPOET-2515]
This commit is contained in:
Jan Jakeš
2019-11-11 14:20:51 +01:00
committed by Jack Kitterhing
parent ad9793f511
commit 1da56efd32
2 changed files with 42 additions and 26 deletions

View File

@ -10,6 +10,7 @@ use MailPoet\Config\AccessControl;
use MailPoet\Cron\CronHelper; use MailPoet\Cron\CronHelper;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterQueueTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterQueueTask;
use MailPoet\Listing; use MailPoet\Listing;
use MailPoet\Mailer\Mailer as MailerFactory;
use MailPoet\Mailer\MetaInfo; use MailPoet\Mailer\MetaInfo;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption; use MailPoet\Models\NewsletterOption;
@ -71,6 +72,9 @@ class Newsletters extends APIEndpoint {
/** @var Emoji */ /** @var Emoji */
private $emoji; private $emoji;
/** @var MailerFactory */
private $mailer;
function __construct( function __construct(
Listing\BulkActionController $bulk_action, Listing\BulkActionController $bulk_action,
Listing\Handler $listing_handler, Listing\Handler $listing_handler,
@ -82,6 +86,7 @@ class Newsletters extends APIEndpoint {
NewslettersRepository $newsletters_repository, NewslettersRepository $newsletters_repository,
NewslettersResponseBuilder $newsletters_response_builder, NewslettersResponseBuilder $newsletters_response_builder,
PostNotificationScheduler $post_notification_scheduler, PostNotificationScheduler $post_notification_scheduler,
MailerFactory $mailer,
MetaInfo $mailerMetaInfo, MetaInfo $mailerMetaInfo,
Emoji $emoji Emoji $emoji
) { ) {
@ -95,6 +100,7 @@ class Newsletters extends APIEndpoint {
$this->newsletters_repository = $newsletters_repository; $this->newsletters_repository = $newsletters_repository;
$this->newsletters_response_builder = $newsletters_response_builder; $this->newsletters_response_builder = $newsletters_response_builder;
$this->post_notification_scheduler = $post_notification_scheduler; $this->post_notification_scheduler = $post_notification_scheduler;
$this->mailer = $mailer;
$this->mailerMetaInfo = $mailerMetaInfo; $this->mailerMetaInfo = $mailerMetaInfo;
$this->emoji = $emoji; $this->emoji = $emoji;
} }
@ -475,14 +481,11 @@ class Newsletters extends APIEndpoint {
$rendered_newsletter['id'] = $newsletter->id; $rendered_newsletter['id'] = $newsletter->id;
try { try {
$mailer = (!empty($data['mailer'])) ?
$data['mailer'] :
new \MailPoet\Mailer\Mailer();
$extra_params = [ $extra_params = [
'unsubscribe_url' => WPFunctions::get()->homeUrl(), 'unsubscribe_url' => WPFunctions::get()->homeUrl(),
'meta' => $this->mailerMetaInfo->getPreviewMetaInfo(), 'meta' => $this->mailerMetaInfo->getPreviewMetaInfo(),
]; ];
$result = $mailer->send($rendered_newsletter, $data['subscriber'], $extra_params); $result = $this->mailer->send($rendered_newsletter, $data['subscriber'], $extra_params);
if ($result['response'] === false) { if ($result['response'] === false) {
$error = sprintf( $error = sprintf(

View File

@ -14,6 +14,8 @@ use MailPoet\Cron\CronHelper;
use MailPoet\DI\ContainerWrapper; use MailPoet\DI\ContainerWrapper;
use MailPoet\Listing\BulkActionController; use MailPoet\Listing\BulkActionController;
use MailPoet\Listing\Handler; use MailPoet\Listing\Handler;
use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\MetaInfo; use MailPoet\Mailer\MetaInfo;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption; use MailPoet\Models\NewsletterOption;
@ -145,6 +147,7 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(NewslettersRepository::class), ContainerWrapper::getInstance()->get(NewslettersRepository::class),
ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class), ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class),
ContainerWrapper::getInstance()->get(PostNotificationScheduler::class), ContainerWrapper::getInstance()->get(PostNotificationScheduler::class),
ContainerWrapper::getInstance()->get(Mailer::class),
ContainerWrapper::getInstance()->get(MetaInfo::class), ContainerWrapper::getInstance()->get(MetaInfo::class),
ContainerWrapper::getInstance()->get(Emoji::class) ContainerWrapper::getInstance()->get(Emoji::class)
); );
@ -200,6 +203,7 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(NewslettersRepository::class), ContainerWrapper::getInstance()->get(NewslettersRepository::class),
ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class), ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class),
ContainerWrapper::getInstance()->get(PostNotificationScheduler::class), ContainerWrapper::getInstance()->get(PostNotificationScheduler::class),
ContainerWrapper::getInstance()->get(Mailer::class),
ContainerWrapper::getInstance()->get(MetaInfo::class), ContainerWrapper::getInstance()->get(MetaInfo::class),
$emoji $emoji
); );
@ -574,6 +578,7 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(NewslettersRepository::class), ContainerWrapper::getInstance()->get(NewslettersRepository::class),
ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class), ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class),
ContainerWrapper::getInstance()->get(PostNotificationScheduler::class), ContainerWrapper::getInstance()->get(PostNotificationScheduler::class),
ContainerWrapper::getInstance()->get(Mailer::class),
ContainerWrapper::getInstance()->get(MetaInfo::class), ContainerWrapper::getInstance()->get(MetaInfo::class),
ContainerWrapper::getInstance()->get(Emoji::class) ContainerWrapper::getInstance()->get(Emoji::class)
); );
@ -825,19 +830,17 @@ class NewslettersTest extends \MailPoetTest {
function testItCanSendAPreview() { function testItCanSendAPreview() {
$subscriber = 'test@subscriber.com'; $subscriber = 'test@subscriber.com';
$unsubscribeLink = $this->subscription_url_factory->getUnsubscribeUrl(null);
$manageLink = $this->subscription_url_factory->getManageUrl(null);
$viewInBrowserLink = Url::getViewInBrowserUrl(null, $this->newsletter, false, false, true); $endpoint = Stub::copy($this->endpoint, [
$mailerMetaInfo = new MetaInfo; 'mailer' => $this->makeEmpty(
$data = [ Mailer::class,
'subscriber' => $subscriber,
'id' => $this->newsletter->id,
'mailer' => Stub::makeEmpty(
'\MailPoet\Mailer\Mailer',
[ [
'send' => function($newsletter, $subscriber, $extra_params) 'send' => function ($newsletter, $subscriber, $extra_params) {
use ($unsubscribeLink, $manageLink, $viewInBrowserLink, $mailerMetaInfo) $unsubscribeLink = $this->subscription_url_factory->getUnsubscribeUrl(null);
{ $manageLink = $this->subscription_url_factory->getManageUrl(null);
$viewInBrowserLink = Url::getViewInBrowserUrl(null, $this->newsletter, false, false, true);
$mailerMetaInfo = new MetaInfo;
expect(is_array($newsletter))->true(); expect(is_array($newsletter))->true();
expect($newsletter['body']['text'])->contains('Hello test'); expect($newsletter['body']['text'])->contains('Hello test');
@ -852,27 +855,31 @@ class NewslettersTest extends \MailPoetTest {
}, },
] ]
), ),
]);
$data = [
'subscriber' => $subscriber,
'id' => $this->newsletter->id,
]; ];
$response = $this->endpoint->sendPreview($data); $response = $endpoint->sendPreview($data);
expect($response->status)->equals(APIResponse::STATUS_OK); expect($response->status)->equals(APIResponse::STATUS_OK);
} }
function testItReturnsMailerErrorWhenSendingFailed() { function testItReturnsMailerErrorWhenSendingFailed() {
$subscriber = 'test@subscriber.com'; $subscriber = 'test@subscriber.com';
$data = [
'subscriber' => $subscriber, $endpoint = Stub::copy($this->endpoint, [
'id' => $this->newsletter->id, 'mailer' => $this->makeEmpty(
'mailer' => Stub::makeEmpty( Mailer::class,
'\MailPoet\Mailer\Mailer',
[ [
'send' => function($newsletter, $subscriber) { 'send' => function ($newsletter, $subscriber) {
expect(is_array($newsletter))->true(); expect(is_array($newsletter))->true();
expect($newsletter['body']['text'])->contains('Hello test'); expect($newsletter['body']['text'])->contains('Hello test');
expect($subscriber)->equals($subscriber); expect($subscriber)->equals($subscriber);
return [ return [
'response' => false, 'response' => false,
'error' => Stub::make( 'error' => $this->make(
'\MailPoet\Mailer\MailerError', MailerError::class,
[ [
'getMessage' => 'failed', 'getMessage' => 'failed',
] ]
@ -881,8 +888,13 @@ class NewslettersTest extends \MailPoetTest {
}, },
] ]
), ),
]);
$data = [
'subscriber' => $subscriber,
'id' => $this->newsletter->id,
]; ];
$response = $this->endpoint->sendPreview($data); $response = $endpoint->sendPreview($data);
expect($response->errors[0]['message'])->equals('The email could not be sent: failed'); expect($response->errors[0]['message'])->equals('The email could not be sent: failed');
} }
@ -915,6 +927,7 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(NewslettersRepository::class), ContainerWrapper::getInstance()->get(NewslettersRepository::class),
ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class), ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class),
ContainerWrapper::getInstance()->get(PostNotificationScheduler::class), ContainerWrapper::getInstance()->get(PostNotificationScheduler::class),
ContainerWrapper::getInstance()->get(Mailer::class),
ContainerWrapper::getInstance()->get(MetaInfo::class), ContainerWrapper::getInstance()->get(MetaInfo::class),
$emoji $emoji
); );