Add meta to response when email is unauthorized

[MAILPOET-3881]
This commit is contained in:
Jan Lysý
2021-10-28 20:42:06 +02:00
committed by Veljko V
parent eb0fb13f1c
commit 7d04ea28ad
3 changed files with 39 additions and 6 deletions

View File

@ -126,7 +126,7 @@ class Settings extends APIEndpoint {
$this->bridge->onSettingsSave($settings); $this->bridge->onSettingsSave($settings);
} }
$this->authorizedEmailsController->onSettingsSave($settings); $meta = $this->authorizedEmailsController->onSettingsSave($settings);
if ($signupConfirmation !== $this->settings->get('signup_confirmation.enabled')) { if ($signupConfirmation !== $this->settings->get('signup_confirmation.enabled')) {
$this->messageController->updateSuccessMessages(); $this->messageController->updateSuccessMessages();
} }

View File

@ -62,13 +62,13 @@ class AuthorizedEmailsController {
if (!Bridge::isMPSendingServiceEnabled()) { if (!Bridge::isMPSendingServiceEnabled()) {
$this->settings->set(self::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING, null); $this->settings->set(self::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING, null);
$this->updateMailerLog(); $this->updateMailerLog();
return; return null;
} }
$authorizedEmails = $this->bridge->getAuthorizedEmailAddresses(); $authorizedEmails = $this->bridge->getAuthorizedEmailAddresses();
// Keep previous check result for an invalid response from API // Keep previous check result for an invalid response from API
if ($authorizedEmails === false) { if ($authorizedEmails === false) {
return; return null;
} }
$authorizedEmails = array_map('strtolower', $authorizedEmails); $authorizedEmails = array_map('strtolower', $authorizedEmails);
@ -77,14 +77,16 @@ class AuthorizedEmailsController {
$result = $this->validateAddressesInScheduledAndAutomaticEmails($authorizedEmails, $result); $result = $this->validateAddressesInScheduledAndAutomaticEmails($authorizedEmails, $result);
$this->settings->set(self::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING, $result ?: null); $this->settings->set(self::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING, $result ?: null);
$this->updateMailerLog($result); $this->updateMailerLog($result);
return $result;
} }
public function onSettingsSave($settings) { public function onSettingsSave($settings): ?array {
$senderAddressSet = !empty($settings['sender']['address']); $senderAddressSet = !empty($settings['sender']['address']);
$mailpoetSendingMethodSet = ($settings[Mailer::MAILER_CONFIG_SETTING_NAME]['method'] ?? null) === Mailer::METHOD_MAILPOET; $mailpoetSendingMethodSet = ($settings[Mailer::MAILER_CONFIG_SETTING_NAME]['method'] ?? null) === Mailer::METHOD_MAILPOET;
if ($senderAddressSet || $mailpoetSendingMethodSet) { if ($senderAddressSet || $mailpoetSendingMethodSet) {
$this->checkAuthorizedEmailAddresses(); return $this->checkAuthorizedEmailAddresses();
} }
return null;
} }
public function onNewsletterSenderAddressUpdate(NewsletterEntity $newsletter, string $oldSenderAddress = null) { public function onNewsletterSenderAddressUpdate(NewsletterEntity $newsletter, string $oldSenderAddress = null) {

View File

@ -13,6 +13,7 @@ use MailPoet\Cron\Workers\WooCommerceSync;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Form\FormMessageController; use MailPoet\Form\FormMessageController;
use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\MailerLog; use MailPoet\Mailer\MailerLog;
use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTask;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
@ -54,7 +55,7 @@ class SettingsTest extends \MailPoetTest {
$this->endpoint = new Settings( $this->endpoint = new Settings(
$this->settings, $this->settings,
new Bridge, new Bridge,
$this->make(AuthorizedEmailsController::class, ['onSettingsSave' => true ]), $this->make(AuthorizedEmailsController::class, ['onSettingsSave' => null ]),
$this->make(TransactionalEmails::class), $this->make(TransactionalEmails::class),
WPFunctions::get(), WPFunctions::get(),
$this->diContainer->get(EntityManager::class), $this->diContainer->get(EntityManager::class),
@ -148,6 +149,36 @@ class SettingsTest extends \MailPoetTest {
expect(MailerLog::isSendingPaused())->false(); expect(MailerLog::isSendingPaused())->false();
} }
public function testItSaveUnauthorizedAddressAndReturnsMeta() {
$this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]);
$bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized@email.com'])]);
$this->endpoint = new Settings(
$this->settings,
$bridgeMock,
new AuthorizedEmailsController($this->settings, $bridgeMock, $this->diContainer->get(NewslettersRepository::class)),
$this->make(TransactionalEmails::class),
WPFunctions::get(),
$this->diContainer->get(EntityManager::class),
$this->diContainer->get(NewslettersRepository::class),
$this->diContainer->get(StatisticsOpensRepository::class),
$this->diContainer->get(ScheduledTasksRepository::class),
$this->diContainer->get(FormMessageController::class),
$this->make(ServicesChecker::class, ['isMailPoetAPIKeyPendingApproval' => false]),
$this->diContainer->get(SegmentsRepository::class),
$this->diContainer->get(SubscribersCountsController::class)
);
$response = $this->endpoint->set([
'sender' => ['address' => 'invalid@email.com'],
]);
expect($response->status)->same(200);
expect($this->settings->get('sender.address'))->same('invalid@email.com');
expect($response->meta)->equals([
'invalid_sender_address' => 'invalid@email.com',
'showNotice' => false,
]);
}
public function testItRejectsUnauthorizedFromAddress() { public function testItRejectsUnauthorizedFromAddress() {
$bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized@email.com'])]); $bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized@email.com'])]);
$this->endpoint = new Settings( $this->endpoint = new Settings(