From ab23a01423f685c44bd80a736bff79c452ed1abc Mon Sep 17 00:00:00 2001 From: Brezo Cordero <8002881+brezocordero@users.noreply.github.com> Date: Wed, 17 Jan 2024 16:03:58 -0600 Subject: [PATCH] Modify the check for sender address to implement rule for existing campaigns. [MAILPOET-5832] --- mailpoet/lib/API/JSON/v1/Newsletters.php | 2 +- .../Services/AuthorizedEmailsController.php | 12 ++++---- .../API/JSON/v1/NewslettersTest.php | 2 +- .../AuthorizedEmailsControllerTest.php | 29 ++++++++++++++++--- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/mailpoet/lib/API/JSON/v1/Newsletters.php b/mailpoet/lib/API/JSON/v1/Newsletters.php index d8dbec1506..a9cb483f94 100644 --- a/mailpoet/lib/API/JSON/v1/Newsletters.php +++ b/mailpoet/lib/API/JSON/v1/Newsletters.php @@ -193,7 +193,7 @@ class Newsletters extends APIEndpoint { ]); } - if ($status === NewsletterEntity::STATUS_ACTIVE && !$this->authorizedEmailsController->isSenderAddressValidForActivation($newsletter)) { + if ($status === NewsletterEntity::STATUS_ACTIVE && !$this->authorizedEmailsController->isSenderAddressValid($newsletter)) { return $this->errorResponse([ APIError::FORBIDDEN => __('The sender address is not an authorized sender domain.', 'mailpoet'), ], [], Response::STATUS_FORBIDDEN); diff --git a/mailpoet/lib/Services/AuthorizedEmailsController.php b/mailpoet/lib/Services/AuthorizedEmailsController.php index 1ef96589b9..30e089595e 100644 --- a/mailpoet/lib/Services/AuthorizedEmailsController.php +++ b/mailpoet/lib/Services/AuthorizedEmailsController.php @@ -153,16 +153,16 @@ class AuthorizedEmailsController { } } - public function isSenderAddressValidForActivation(NewsletterEntity $newsletter): bool { - if ($this->settings->get('mta.method') !== Mailer::METHOD_MAILPOET) { - return true; - } - + public function isSenderAddressValid(NewsletterEntity $newsletter, string $context = 'activation'): bool { if (!in_array($newsletter->getType(), NewsletterEntity::CAMPAIGN_TYPES)) { return true; } - if (!$this->senderDomainController->isAuthorizedDomainRequiredForNewCampaigns()) { + $isAuthorizedDomainRequired = $context === 'activation' ? + $this->senderDomainController->isAuthorizedDomainRequiredForNewCampaigns() : + $this->senderDomainController->isAuthorizedDomainRequiredForExistingCampaigns(); + + if (!$isAuthorizedDomainRequired) { return true; } diff --git a/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php b/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php index d05faf005c..101c20f1c7 100644 --- a/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php +++ b/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php @@ -236,7 +236,7 @@ class NewslettersTest extends \MailPoetTest { 'cronHelper' => $this->cronHelper, 'subscribersFeature' => Stub::make(Subscribers::class, ['check' => true]), 'authorizedEmailsController' => Stub::make(AuthorizedEmailsController::class, [ - 'isSenderAddressValidForActivation' => Expected::once(false), + 'isSenderAddressValid' => Expected::once(false), ]), ]); $res = $endpoint->setStatus([ diff --git a/mailpoet/tests/integration/Services/AuthorizedEmailsControllerTest.php b/mailpoet/tests/integration/Services/AuthorizedEmailsControllerTest.php index 6fd013b437..4cd4a5aaca 100644 --- a/mailpoet/tests/integration/Services/AuthorizedEmailsControllerTest.php +++ b/mailpoet/tests/integration/Services/AuthorizedEmailsControllerTest.php @@ -255,7 +255,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { 'AuthorizedSenderDomainController' => $senderDomainMock, ]; $controller = $this->getControllerWithCustomMocks($mocks); - verify($controller->isSenderAddressValidForActivation($newsletter))->false(); + verify($controller->isSenderAddressValid($newsletter))->false(); } public function testSenderAddressIsValidForActivationIfRestrictionsApplyAndAuthorizedSender() { @@ -276,7 +276,28 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { 'AuthorizedSenderDomainController' => $senderDomainMock, ]; $controller = $this->getControllerWithCustomMocks($mocks); - verify($controller->isSenderAddressValidForActivation($newsletter))->true(); + verify($controller->isSenderAddressValid($newsletter))->true(); + } + + public function testSenderAddressIsValidForSendingIfRestrictionsApplyAndAuthorizedSender() { + $this->settings->set('mta.method', Mailer::METHOD_MAILPOET); + $verifiedDomains = ['email.com']; + $senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [ + 'isAuthorizedDomainRequiredForExistingCampaigns' => Expected::once(true), + 'getVerifiedSenderDomainsIgnoringCache' => Expected::once($verifiedDomains), + ]); + + $newsletter = new NewsletterEntity(); + $newsletter->setSubject('Subject'); + $newsletter->setType(NewsletterEntity::TYPE_STANDARD); + $newsletter->setStatus(NewsletterEntity::STATUS_DRAFT); + $newsletter->setSenderAddress('contact@email.com'); + + $mocks = [ + 'AuthorizedSenderDomainController' => $senderDomainMock, + ]; + $controller = $this->getControllerWithCustomMocks($mocks); + verify($controller->isSenderAddressValid($newsletter, 'sending'))->true(); } public function testSenderAddressIsValidForActivationIfNotACampaign() { @@ -297,7 +318,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { 'AuthorizedSenderDomainController' => $senderDomainMock, ]; $controller = $this->getControllerWithCustomMocks($mocks); - verify($controller->isSenderAddressValidForActivation($newsletter))->true(); + verify($controller->isSenderAddressValid($newsletter))->true(); } public function testSenderAddressIsValidForActivationIfRestrictionsDoNotApply() { @@ -318,7 +339,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { 'AuthorizedSenderDomainController' => $senderDomainMock, ]; $controller = $this->getControllerWithCustomMocks($mocks); - verify($controller->isSenderAddressValidForActivation($newsletter))->true(); + verify($controller->isSenderAddressValid($newsletter))->true(); } public function testItSetsFromAddressInScheduledEmails() {