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

View File

@ -14,6 +14,8 @@ use MailPoet\Cron\CronHelper;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Listing\BulkActionController;
use MailPoet\Listing\Handler;
use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\MetaInfo;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption;
@ -145,6 +147,7 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(NewslettersRepository::class),
ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class),
ContainerWrapper::getInstance()->get(PostNotificationScheduler::class),
ContainerWrapper::getInstance()->get(Mailer::class),
ContainerWrapper::getInstance()->get(MetaInfo::class),
ContainerWrapper::getInstance()->get(Emoji::class)
);
@ -200,6 +203,7 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(NewslettersRepository::class),
ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class),
ContainerWrapper::getInstance()->get(PostNotificationScheduler::class),
ContainerWrapper::getInstance()->get(Mailer::class),
ContainerWrapper::getInstance()->get(MetaInfo::class),
$emoji
);
@ -574,6 +578,7 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(NewslettersRepository::class),
ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class),
ContainerWrapper::getInstance()->get(PostNotificationScheduler::class),
ContainerWrapper::getInstance()->get(Mailer::class),
ContainerWrapper::getInstance()->get(MetaInfo::class),
ContainerWrapper::getInstance()->get(Emoji::class)
);
@ -825,19 +830,17 @@ class NewslettersTest extends \MailPoetTest {
function testItCanSendAPreview() {
$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);
$mailerMetaInfo = new MetaInfo;
$data = [
'subscriber' => $subscriber,
'id' => $this->newsletter->id,
'mailer' => Stub::makeEmpty(
'\MailPoet\Mailer\Mailer',
$endpoint = Stub::copy($this->endpoint, [
'mailer' => $this->makeEmpty(
Mailer::class,
[
'send' => function($newsletter, $subscriber, $extra_params)
use ($unsubscribeLink, $manageLink, $viewInBrowserLink, $mailerMetaInfo)
{
'send' => function ($newsletter, $subscriber, $extra_params) {
$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($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);
}
function testItReturnsMailerErrorWhenSendingFailed() {
$subscriber = 'test@subscriber.com';
$data = [
'subscriber' => $subscriber,
'id' => $this->newsletter->id,
'mailer' => Stub::makeEmpty(
'\MailPoet\Mailer\Mailer',
$endpoint = Stub::copy($this->endpoint, [
'mailer' => $this->makeEmpty(
Mailer::class,
[
'send' => function($newsletter, $subscriber) {
'send' => function ($newsletter, $subscriber) {
expect(is_array($newsletter))->true();
expect($newsletter['body']['text'])->contains('Hello test');
expect($subscriber)->equals($subscriber);
return [
'response' => false,
'error' => Stub::make(
'\MailPoet\Mailer\MailerError',
'error' => $this->make(
MailerError::class,
[
'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');
}
@ -915,6 +927,7 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(NewslettersRepository::class),
ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class),
ContainerWrapper::getInstance()->get(PostNotificationScheduler::class),
ContainerWrapper::getInstance()->get(Mailer::class),
ContainerWrapper::getInstance()->get(MetaInfo::class),
$emoji
);